数值分析牛顿插值多项式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析第二次程序作业
PB09001057 孙琪
【问题】
对函数 f (x )=1
1+x 2 ,x ∈[−5,5] 构造牛顿插值多项式p L (x),插值点取为: 1. x i =5−
10N
i , i =0,1,…,N
2. x i =−5cos (2i+1
2N+2π) ,i =0,1,…,N 并计算如下误差:
max i
{|f (y i )−p (y i )| ,y i =i
10−5 ,i =0,1,…,100} 对N=5,10,20,40比较以上两组节点的结果。
【牛顿插值法】
通过递推和求解方程组,可以得到牛顿插值公式为如下形式:
p (x )=∑c k q k (x )=∑f[x 0,…,x k ]∏(x −x j )k−1
j=0
n
k=0
n
k=0
其中系数为差分,满足公式 f [x 0,…,x k ]=
f [x 1,…,x k ]−f[x 0,…,x k−1]
x k −x 0
因此只需对所给出的插值点求出其相应的差分,代入原方程就可求出牛顿插值方程。
【牛顿插值法算法描述】
1.对给定函数选取其区间上的一系列节点并计算其函数值,得到点列(x0,
y0),…,( x n , y n);
2.通过所给出的节点,求得相应的差分;
3.代入公式求出牛顿插值多项式,并由题目中的要求求得其最大误差。
【实验】
通过Mathematica编写程序得到如下结果:
N=5:
1.取x i=5−10
i , i=0,1,…,N得到:
N
(1)插值点为:
(2)由上述插值点构造出牛顿插值函数:
(3)由题目所给出的条件计算误差得到:
插值函数与原函数的图像为:
其中蓝色为原函数图像,红色为插值函数图像,可以看出在0点误差最大,与我们的计算结果相吻合。
2.取x i=−5cos(2i+1
π) ,i=0,1,…,N得到:
2N+2
(1)插值点为:
(2)由上述插值点构造出牛顿插值函数:由于该函数太长了,在此就不写出了。
(3)由题目所给出的条件计算误差得到:
插值函数与原函数的图像为:
其中蓝色为原函数图像,红色为插值函数图像,可以看出在0点误差最大,与我们的计算结果相吻合。
【结果】
同样的,我们可以得到该题目的结果:
N=5
(1)第一类插值点所得插值函数与原函数图像:
(2)第二类插值点所得插值函数与原函数图像:
N=10
(1)第一类插值点所得插值函数与原函数图像:
(2)第二类插值点所得插值函数与原函数图像:
(1)第一类插值点所得插值函数与原函数图像:
(2)第二类插值点所得插值函数与原函数图像:
(1) 第一类插值点所得插值函数与原函数图像:
(2) 第二类插值点所得插值函数与原函数图像:
【结论】
可以看出,用牛顿插值法得到的结果与Lagrange插值法得到的结果基本一致,故我们同样可以得到结论:
(1)第一类插值点确实在点数变多后在中间区域插值函数越来越逼近原函数,而在区间端点附近则变的波动越来越大,从而最大误差变的越来越大,
这说明我们所取的插值点在端点处逼近的不好。
(2)反观第二类插值点,虽然在点数较少时没有第一类插值点逼近的最大误差小,然而在点数增加后,插值函数与原函数几乎重合了,此时的最大
误差已经很小了,说明这类点在整个区间逼近原函数达到了很好的效果。
综上所述,同样的插值方法会由于不同的插值点的选取而产生很大的不同,因
此想要较好的逼近一个函数,不仅与插值方法有关(事实上多项式的插值方法
是唯一的,因此多项式插值这个不是重点),而且与插值点的选取有很大的关系。
【Mathematica程序】
Clear[f1,f2]
f1[x_]:=1/(1+x^2);
f2[x_]:=-5Cos[(2*x+1)*Pi/42];
M=20;
For[j=1,j≤M,j++,For[i=M,i≥j,i--,f1[f2[i]]=(f1[f2[i]]-
f1[f2[i-1]])/(f2[i]-f2[i-j])]];
fx=f1[f2[0]];
For[i=1,i≤M,i++,hx=1;For[j=1,j≤i,j++,hx=hx*(x-f2[j-1])];fx=fx+f1[f2[i]]*hx];
Print[fx];
Show[Plot[fx,{x,-5,5},PlotStyle→Red],Plot[1/(1+x^2),{x,-5,5},PlotStyle→Blue],PlotRange→All]
f1[x_]:=1/(1+x^2);
f3[x_]:=fx;
Table[Abs[f3[i/10-5]-f1[i/10-5]],{i,1,100}];
Print["Max Error of grid (1):",N[Max[%],12]]
其余的将M值及f2[x_]修改即可,得到插值函数修改分f3[x_]即可。