实验三函数逼近与快速傅里叶变换P95专业班级:信计131班姓名:段雨博学号:2013014907一、实验目的1、熟悉matlab编程。2、学习最小二乘法及程序设计算法。二、实验题目1、对于给函数21125fxx在区间1,1上取10.20,1,10ixii,试求3次曲线拟合,试画出拟合曲线并打印出方程,与第二章计算实习题2的结果进行对比。2、由实验给出数据表x0.00.10.20.30.50.81.0y1.00.410.500.610.912.022.46试求3次、4次多项式的曲线拟合,再根据数据曲线形状,求一个另外函数的拟合曲线,用图示数据曲线及相应的三种拟合曲线。3.给定数据点,iixy如表所示ixix00.50.60.70.80.91iy11.751.962.192.442.713.00用最小二乘法求拟合数据的二次多项式,并求平方误差。三、实验原理与理论基础1.最小二乘原理与线性拟合:在函数的最佳平方逼近中],[)(baCxf,如果)(xf只在一组离散点集}...,1,0,{mixi上给出,这就是科学实验中经常见到的实验数据{}...1,0),,{(miyxii}的曲线拟合,这里)...1,0)((mixfyii,要求一个函数)(*xSy与所给数据}...1,0),,{(miyxii拟合,若记误差Tm),...(10,设)(),...(),(10xxxn是C[a,b]上线性无关函数族,在)}(),...(),({10xxxspann中找一函数)(*xS使误差平方和20020222])([min])(*[miiimiimiiyxSyxS,这里)(...)()()(1000xaxaxaxSnn(mn)。这就是一般的最小二乘逼近,用几何语言说,就称为曲线拟合的最小二乘法。数据拟合是根据测定的数据间的相互关系,确定曲线),...,,;(10naaaxsy的类型,然后再根据在给定点上误差的平方和达到最小的原则,即求解无约束问题:miininyaaaxsaaaF121010,)),...,,;((),...,,(min确定出最优参数:),...,1,0(*nkak,从而得到拟合曲线).(*xsy2、多项式拟合。3、定义1:设有数据},...,,{21mxxxX和权系数),,...,2,1(mii称:miiiixgxfgf1)()(),(为函数为权的内积。上以在和},...,,{21mxxxXgf4、用正交函数最佳平方逼近:为避免出现正规方程组的系数矩阵是病态矩阵的情况,在选择多项式时需要考虑正交的多项式nnbaCspan,...,,],,[},...,,{.1010设是正交基,即:kikikki,,0),(22于是正规方程组可以简化为:,,...,1,0),,(22nkfakkk(1)解方程得到:.,...,1,0,/),(22*nkfaakkkk这里避免了求解病态方程组,提高了计算系数的精确度。对任意的],,[)(baCxf其最佳平方逼近函数为:)(/),()()(2200**xfxaxskknknkkkk由式(1)以及nkkkfafsfsfsfsf0*22***22*22),(),(),(,导出平方误差为:nkkkaf022*2222,)(其平方根称为均方误差。5、由题意决定,....),,1(2xxspan,即决定拟合多项式,分别计算1(,)(,)nijijmkkkk,1(,)(,)niijmkyky,用(,)ijkk组成方阵A,用(,)iky组成矩阵B,利用A/B求出该多项式的系数,再利用1(())^2niiifxy求出平方误差。四、实验内容解:1、i=0:10;x=-1+0.2*i;y=1./(1+25*x.^2);p=polyfit(x,y,3);s=vpa(poly2sym(p))s=-0.00000000000000016864439246388428423588689609742*x^3-0.57518273581808898597955703735352*x^2+0.000000000000000042557797397088199024277357508168*x+0.48412492484890701227584486332489f=polyval(p,x);plot(x,f,x,y,'o')2、x=[00.10.20.30.50.81];y=[10.410.50.610.912.022.46];p1=polyfit(x,y,3)%三次多项式拟合p1=-6.622112.8147-4.65910.9266p2=polyfit(x,y,4)%四次多项式拟合p2=2.8853-12.334816.2747-5.29870.9427y1=polyval(p1,x);y2=polyval(p2,x);%多项式求值plot(x,y,'c--',x,y1,'r:',x,y2,'y-.')p3=polyfit(x,y,2)%观察图像,类似抛物线,故用二次多项式拟合。p3=3.1316-1.24000.7356y3=polyval(p3,x);plot(x,y,'c--',x,y1,'r:',x,y2,'y-.',x,y3,'k--')%画出四种拟合曲线3、M文件:function[]=zuixiaoercinihe2(x,y)n=length(x);k00=0;fori=1:nk00=k00+1;endk01=0;fori=1:nk01=k01+x(i);endk02=0;fori=1:nk02=k02+x(i)*x(i);endk11=0;fori=1:nk11=k11+x(i)*x(i);endk12=0;fori=1:nk12=k12+x(i)*x(i)*x(i);endk22=0;fori=1:nk22=k22+x(i)*x(i)*x(i)*x(i);endk0y=0;fori=1:nk0y=k0y+y(i);endk1y=0;fori=1:nk1y=k1y+x(i)*y(i);endk2y=0;fori=1:nk2y=k2y+x(i)*x(i)*y(i);endA=[k00k01k02;k01k11k12;k02k12k22];B=[k0y;k1y;k2y];C=A\B;p=C(1);q=C(2);r=C(3);symsm;'拟合的二次函数为'f=p+q*m+r*m*ml=0;fori=1:nl=l+((p+q*x(i)+r*x(i)*x(i))-y(i))*((p+q*x(i)+r*x(i)*x(i))-y(i));end'该拟合函数的平方误差为'end五、实验结果1、i=0:10;x=-1+0.2*i;y=1./(1+25*x.^2);p=polyfit(x,y,3);s=vpa(poly2sym(p))s=-0.00000000000000016864439246388428423588689609742*x^3-0.57518273581808898597955703735352*x^2+0.000000000000000042557797397088199024277357508168*x+0.48412492484890701227584486332489f=polyval(p,x);plot(x,f,x,y,'o')2、x=[00.10.20.30.50.81];y=[10.410.50.610.912.022.46];p1=polyfit(x,y,3)%三次多项式拟合p1=-6.622112.8147-4.65910.9266p2=polyfit(x,y,4)%四次多项式拟合p2=2.8853-12.334816.2747-5.29870.9427y1=polyval(p1,x);y2=polyval(p2,x);%多项式求值plot(x,y,'c--',x,y1,'r:',x,y2,'y-.')p3=polyfit(x,y,2)%观察图像,类似抛物线,故用二次多项式拟合。p3=3.1316-1.24000.7356y3=polyval(p3,x);plot(x,y,'c--',x,y1,'r:',x,y2,'y-.',x,y3,'k--')%画出四种拟合曲线3、x=[00.50.60.70.80.91.0]x=00.50000.60000.70000.80000.90001.0000y=[11.751.962.192.442.713.00]y=1.00001.75001.96002.19002.44002.71003.0000zuixiaoercinihe2(x,y)ans=拟合的二次函数为f=m^2+m+1ans=该拟合函数的平方误差为l=5.8178e-030六、实验结果分析与小结1、通过这次实习,我学会了如何使用matlab根据已知点或者函数进行线性拟合,并慢慢熟悉编写函数后如何进行改错,有些过程作了简单的注释,也明白了课本中最小二乘法算法如何逼近、如何运算,对第三章的理论内容有了更深的了解。只有真正操作了才能将理论转为实践,有新的发现。2、不足的地方仍然是matlab的使用。虽然很简单的最基础的会了一点,可是使用matlab仍有困难,有些函数编写不太对,结果出不来。专业术语、函数程序编写、修改错误、运行函数这几个环节每次实习都会有很多问题,都会被卡壳,需要去找资料来查这些东西是如何编写的。在不断地实习中要不断地改进,不断地学会更多关于matlab的操作内容,熟悉编程语言,不断积累经验。