最小二乘法曲线拟合原理

一、最小二乘法原理

对于给定的一组数据(xi,yi),假定它满足n次多项式:

为了求取各阶参数的最优解,对于每个xi,通过n次多项式计算的值和yi之间的差值的平方和应该最小,即:

由于其拟合函数为多项式,这样的曲线拟合问题又叫多项式拟合问题,特别的,当n=1时,一次多项式拟合又叫直线拟合。将a0,a1…an作为变量,对上式进行偏分求导,得到n+1组方程:

可以简化为:MA=B,则A=M-1B;或者通过消元法求解各个a的值。其中:

二、最小二乘法矩阵表示

对于给定的一组数据(x1,y1),其矩阵表示为:

对于m个点对来说,可以组合成矩阵的模式:

利用矩阵表示为XA=Y,其中此种超定方程的最小二乘解为:

三、代码实现(基于第一种表示)

以两次多项式为例,各阶求和函数,2阶:

double average2(double* x0, double* y0, int Num)
{   double addsum = 0;double addaverage = 0;  for (int i = 0; i < Num; i++) {               addsum = addsum + x0[i] * y0[i];}addaverage = addsum / Num;  return addaverage;
}

3阶:

double average3(double* x0, double* y0, double* z0, int Num)
{double addsum = 0;    double addaverage = 0; for (int i = 0; i < Num; i++) { addsum = addsum + x0[i] * y0[i] * z0[i];    }   addaverage = addsum / Num; return addaverage;
}

其它阶次的函数可参考实现。多项式系数求解:

bool calcPolFit2(double * ValidX, double * ValidY, int Num)
{int validNum = Num;   arma::mat matM(3, 3);   arma::vec matB(3, 1);   arma::vec result(3, 1);//组织矩阵M  matM(0, 0) = average4(ValidX, ValidX, ValidX, ValidX, validNum);   matM(0, 1) = average3(ValidX, ValidX, ValidX, validNum);   matM(0, 2) = average2(ValidX, ValidX, validNum);   matM(1, 0) = matM(0, 1);   matM(1, 1) = matM(0, 2);   matM(1, 2) = average1(ValidX, validNum);   matM(2, 0) = matM(0, 2);   matM(2, 1) = matM(1, 2);   matM(2, 2) = 1;//组织矩阵B matB(0) = average3(ValidX, ValidX, ValidY, validNum);  matB(1) = average2(ValidX, ValidY, validNum);  matB(2) = average1(ValidY, validNum);  result = inv(matM)*matB;   A = result(0); B = result(1); C = result(2);     return true;
}

最小二乘法曲线拟合原理相关推荐

  1. 最小二乘法曲线拟合原理与实现

    参考文章http://blog.csdn.net/jairuschan/article/details/7517773 最小二乘学习法是对模型的输出和训练集输出的平方误差为最小时的参数进行学习,式中之 ...

  2. 计算机hash函数开题报告,最小二乘法的原理和应用【开题报告+文献综述+毕业论文】.Doc...

    PAGE PAGE 4 毕业论文开题报告 数学与应用数学 最小二乘法的原理和应用 选题的意义 最小二乘法在很多领域都的到了广泛的应用.在研究两个变量之间的关系时,可以用回归分析的方法进行分析.当确定了 ...

  3. 最小二乘法的原理及python实现

    在看RVFL神经网络的时候,在权值更新求解时,从隐含层到输出层的权重,是根据最小二乘法的原理更新求解的. 最小二乘法Least Square Method: 假设有一系列数据值,D = {(x1,y2 ...

  4. matlab polyfit c语言,算法——纯C语言最小二乘法曲线拟合

    算法--纯C语言最小二乘法曲线拟合 [复制链接] 写完,还没来得及写注释,已通过Matlab的polyfit验证(阶数高或者数据量太大会有double数据溢出的危险,低阶的都吻合),时间有点紧,程序注 ...

  5. 最小二乘法的原理与计算

    https://www.cnblogs.com/xunziji/p/7366580.html 最小二乘法的应用例子  如果某个资产在买入后,第 2-100 天内的收益变化如下图所示: 这时,我想要获得 ...

  6. 多项式最小二乘法曲线拟合Python程序

    #多项式最小二乘法曲线拟合 from numpy import * from numpy.linalg import * X = [1, 3, 4, 5, 6, 7, 8, 9, 10] Y = [2 ...

  7. 关系模式最小依赖集怎么求_偏最小二乘法的原理与实现

    偏最小二乘法的原理与实现 近几年来,机器学习在各个领域都有不错的表现,在生物信息领域也有相关的应用.然而,在诸如基因组学.转录组学.蛋白组学以及代谢组学等高通量数据的一大特点是特征量多.样本数少. 以 ...

  8. c语言平曲线,算法——纯C语言最小二乘法曲线拟合

    算法--纯C语言最小二乘法曲线拟合 写完,还没来得及写注释,已通过Matlab的polyfit验证(阶数高或者数据量太大会有double数据溢出的危险,低阶的都吻合),时间有点紧,程序注释,数学推导等 ...

  9. 最小二乘法的原理及推导

    最小二乘法法原理及推导 说明:本文是在学习最小二乘法时在博文中转发的,将其转发是为了日后便于查看.更为清晰的过程 详见本文出处 [本文出处](https://blog.csdn.net/marsjoh ...

  10. 最小二乘法曲线拟合 java_最小二乘法拟合java实现源程序(转)

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

最新文章

  1. java事件处理模型_从零开始理解JAVA事件处理机制(3)
  2. ViewBag、ViewData和TempData使用方法、区别与联系
  3. 用JAVAMAIL发送邮件的一个简单例子
  4. 苹果平板怎么卸载软件_怎么很好的卸载流氓软件!
  5. mac使用codelite运行程序没有输出
  6. 树莓派 HC-SRO4超声波测距模块的使用
  7. 学校后台管理系统 php,基于ssm的校园门户网站+后台管理系统
  8. Mybatis常用的OGNL表达式
  9. 设计模式(四)行为型之模板方法模式、策略模式、命令模式、责任链模式
  10. 淘宝优惠券查询API接口,优惠券查询API接口,优惠券API接口接入解决方案
  11. 线性代数感悟之4 通过增广矩阵查看解的情况上篇
  12. linux完美卸载编译的php,完美卸载linuxoracle的方法
  13. Idear部署web项目过程
  14. 腾讯视频Node.js服务是如何支撑国庆阅兵直播高并发的?
  15. axure 元件_Axure流程图制作
  16. WiFi穿墙手册:解读天线、dbi、发射功率和无线信号的关系
  17. Nginx (一) --------- Nginx 简介
  18. 为什么都瞧不起培训班出来的程序员?
  19. 为什么采用实时操作系统?
  20. Concept Whitening for interpretable image recognition 用于可解释图像识别的概念白化

热门文章

  1. python发邮件smtplib+mail
  2. 【学习技巧和心得】 - 如何将学习资源转化成图文笔记?
  3. Python下载所有XKCD漫画
  4. 浏览器与WEB服务器的网络协议
  5. ScreenToClient
  6. Java并发编程(十七)Java并发包中原子操作类原理
  7. maya动画镜像_Maya
  8. linux内核定时器
  9. 【重磅整理】180篇NeurIPS2020顶会《强化学习领域》Accept论文大全
  10. UI自动化报错Can not connect to the Service解决方案