最小二乘法及matlab程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最小二乘法及matlab程序 最小二乘法简介: 最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。 最小二乘法的矩阵形式: 若未知量的个数大于方程的个数,则方程无解,但在数值计算领域,我们通常是计算 ,解出其中的x 。比较直观的做法是求解 ,但通常比较低效。其中一种常见的解法是对 A进行QR分解(A=QR),其中Q是正交矩阵(Orthonormal Matrix),R是上三角矩阵(Upper Triangular Matrix),则有:。 Matlab命令: 一次函数线性拟合使用polyfit(x,y,1); 多项式函数线性拟合使用 polyfit(x,y,n),n为次数; 例如: x=[0.5,1.0,1.5,2.0,2.5,3.0]; y=[1.75,2.45,3.81,4.80,7.00,8.60]; p=polyfit(x,y,2) x1=0.5:0.5:3.0; y1=polyval(p,x1); plot(x,y,*r,x1,y1,-b) 计算结果为: p =0.5614 0.8287 1.1560 即所得多项式为y=0.5614x^2+0.8287x+1.15560 然后可以使用polyval在t处预测:?y_hat=polyval(p,t) 非线性函数使用:lsqcurvefit、nlinfit 格式:lsqcurvefit(f,a,x,y)、nlinfit(x,y,f,a) f:符号函数句柄,如果是以m文件的形式调用的时候,别忘记加@.这里需要注意,f函数的返回值是和y匹对的,即拟合参数的标准是(f-y)^2取最小值,具体看下面的例子 a:最开始预估的值(预拟合的未知参数的估计值)。如上面的问题如果我们预估A为1,B为2,则a=[1 2] x:我们已经获知的x的值 y:我们已经获知的x对应的y的值 例子1: 问题:对于函数y=a*sin(x)*exp(x)-b/log(x)我们现在已经有多组(x,y)的数据,我们要求最佳的a,b值 %针对上面的问题,我们可以来演示下如何使用这个函数以及看下其效果 x=2:10; y=8*sin(x).*exp(x)-12./log(x); %上面假如是我们事先获得的值 a=[1 2]; f=@(a,x)a(1)*sin(x).*exp(x)-a(2)./log(x); %第一种方法使用lsqcurvefit lsqcurvefit(f,a,x,y) ans = 7.999999999999987 11.999999999988997%和我们预期的值8和12结合得非常好 %第二种方法使用nlinfit nlinfit(x,y,f,a) ans = 8.000000000000000 11.999999999999998 %********************************** %另一种方法,假如我们写了一个如下的m文件 function f=test(a,x) f=a(1)*sin(x).*exp(x)-a(2)./log(x); end %则在上面lsqcurvefit函数调用如下,不要忘记那个@ lsqcurvefit(@test,a,x,y) 例子2:(多元的情况,注意看格式) 问题:我们已知z=a*(exp(y)+1)-sin(x)*b且有多组(x,y,z)的值,现在求最佳系数a,b x=2:10; y=10*sin(x)./log(x); z=4.5*(exp(y)+1)-sin(x)*13.8; f=@(a,x)a(1)*(exp(x(2,:))+1)-sin(x(1,:))*a(2); %第一种方法使用lsqcurvefit lsqcurvefit(f,[1 2],[x;y],z)%注意这里面的[x;y],这里的[1 2]表示我们设置f函数里的初始值a(1)=1,,a(2)=2 ans = 4.499999999999999 13.800000000000024 %第二种方法使用nlinfit nlinfit([x;y],z,f,[1 2]) ans = 4.500000000000000 13.799999999999956

文档评论(0)

131****9843 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档