内容发布更新时间 : 2025/1/13 4:52:24星期一 下面是文章的全部内容请认真阅读。
数值分析第二次程序作业
数值分析第二次程序题——插值法
1.对Runge函数R(x)?并对结果进行分析。
(1) 以xi?-1?ih,h?0.1,0?i?20为节点,Newton插值
1在区间[-1,1]作下列插值逼近,并和R(x)的图像进行比较,21?25x
图1 [-0.7,0.7]上的Newton插值图2 [-1,1]上的Newton插值
由上图可以看出,在区间[-0.7,0.7]上,插值多项式可以比较好地逼近被插值函数。而当区间改为[-1,1]时,边界附近插值多项式与被插值函数的差别很大。即出现了Runge现象。由于边界接近60的误差,图像中间部分的变化几乎不可见。
主要原因是被插值函数的任意阶导数不能达到一致有界。其插值余项
f(n?1)(?)R(?n?1(x)不趋近零。插值多项式不能收敛到被插值函数。 nx)?(n?1)!牛顿差值函数 function f=niudun(z,N,n) f=N(1,1); x=-1:0.1:1; for k=2:n a=1; for r=1:(k-1)
a=a*(z-x(r)); end
f=f+N(k,k)*a; end 主程序
x=-1:0.1:1; n=length(x); for i=1:n
y(i)=1/(1+25*x(i)*x(i)); end N=zeros(n,n); N(:,1)=y'; for j=2:n for k=j:n
N(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1)); end
end for t=1:n c(t)=N(t,t); end z=-1:0.001:1; m=size(z,2); for i=1:m
Runge(i)=1/(1+25*z(i)*z(i)); f(i)=niudun(z(i),N,n); end
plot(z,Runge,'k',z,f,'r')
1
数值分析第二次程序作业
(2)以xi?cos(2i?1?)(,i?0,1,2,???,20)为节点,Lagrange插值 42
图3 以Chebyshev多项式零点为插值点图4 以等距节点为插值点
如图所示,使用Chebyshev多项式零点构造的Lagrange插值多项式比较接近原函数,没有出现Runge现象,图4为第一小问中的等距节点插值,可以明显的看出以Chebyshev
(多项式零点为插值点的优势。主要原因是其多项式误差为f(x)-Lnx)?在区间内一致收敛。
Lagrange函数
function lag=lagrange(z,x,y) for i=1:21 l(i)=1; for j=1:21 if j~=i
l(i)=l(i)*(z-x(j))/(x(i)-x(j)); end end end l=l'; lag=y*l;
主程序 for i=1:21
x(22-i)=cos((2*i-1)*pi/42); end for i=1:21
y(i)=1/(1+25*x(i)*x(i)); end z=-1:0.001:1; m=length(z); for i=1:m
f(i)=1/(1+25*z(i)*z(i)); lag(i)=lagrange(z(i),x,y); end
plot(z,f,'k',z,lag,'r')
1f(n?1)n2(n?1)!?,
(3)以xi?-1?ih,h?0.1,0?i?20为节点,分段线性插值
如下图所示,分段线性插值多项式比较接近原函数,没有出现Runge现象。但是可以明显地看到在区间[-0.1,0.1]中,线性插值的拟合度较低,因为这一部分的函数的曲率较大,
h2(maxf??可知这一部分的误差较大。也就是二阶导数较大。由误差估计公式Rnx)?82
数值分析第二次程序作业
图5线性插值
(4)以xi?-1?ih,h?0.1,0?i?20为节点,三次自然样条插值
图6 三次自然样条插值函数图像
由上图可以看出,三次样条插值函数的曲线及其光滑,图中并没有将插值函数连起来,否则基本无法分辨出原函数和插值函数的图像,说明得到的函数十分接近被插值函数。另外,题目要求自然样条插值,也就是再两端的二阶导数为0,需在变成过程中加以注意。x=-1:0.1:1; for i=1:n-2 n=length(x); u(i)=h(i)/(h(i+1)+h(i)); for i=1:n r(i)=1-u(i); y(i)=1/(1+25*x(i)*x(i)); end end G=zeros(n-2,n-2); for i=1:n-1 for i=1:n-2 h(i)=x(i+1)-x(i); G(i,i)=2; end end
3