当前位置:文档之家› 曲线拟合的方法及过程

曲线拟合的方法及过程

一、课程设计题目: 对于函数 xex x f --=)(从00=x 开始,取步长1.0=h 的20个数据点,求五次最小二乘拟合多项式5522105)()()()(x x a x x a x x a a x P -++-+-+= 其中 ∑===1995.020i ix x 二、原理分析 (1)最小二乘法的提法当数据量大且由实验提供时,不宜要求近似曲线)(x y φ=严格地经过所有数据点),(i i y x ,亦即不应要求拟合函数)(x ϕ在i x 处的偏差(又称残差)i i i y x -=)(φδ(i=1,2,…,m)都严格的等于零,但是,为了使近似曲线能尽量反应所给数据点的变化趋势,要求偏差i δ适当的小还是必要的,达到这一目标的途径很多,例如,可以通过使最大偏差i δmax 最小来实现,也可以通过使偏差绝对值之和∑ii δ最小来实现……,考虑到计算方便等因素,通常用使得偏差平方和∑ii 2δ最小(成为最小二乘原则)来实现。

按最小二乘原则选择近似函数的方法称为最小二乘法。

用最小二乘法求近似函数的问题可以归结为:对于给定数据),(i i y x(i=1,2,…,m),要求在某个函数类Φ中寻求一个函数)(x *ϕ,使[][]21)(21*)()(min ∑∑=Φ∈=-=-mi iix mi iiy x y x ϕϕϕ(1-1) 其中)(x ϕ为函数类Φ中任意函数。

(1)确定函数类Φ,即确定)(x ϕ的形式。

这不是一个单纯的数学问题,还与其他领域的一些专业知识有关。

在数学上,通常的做法是将数据点),(i i y x 描绘在坐标纸上,然后根据这些点的分布情况来选择的)(x ϕ形式。

(2)球最小二乘法的解,即求满足条件(1-1)的近似函数)(x *ϕ。

(3)最小二乘法的实验原理 设)(x ϕ具有如下形式)(x ϕ=F),,,,10x a a a n ⋅⋅⋅( (1-2) 其中n<m, k a (k=0,1,…,n)是待定参数,求具有这种形式的最小二乘解的实质,就是要适当选择k a =*k a (k=0,1,…,n),使相应的函数 ),,,,()(**1*0*x a a a x n ⋅⋅⋅=ϕ (1-3) 满足条件(1-1),也就是说,点),,,(**1*0n a a a ⋅⋅⋅是多元函数 []211010),,,,),,,∑=-⋅⋅⋅=⋅⋅⋅mi i i n n y x a a a F a a a s ((的极小点,从而使**1*0,,,n a a a ⋅⋅⋅满足方程组0S=∂∂ka ,(k=0,1,…,n) (1-4) 因此,可以通过解上述方程组(称为法方程组)来求取*k a (k=0,1,…,n),以便获得最小二乘解。

必须指出,在一般情况下,法方程组不一定是线性方程组,但是,若)(x ϕ能表示成一组已知函数)()()(x x x n ϕϕϕ,,,10⋅⋅⋅的线性组合,即 )()()()(x a x a x a x n n ϕϕϕϕ+⋅⋅⋅++=1100 (1-5) 则相应的发方程组必须是线性方程组。

事实上,此时,[]21110010),,,∑=-+⋅⋅⋅++=⋅⋅⋅mi i i n n i i n y x a x a x a a a a s )()()((ϕϕϕ 令0S=∂∂ka ,(k=0,1,…,n)即得方程组[]0)(11100=-+⋅⋅⋅++∑=mi i i n n i i i ky x a x a x a x )()()(ϕϕϕϕ若引用记号∑∑====mi ii k k mi i j i k j k y x f x x 11)(),()()(),(ϕϕϕϕϕϕ(1-6)则所得的方程组可表示成),(),(),(),(1100f a a a k n k n k k ϕϕϕϕϕϕϕ=+⋅⋅⋅++ (k=0,1,…,n)即⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡),(),(),(),(),(),(),(),(),(),(),()(1010101110101000f f f a a a ,n n n n n n n n ϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕ (1-7) 这是一个系数矩阵为对称矩阵的线性方程组,可以证明,当)(,),(),(10x x x n ϕϕϕ 线性无关时,存在有唯一解*k k a a = (k=0,1,…,n)并且相应的函数)()()()(*1*10*0*x a x a x a x n n ϕϕϕϕ+++= 就是满足(1-1) 的最小二乘解。

作为曲线拟合的一种常见情况,若讨论的是代数多项式拟合,即n n x a x a a x +++= 10)(ϕ (1-8)此时只要将(1-5)中的函数)(,),(),(10x x x n ϕϕϕ 依次看成函数,,,1n x x 则由(1-6)与(1-7)立即可得相应的法方程组⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡∑∑∑∑∑∑∑∑∑∑∑++i ni i i in n in in in iii n i i y x yx y a a a xxx xxx x x m102112其中“∑”是“∑=mi 1”的简写。

综上分析,求最小二乘解的步骤可以归结为:先根据)(x ϕ的特点,建立确定k a (k=0,1,…,n)的法方程组;然后根据写法方程组求取最小二乘解)(x *ϕ对应的参数),,1,0(*n k a k=。

三、程序流程图四、程序设计#include<stdio.h> #include<math.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;i<20;i++) {x[0]=0.0;x[i]=x[0]+i*h;y[i]=x[i]-exp(double(-x[i]));}for(i=0;i<20;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;l<6;l++){for(j=0;j<6;j++){ int t;t=l+j;double m=0.0;for(k=0;k<20;k++){m=m+pow( (x[k]-0.95),t);}printf("aa[%d][%d]=%8.6f",l,j,m);}}for(l=0;l<6;l++){int w; w=l; double n=0.0;for(k=0;k<20;k++){n=n+pow( (x[k]-0.95),w)*y[k];}printf("b[%d]=%8.6f",l,n);}}上面程序的结果显示#include<math.h>#include<stdio.h>#define N 6main(){double A[N][N+1]={{20.00,0.000,6.650,0.0000,3.966725,0.0000,9.913816},{0.000,6.650,0.000,3.9667,0.0000,2.807434,9.486726},{6.650,0.000,3.966725,0.0000,2.807434,0.0000,2.932210},{0.000,3.966725,0.000,2.807434,0.0000,2.156368,5.688863},{3.966725,0.000,2.807434,0.000,2.156368,0.000,1.655724},{0.000,2.807434,0.000,2.156368,0.0000,1.736579,4.037885}}, total,x[6]; int i,j,k,m,n;printf("方程的增广矩阵:\n");for(i=0;i<N;i++){for(j=0;j<N+1;j++)printf(" %8.6f ",A[i][j]);printf("\n");}for(j=0;j<N-1;j++){k=j;for(i=j+1;i<N;i++){if(fabs(A[i][j])>fabs(A[k][j]))k=i;}if(k==j)for(i=j+1;i<N;i++)for(m=j+1;m<N+1;m++){A[i][m]=A[i][m]-A[j][m]*A[i][j]/A[j][j];}else{for(n=0;n<N+1;n++){A[N][n]=A[k][n];A[k][n]=A[j][n];A[j][n]=A[N][n];}for(i=j+1;i<N;i++)for(m=j+1;m<N+1;m++){ A[i][m]=A[i][m]-A[j][m]*A[i][j]/A[j][j];}}}x[N-1]=A[N-1][N]/A[N-1][N-1];for(i=N-2;i>=0;i--){total=A[i][N];for(j=N-1;j>i;j--)total=total-x[j]*A[i][j];x[i]=total/A[i][i];}printf("矩阵的解:\n");for(i=0;i<N;i++)printf("x1=%8.6f\n",x[i]);}五、程序最终运行结果六、设计总结5 43 25)(003356.0)(016839.0)(064388.0)(193136.0)(386751.1563248.0)(xxxxxxxxxx xP-+---+---+=其中∑===1995.0 20ii xx通过上述运算,把原方程xexxf--=)(拟合成以上多项式。

通过本次实验学会了曲线拟合的方法及过程,并学会了在计算机上的实现,实现理论与实践的结合,提高了动手能力。

相关主题