///<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. 用最小二乘法拟合二元多次曲线

    引用 http://blog.sina.com.cn/s/blog_6e51df7f0100thie.html 对代码稍作修改和注释,防止链接失效. 1 ///<summary> 2 // ...

  2. python 水位流量关系曲线_应用最小二乘法拟合水位流量关系曲线

    · 水文水资源 · 吉 林 水 利 · 的 年 第 期 应用最小二乘法 拟合水位流量关系曲线 长春 水 文分站 郭永杰 关键词 水 文 水利计算 水祖流量关 系 最 小 二 乘法 数 学拟合 水位流量 ...

  3. python 高斯函数拟合_在python中拟合任意高斯函数,消耗大量内存

    我试图(在python中)将一系列任意数量的高斯函数(由一个仍在改进的简单算法确定)拟合到一个数据集.对于我当前的样本数据集,我有174个高斯函数.我有一个进行拟合的过程,但基本上是复杂的猜测和检查, ...

  4. 使用最小二乘法拟合由分段函数构成的广义贝塔分布的参数

    本文记录了用MATLAB中的lsqcurvefit函数拟合广义贝塔分布中的α和β参数的过程 广义贝塔分布的CDF(累积分布函数)如下: 其中l和r为偏离中心的程度,正规贝塔分布中没有l和r参数 而 即 ...

  5. 用jupyter book导入excel数据做最小二乘多项式及任意非线性函数拟合

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.从excel导入数据 二.多项式拟合 三.任意函数拟合 一.从excel导入数据 import matplotlib.p ...

  6. 用 ATL ActiveX 绘制任意平面函数的曲线

    作者: 杨老师 下载源代码 关键词:脚本.ATL.ActiveX.脚本引擎.表达式计算.IActiveScript.IActiveScriptSite 一.前言 这是非常有挑战性的题目.对于用户输入的 ...

  7. 用ATL ActiveX 绘制任意平面函数的曲线

    一.前言 这是非常有挑战性的题目.对于用户输入的任意一个平面函数f(x),绘制出其函数曲线.这里最关键的技术难点就是如何实现计算表达式的值.在<编译原理>和<数据结构>的书中, ...

  8. matlab 最小二乘法拟合_机器学习十大经典算法之最小二乘法

    点击上方"计算机视觉cv"即可"进入公众号" 重磅干货第一时间送达 最小二乘法概述 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找 ...

  9. 最小二乘法拟合直线 C++/OpenCV

    问题: 我们在拥有一系列散列的点(x1,y1),(x2,y2)... (xm,ym),这些点在一条直线附近,通过点拟合直线. 我在工程中是要拟合一系列线段,其实一条线段就对应着两个要拟合的点,算法上稍 ...

最新文章

  1. 如何破解Red Hat Enterprise 4的root密码(救援有密码)
  2. 如何入门Web前端 你可以从这几方面入手
  3. 安装库_Python快速安装库的靠谱办法
  4. LeetCode 2136. 全部开花的最早一天(贪心)
  5. LeetCode 1864. 构成交替字符串需要的最小交换次数
  6. 马来西亚国家银行暂无发行央行数字货币计划
  7. AcWing 1057. 股票买卖 IV
  8. 小程序登录及用户信息和手机号的获取
  9. 《深入理解Java虚拟机》第1,2章
  10. iOS 内存管理arc
  11. 利用vuex和localStorage实现vue菜单权限管理(笔记)
  12. apache server和tomcat集群配置一:水平负载
  13. Hilbert变换及谱分析
  14. 后ERP时代Oracle EBS的机遇与挑战,云和奥创沉心钻研十年谈
  15. 【年中总结】衣带渐宽终不悔
  16. bootstrap案例解析
  17. GPS nmealib学习笔记 .
  18. 浙大OJ网址及ACM题目分类
  19. 如何解决KEIL 5 编译KEIL4的带有RTX系统的工程解决方法
  20. 什么是集成成像(Integral Image)

热门文章

  1. python基础语法whike循环_python基础语法 - 循环
  2. 2018中国计算机图形学大会,第十二届中国计算机图形学大会 (Chinagraph2018)
  3. udp 传输文件 java_Java 网络编程 之 UDP 文件传输
  4. mysql转sqlserver_mysql转sqlserver工具
  5. python所有算法_Python实现的各种常见分布算法示例
  6. 全国大学生数学建模2019年C题机场的出租车问题论文与代码
  7. flutter打包的app有多大_Flutter原生混合开发
  8. 蒙文字体怎么安装_焘哥带你玩转字体(三)字体的安装及显示问题
  9. pythonrequest得替代_Python爬虫通过替换http request header来欺骗浏览器实现登录功能...
  10. html循环自动点击事件,js循环遍历ul中li的点击事件,给给选中li添加css