曲线拟合的方法及过程.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文档。上传文档
查看更多
曲线拟合的方法及过程

一、课程设计题目: 对于函数 从开始,取步长的20个数据点,求五次最小二乘拟合多项式 其中 二、原理分析 (1)最小二乘法的提法 当数据量大且由实验提供时,不宜要求近似曲线严格地经过所有数据点,亦即不应要求拟合函数在处的偏差(又称残差) (i=1,2,…,m) 都严格的等于零,但是,为了使近似曲线能尽量反应所给数据点的变化趋势,要求偏差适当的小还是必要的,达到这一目标的途径很多,例如,可以通过使最大偏差最小来实现,也可以通过使偏差绝对值之和最小来实现……,考虑到计算方便等因素,通常用使得偏差平方和最小(成为最小二乘原则)来实现。 按最小二乘原则选择近似函数的方法称为最小二乘法。 用最小二乘法求近似函数的问题可以归结为:对于给定数据 (i=1,2,…,m),要求在某个函数类Φ中寻求一个函数,使 (1-1) 其中为函数类中任意函数。 确定函数类,即确定的形式。这不是一个单纯的数学问题,还与其他领域的一些专业知识有关。在数学上,通常的做法是将数据点描绘在坐标纸上,然后根据这些点的分布情况来选择的形式。 球最小二乘法的解,即求满足条件(1-1)的近似函数。 (3)最小二乘法的实验原理 设具有如下形式 =F (1-2) 其中nm, (k=0,1,…,n)是待定参数,求具有这种形式的最小二乘解的实质,就是要适当选择= (k=0,1,…,n),使相应的函数 (1-3) 满足条件(1-1),也就是说,点是多元函数 的极小点,从而使满足方程组 ,(k=0,1,…,n) (1-4) 因此,可以通过解上述方程组(称为法方程组)来求取(k=0,1,…,n),以便获得最小二乘解。 必须指出,在一般情况下,法方程组不一定是线性方程组,但是,若能表示成一组已知函数的线性组合,即 (1-5) 则相应的发方程组必须是线性方程组。事实上,此时, 令 ,(k=0,1,…,n)即得方程组 若引用记号 (1-6) 则所得的方程组可表示成 (k=0,1,…,n) 即 (1-7) 这是一个系数矩阵为对称矩阵的线性方程组,可以证明,当 线性无关时,存在有唯一解 (k=0,1,…,n) 并且相应的函数就是满足(1-1) 的最小二乘解。 作为曲线拟合的一种常见情况,若讨论的是代数多项式拟合,即 (1-8) 此时只要将(1-5)中的函数依次看成函数则由(1-6)与(1-7)立即可得相应的法方程组 其中“”是“”的简写。 综上分析,求最小二乘解的步骤可以归结为:先根据的特点,建立确定(k=0,1,…,n)的法方程组;然后根据写法方程组求取最小二乘解对应的参数。 三、程序流程图 四、程序设计 #includestdio.h #includemath.h static double x[20],y[20]; double main() { double h=0.1; int i=0; double aa[6][6],b[6]; int l,j,k; for(i=0;i20;i++) { x[0]=0.0;x[i]=x[0]+i*h; y[i]=x[i]-exp(double(-x[i])); } for(i=0;i20;i++) { printf(x[%d]=%8.6f,i,x[i]);printf(y[%d]=%8.6f,i,y[i]); } aa[0][0]=0.0; double n=0.0; for(l=0;l6;l++) {for(j=0;j6;j++) { int t; t=l+j; double m=0.0; for(k=0;k20;k++) { m=m+pow( (x[k]-0.95),t); } printf(aa[%d][%d]=%8.6f,l,j,m); } } for(l=0;l6;l++) { int w; w=l; double n=0.0; for(k=0;k20;k++) { n=n+pow( (x[k]-0.95),w)*y[k]; } printf(b[%d]=%8.6f,l,n); } } 上面程序的结果显示 #includemath.h #includestdio.h #define N 6 main() { double A[N][N+1]={ {20.00,0.000,6.650,0.0000,3.966725,0.0000,9.913816}, {0.000,6.650

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档