数值分析实验报告-插值、逼近(共10页).docx
精选优质文档-倾情为你奉上实验报告:函数逼近&插值多项式补充问题1:对于给函数,取点,k取0,1,n。n取10或20。试画出拟合曲线并打印出方程,与第二章计算实习题2的结果进行比较。问题2:对于给函数在区间-1,1上取xi=-1+0.2i(i=0,1,2,10),试求3次曲线拟合,试画出拟合曲线并打印出方程,与第二章计算实习题2的结果进行比较。实验目的:通过编程实现牛顿插值方法和函数逼近,加深对多项式插值的理解。应用所编程序解决实际算例。实验要求:1 认真分析问题,深刻理解相关理论知识并能熟练应用;2 编写相关程序并进行实验;3 调试程序,得到最终结果;4 分析解释实验结果;5 按照要求完成实验报告。实验原理:详见数值分析 第5版第二章、第三章相关内容。实验内容:(1)问题1:这里我们可以沿用实验报告一的代码,对其进行少量修改即可。当n=10时,代码为:clear allclck=0:10;n=length(k);x1=cos(2*k+1)/2/n*pi);y1=1./(1+25.*x1.2);f=y1(:);for j=2:n for i=n:-1:j f(i)=(f(i)-f(i-1)/(x1(i)-x1(i-j+1); endendsyms F x p;F(1)=1;p(1)=y1(1);for i=2:n F(i)=F(i-1)*(x-x1(i-1); p(i)=f(i)*F(i);endsyms PP=sum(p);P10=vpa(expand(P),5);x0=-1:0.001:1;y0=subs(P,x,x0);y2=subs(1/(1+25*x2),x,x0);plot(x0,y0,x0,y2)grid onxlabel('x')ylabel('y')由此我们可以得到P10(x)=-46.633*x10+3.0962e-14*x9+130.11*x8-7.2714e-14*x7-133.44*x6+7.1777e-14*x5+61.443*x4-1.5805e-14*x3-12.477*x2-1.6214e-16*x+1.0并可以得到牛顿插值多项式在-1,1上的图形,并和原函数进行对比,得Fig. 1。Fig.1 牛顿插值多项式(n=10)函数和原函数图形当n=20,将上述代码中的“k=0:10;”改为“k=0:20;”即可。由此我们可以得到P20(x)=6466.6*x20+8.0207e-13*x19-34208.0*x18-3.5038e-12*x17+77754.0*x16-99300.0*x14+3.7253e-9*x13+78236.0*x12-39333.0*x10+12636.0*x8-4.6566e-10*x7-2537.3*x6+306.63*x4-21.762*x2+1.0并可以得到牛顿插值多项式在-1,1上的图形,并和原函数进行对比,得Fig. 2。Fig.2牛顿插值多项式(n=20)函数和原函数图形回顾一下实验一的结果(见Fig. 3),我们不难发现,仅仅是改变了x的取值,结果发生了很大的变化。实验一中,插值多项式与原函数产生了很大的偏差,并且随着分的段数的增加,其误差不断变大,但是在本次实验中,我们不难发现,虽然多项式依旧存在震荡现象,但是误差小了很多,而且随着分的段数的增加,插值多项式曲线与原函数曲线已经十分接近了。Fig.3实验一结果这个例子说明:采用切比雪夫节点替代等距节点可以消除龙格现象。(2)问题2:分析问题,发现在这个问题中,我们已经知道了原函数,同时它也告诉我们所需取的11个点的值,所以这里可以用两种方法进行函数逼近得到拟合曲线。首先采用最小二乘法来考虑这个问题,编写代码如下(这里没有直接调用polyfit函数):clear allclcn=3;x1=-1:0.2:1;y1=1./(1+25.*x1.2);syms S G d a x;for i=1:n+1; for j=1:n+1; G(i,j)=sum(x1.(i+j-2); endendfor i=1:n+1; d(i)=sum(x1.(i-1).*y1);enda=G-1*d'for i=1:n+1 X(i)=x(i-1);endS=vpa(X*a,5)x0=-1:0.001:1;y0=subs(S,x,x0);y2=subs(1/(1+25*x2),x,x0);plot(x0,y0,x0,y2)grid onxlabel('x')ylabel('y')我们可以得到一个三次多项式:S3=1.1665e-16*x3 - 0.57518*x2 - 9.4553e-17*x + 0.48412。同时我们也可以得到它与原函数的图形,如图Fig. 4。Fig.4 最小二乘法n=3的结果我们发现得到的结果和原函数产生了巨大的误差。首先观察得到的多项式,我们发现它的3次项系数非常小,原因是原函数是一个偶函数,这将导致奇次项系数基本为0。这里我们调整n,对结果进行观察,取n=4,6,8,10,20。我们可以得到Fig.5-Fig.9。S4=1.4852*x4+1.3703e-16*x3-2.0604*x2-1.1769e-16*x+0.65522S6=-4.633*x6+4.0789e-14*x5+8.4769*x4-5.28e-14*x3-4.5969*x2+1.3229e-14*x+0.78461S8=20.466*x8-3.8972e-12*x7-43.601*x6+6.9014e-12*x5+30.817*x4-3.4363e-12*x3-8.5318*x2+4.2796e-13*x+0.88802S10=-220.94*x10-5.1978e-9*x9+494.91*x8+1.0649e-8*x7-381.43*x6-6.9693e-9*x5+123.36*x4+1.6139e-9*x3-16.855*x2-9.6021e-11*x+1.0S20=-318.82*x20+74.132*x19+43.205*x18-83.871*x17+91.867*x16+68.562*x15+29.364*x14-56.393*x13+260.42*x12-32.957*x11+79.822*x10+1.8279*x9-139.85*x8+49.564*x7-121.95*x6-23.918*x5+90.922*x4+3.1437*x3-15.933*x2-0.*x+1.0Fig.5 最小二乘法n=4的结果Fig.6 最小二乘法n=6的结果Fig.7 最小二乘法n=8的结果Fig.8 最小二乘法n=10的结果Fig.9 最小二乘法n=20的结果不难发现,拟合结果并不理想,当n=8时与原函数较为接近,而当n取其他值时,都有着比较大的误差,说明采用最小二乘法考虑这个问题并不是一个十分好的方法,对yi进行适当变形可能可以得到更好的结果。同时,由于知道f(x),这道题我们也可以采用最佳平方逼近的方法,编写代码如下:clear allclcsyms S H a d x;n=3;for i=1:n+1 d(i)=int(x(i-1)/(1+25*x2),x,-1,1);endfor i=1:n+1 for j=1:n+1 H(i,j)=int(x(i+j-2),x,-1,1); endenda=H-1*d'for i=1:n+1 X(i)=x(i-1);endS=vpa(X*a,5)x0=-1:0.001:1;y0=subs(S,x,x0);y2=subs(1/(1+25*x2),x,x0);plot(x0,y0,x0,y2)grid onxlabel('x')ylabel('y')由此我们可以得到一个三次多项式,(事实上这是一个二次多项式):S3=0.50923-0.70366*x2,同时我们也可以得到该多项式与原函数的图像,见Fig. 10。Fig.10 最佳平方逼近n=3的结果不然发现采用这种方法有着和最小二乘法相同的问题,同样我们这里也对n取不同的值进行观察,取n=4,6,8,10,20。我们可以得到Fig.11-Fig.15。S4=1.8689*x4-2.3055*x2+0.66942S6=-4.9969*x6+8.6828*x4-4.5768*x2+0.77758S8=13.392*x8-29.995*x6+23.105*x4-7.199*x2+0.85042S10=-35.931*x10+98.491*x8-100.08*x6+46.465*x4-9.8945*x2+0.89942S20=5023.5*x20-26343.0*x18+59469.0*x16-75642.0*x14+59603.0*x12-30157.0*x10+9844.2*x8-2038.8*x6+259.82*x4-19.945*x2+0.9862Fig.11 最佳平方逼近n=4的结果Fig.12 最佳平方逼近n=6的结果Fig.13 最佳平方逼近n=8的结果Fig.14 最佳平方逼近n=10的结果Fig.15 最佳平方逼近n=20的结果显然,当知道原函数的情况下,当n取较大值时,多项式结果可以很好的逼近原函数。实验感想:通过本次实验,我对插值函数和函数逼近有了更加清晰的认识。专心-专注-专业