数值分析实验报告-插值、逼近
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告:函数逼近&插值多项式补充
1 2k 1
问题1 :对于给函数f (x) 2,取点X k cos , k取0, 1,…,n。
n取10
1+25x 2n 2
或20。
试画出拟合曲线并打印出方程,与第二章计算实习题2的结果进行比较。
1 问题
2 :对于给函数f(x) 2在区间卜1,1]上取x i=-1+0.2i ------------------------------------------ (i=0,1,2,…,10),试求3
1+25x
次曲线拟合,试画出拟合曲线并打印出方程,与第二章计算实习题2的结果进行比较。
实验目的:通过编程实现牛顿插值方法和函数逼近,加深对多项式插值的理解。
应用所编程序解决实际算例。
实验要求:
1 .认真分析问题,深刻理解相关理论知识并能熟练应用;
2. 编写相关程序并进行实验;
3. 调试程序,得到最终结果;
4. 分析解释实验结果;
5. 按照要求完成实验报告。
实验原理:
详见《数值分析第5版》第二章、第三章相关内容。
实验内容:
(1)问题1 :
这里我们可以沿用实验报告一的代码,对其进行少量修改即可。
当n=10时,代码为:
clear all
clc
k=0:10;
n=len gth(k);
x1=cos((2*k+1)/2/n*pi);
y1=1./(1+25.*x1.A2);
f=y1(:);
for j=2: n
for i=n :-1:j
f(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1));
end
end
syms 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);
end syms P P=sum(p);
P10=vpa(expa nd(P),5); xO=-1:O.OO1:1; yO=subs(P,x,xO);
y2=subs(1/(1+25*x A 2),x,x0); plot(x0,y0,x0,y2) grid on xlabel('x') ylabel('y')
由 此 我 们 可 以 得 到
P i0(x)=-46.633*xA10+3.0962e-14*xA9+130.11*xA8-7.2714e-14*xA7-133.44*xA6+7.1777e- 14*xA5+61.443*xA4-1.5805e-14*xA3-12.477*xA2-1.6214e-16*x+1.0
并可以得到牛顿插值多项式在 [-1 , 1]上的图形,并和原函数进行对比,得
Fig. 1。
2537.3*xA6+306.63*xA4-21.762*xA2+1.0
并可以得到牛顿插值多项式在 [-1,1]上的图形,并和原函数进行对比,得 Fig. 2。
Fig.1牛顿插值多项式(n=10)函数和原函数图形
当n=20,将上述代码中的 “=0:10;"改为“=0:20;"即可。
由
此
我
们
可
以
得
到
Ro(x)=6466.6*xA20+8.0207e-13*xA19-34208.0*xA18-3.5038e-12*xA17+77754.0*xA16-993
00.0*xA14+3.7253e-9*xA13+78236.0*xA12-39333.0*xA10+12636.0*xA8-4.6566e-10*xA7-
y
0.9
Fig.2牛顿插值多项式(n=20 )函数和原函数图形
回顾一下实验一的结果(见Fig. 3),我们不难发现,仅仅是改变了x的取值,结果发生
了很大的变化。
实验一中,插值多项式与原函数产生了很大的偏差,并且随着分的段数的增加,其误差不断变大,但是在本次实验中,我们不难发现,虽然多项式依旧存在震荡现象,但是误差小了很多,而且随着分的段数的增加,插值多项式曲线与原函数曲线已经十分接近了。
Fig.3实验一结果
这个例子说明:采用切比雪夫节点替代等距节点可以消除龙格现象。
(2)问题2 :
分析问题,发现在这个问题中,我们已经知道了原函数,同时它也告诉我们所需取的11个点的值,所以这里可以用两种方法进行函数逼近得到拟合曲线。
首先采用最小二乘法来考虑这个问题,编写代码如下(这里没有直接调用polyfit函数): clear all
clc
n=3;
x1=-1:0.2:1;
y1=1./(1+25.*x1.A2);
syms S G d a x;
for i=1: n+1;
for j=1: n+1;
G(i,j)=sum(x1.A(i+j-2));
end
end
for i=1: n+1;
d(i)=sum(x1.A(i-1).*y1);
end
a=G A-1*d';
for i=1: n+1
X(i)=xA(i-1);
end
S=vpa(X*a,5)
x0=-1:0.001:1;
yO=subs(S,x,xO);
y2=subs(1/(1+25*xA2),x,xO);
plot(x0,y0,x0,y2)
grid on
xlabel('x')
ylabel('y')
我们可以得到一个三次多项式:S=1.1665e-16*xA3 - 0.57518*乂人2 - 9.4553e-17*x + 0.48412。
同时我们也可以得到它与原函数的图形,如图Fig. 4。
x+0.78461
S=20.466*xA8-3.8972e-12*xA7-43.601*xA6+6.9014e-12*xA5+30.817*xA4-3.4363e-1
2*xA3-8.5318*xA2+4.2796e-13*x+0.88802
So=-220.94*xA10-5.1978e-9*xA9+494.91*xA8+1.0649e-8*xA7-381.43*xA6-6.9693e-
9*xA5+123.36*xA4+1.6139e-9*xA3-16.855*xA2-9.6021e-11*x+1.0
So=-318.82*xA20+74.132*xA19+43.205*xA18-83.871*xA17+91.867*xA16+68.562*xA1
5+29.364*xA14-56.393*xA13+260.42*xA12-32.957*xA11+79.822*xA10+1.8279*xA9-139.8
5*xA8+49.564*xA7-121.95*xA6-23.918*xA5+90.922*xA4+3.1437*xA3-15.933*xA2-0.09065
3*x+1.0
Fig.5最小二乘法n=4的结果
Fig.4最小二乘法n=3的结果
我们发现得到的结果和原函数产生了巨大的误差。
首先观察得到的多项式,我们发现它的3次项系数非常小,原因是原函数是一个偶函数,这将导致奇次项系数基本为0。
这里我们调整n,对结果进行观察,取n=4,6,8,10,20。
我们可以得到Fig.5-Fig.9。
S^=1.4852*x A4+1.3703e-16*x A3-2.0604*x A2-1.1769e-16*x+0.65522
S^=-4.633*x A6+4.0789e-14*x A5+8.4769*x A4-5.28e-14*x A3-4.5969*x A2+1.3229e-14*
1
x
Fig.6最小二乘法n=6的结果
x
Fig.7最小二乘法n=8的结果
x
Fig.8最小二乘法n=10的结果
y
Fig.9最小二乘法n=20的结果
不难发现,拟合结果并不理想,当n=8时与原函数较为接近,而当n取其他值时,都有着比较大的误差,说明采用最小二乘法考虑这个问题并不是一个十分好的方法,对屮进行适当变形可能可以得到更好的结果。
同时,由于知道f (x),这道题我们也可以采用最佳平方逼近的方法,编写代码如下: clear all clc
syms S H a d x;
n=3;
for i=1: n+1
d(i)=i nt(x A(i-1)/(1+25*x A2),x,-1,1);
end
for i=1: n+1
for j=1: n+1
H(i,j)=i nt(xA(i+j-2),x,-1,1);
end end
a=H A-i*d';
for i=1: n+1
X(i)=xA(i-l);
end
S=vpa(X*a,5)
x0=-1:0.001:1;
yO=subs(S,x,xO);
y2=subs(1/(1+25*xA2),x,x0);
plot(x0,y0,x0,y2)
grid on
xlabel('x')
ylabel('y')
由此我们可以得到一个三次多项式,(事实上这是一个二次多项式)
S=0.50923-0.70366*xA2 ,同时我们也可以得到该多项式与原函数的图像,见
y
Fig.10最佳平方逼近n=3的结果
不然发现采用这种方法有着和最小二乘法相同的问题,同样我们这里也对n取不同的值
进行观察,取n=4,6,8,10,20。
我们可以得到Fig.11-Fig.15。
S^=1.8689*x A4-2.3055*x A2+0.66942
Ss=-4.9969*x A6+8.6828*x A4-4.5768*x A2+0.77758
S=13.392*xA8-29.995*xA6+23.105*xA4-7.199*xA2+0.85042
S0=-35.931*xA10+98.491*xA8-100.08*xA6+46.465*xA4-9.8945*xA2+0.89942
S0=5023.5*xA20-26343.0*xA18+59469.0*xA16-75642.0*xA14+59603.0*xA12-30157.0
*xA10+9844.2*xA8-2038.8*xA6+259.82*xA4-19.945*xA2+0.9862
Fig.
10。
Fig.11最佳平方逼近n=4的结果
y
y
x
Fig.13最佳平方逼近n=8的结果
y
Fig.14最佳平方逼近n=10的结果
0.9
x
Fig.15最佳平方逼近n=20的结果
显然,当知道原函数的情况下,当n取较大值时,多项式结果可以很好的逼近原函数。
实验感想:
通过本次实验,我对插值函数和函数逼近有了更加清晰的认识。