原文:利用最小二乘法拟合任意次函数曲线(C#)

///<summary>

   
///用最小二乘法拟合二元多次曲线

   
///</summary>

   
///<param
name="arrX">已知点的x坐标集合</param>

///<param
name="arrY">已知点的y坐标集合</param>

///<param
name="length">已知点的个数</param>

///<param
name="dimension">方程的最高次数</param>

public
static double[] MultiLine(double[] arrX, double[] arrY, int length,
int dimension)//二元多次线性方程拟合曲线

    {

       
int n = dimension +
1;                 
//dimension次方程需要求 dimension+1个 系数

       
double[,] Guass=new
double[n,n+1];     
//高斯矩阵 例如:y=a0+a1*x+a2*x*x

       
for(int i=0;i<n;i++)

       
{

           
int j;

           
for(j=0;j<n;j++)

           
{

               
Guass[i,j] = SumArr(arrX, j + i, length);

           
}

           
Guass[i,j] =
SumArr(arrX,i,arrY,1,length);

}

return ComputGauss(Guass,n);

}

public
static double SumArr(double[] arr, int n, int length)
//求数组的元素的n次方的和

    {

       
double s = 0;

       
for (int i = 0; i < length; i++)

       
{

           
if (arr[i] != 0 || n !=
0)

s = s + Math.Pow(arr[i], n);

           
else

               
s = s + 1;

       
}

       
return s;

    }

    public
static double SumArr(double[] arr1, int n1, double[] arr2, int n2,
int length)

    {

       
double s=0;

       
for (int i = 0; i < length; i++)

       
{

           
if ((arr1[i] != 0 || n1 != 0) &&
(arr2[i] != 0 || n2 != 0))

               
s = s + Math.Pow(arr1[i], n1) * Math.Pow(arr2[i], n2);

           
else

               
s = s + 1;

       
}

       
return s;

 

    }

public
static double[] ComputGauss(double[,] Guass,int n)

    {

       
int i, j;

       
int k,m;

       
double temp;

       
double max;

       
double s;

       
double[] x = new double[n];

for (i = 0; i < n;
i++)          
x[i] = 0.0;//初始化

for (j = 0; j < n; j++)

       
{

           
max =
0;

k =
j;

for (i = j; i < n; i++)

           
{

               
if (Math.Abs(Guass[i, j]) > max)

               
{

                   
max = Guass[i, j];

                   
k = i;

               
}

           
}

if (k != j)

           
{

               
for (m = j; m < n + 1; m++)

               
{

                   
temp = Guass[j, m];

                   
Guass[j, m] = Guass[k, m];

                   
Guass[k, m] = temp;

}

           
}

if (0 == max)

           
{

               
// "此线性方程为奇异线性方程"

return x;

           
}

for (i = j + 1; i < n; i++) 

           
{

s = Guass[i, j];

               
for (m = j; m < n + 1; m++)

               
{

                   
Guass[i, m] = Guass[i, m] - Guass[j, m] * s / (Guass[j, j]);

}

           
}

}//结束for (j=0;j<n;j++)

for (i = n-1; i >= 0; i--)

       
{

s = 0;

           
for (j = i + 1; j < n; j++)

           
{

               
s = s + Guass[i,j] * x[j];

           
}

x[i] = (Guass[i,n] - s) / Guass[i,i];

}

return x;

   
}//返回值是函数的系数

例如:y=a0+a1*x 返回值则为a0 a1

例如:y=a0+a1*x+a2*x*x 返回值则为a0 a1 a2

剩下的就不用写了吧

利用最小二乘法拟合任意次函数曲线(C#)的更多相关文章

  1. 最小二乘法拟合java实现源程序(转)

    因为我所在的项目要用到最小二乘法拟合,所有我抽时间将C++实现的程序改为JAVA实现,现在贴出来,供大家参考使用./** * <p>函数功能:最小二乘法曲线拟合</p> * @ ...

  2. tkinter内嵌Matplotlib系列(二)之函数曲线绘制

    目录 目录 前言 (一)对matplotlib画布的封装: (二)思路分析: 1.需求说明: 2.框架的设置: 3.文件说明: (三)各文件的源代码 1.main.py 2.widget.py 3.f ...

  3. matlab-非线性方程求根函数及函数曲线绘制

    Matlab中提供了很多求解非线性方程(y=f(x))的函数,刚開始使用,真的很困惑.全部.这里依据matlab的help文档对这些函数做一些小小的总结 fsolve函数 用来求解非线性方程组:F(x ...

  4. 简单而粗暴的方法画任意阶数Bezier曲线

    简单而粗暴的方法画任意阶数Bezier曲线 虽然说是任意阶数,但是嘞,算法原理是可以到任意阶数,计算机大概到100多阶就会溢出了 Bezier曲线介绍] [本文代码] 背景 在windows的Open ...

  5. 利用arguments求任意数量数字的和/最大值/最小值

    文章地址 https://www.cnblogs.com/sandraryan/ arguments是函数内的临时数据,用完销毁,有类似于数组的操作,但不是数组. 举个栗子1:利用arguments求 ...

  6. Flex中如何利用FocusManager类的setFocus函数设置TextInput的焦点的例子

    参考:https://blog.csdn.net/liruizhuang/article/details/5876455 <?xml version="1.0" encodi ...

  7. 【matlab】绘制双三次插值函数曲线

    想要的效果: 编程时要用到分段函数曲线的绘制方法:..+.*(分段条件). 需要注意的是:函数表达式中的乘除和乘方都要加“.”.因为一般的函数都是数在乘变量运算. x=-:; a=-0.5; w=ab ...

  8. Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数

    Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc ...

  9. 利用jquery的淡入淡出函数(fadeIn和fadeOut)--实现轮播

    首先说下,我在网上找的例子全是用的UL 实现,其实大可不必,只要是能包含img标签的HTML标签都可以做轮播效果.利用jquery的淡入淡出函数(fadeIn和fadeOut).废话也不多说,边上代码 ...

随机推荐

  1. 访问sharepoint站点自动使用当前用户名和密码登录

    https://blog.csdn.net/zw_2011/article/details/7417123 1.把sharepoint站点添入可信站点.   点击菜单栏“工具”——〉“Internet ...

  2. 【23.58%】【code forces 321E】Ciel and Gondolas

    time limit per test4 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  3. ArcGIS Runtime支持的GP工具列表(转 )

    转自原文 ArcGIS Runtime支持的GP工具列表(转 ) 目前ArcGIS Runtime有两个版本 Basic 版本和Standard版本,而Basic版本不支持Geoprocessing( ...

  4. SPOJ4491. Primes in GCD Table(gcd(a,b)=d素数,(1&lt;=a&lt;=n,1&lt;=b&lt;=m))加强版

    SPOJ4491. Primes in GCD Table Problem code: PGCD Johnny has created a table which encodes the result ...

  5. [转] Valgrind使用

    http://www.cnblogs.com/napoleon_liu/articles/2001802.html 调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www. ...

  6. Mysql存储过程中使用cursor

    一.表 学生表 CREATE TABLE `t_student` (    `stuNum` int(11) NOT NULL auto_increment,    `stuName` varchar ...

  7. java三大框架实现任务调度——IRemindService

    java实现任务调度,主要分为几个步骤: 1.创建一个服务             2.创建一个任务类,将服务作为一个任务去完成(实现job接口)             3.创建一个任务类实体    ...

  8. AR Drone系列之:使用ROS catkin创建package并使用cv_bridge实现对ar drone摄像头数据的处理

    1 开发环境 Ubuntu 12.04 ROS Hydro 2 前提 可參考这篇blog:http://blog.csdn.net/yake827/article/details/44564057 b ...

  9. Gini 系数与熵的关系

    首先来看二者的基本定义: ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪H(X)=−∑k=1KpklnpkGini(X)=∑k=1Kpk(1−pk) 将 f(x)=−lnx 在 x=1 处进行一阶泰勒展开(忽略高阶无穷小 ...

  10. sql数据库时间转换convert

    CONVERT CONVERT将某种数据类型的表达式显式转换为另一种数据类型. 严格来说,CONVERT不属于日期处理函数,只是它被经常用于日期处理中,所以这里把它列入了其他日期处理函数,下面是CON ...