第二次程序题
2R(x)1/(125x),用在区间[-1,1]下列条件作插值逼近,并和R(x)1.对Runge函数
的图
像进行比较。
(1)用等距节点xi1h,h0.2,绘出它的10次Newton插值多项式的图像。
调用plotnewton.m,得到如下图像:
2i1)(i0,1,...10)22,绘出它的10次Lagrange插值多项式图像
(2)用节点
xicos(
(3)用等距节点xi1h,h0.2,绘出它的分段线性插值函数的图像。
(4)用等距节点xi1h,h0.2,绘出它的三次自然样条插值函数的图像。
由图像可以看出:
① 等距节点的高次Newton插值或者Lagrange插值,在靠近边界附近,误差非常大,出现Runge现象。
②用chebyshev零点作为插值节点,将会消去Runge现象。
③也可以采用分段低次多项式插值,为线性插值时,节点处不光滑。
④采用三次样条插值,可得到更光滑的曲线。
程序:
1.Newton.m
function f=Newton(x)
a=-1:0.2:1
b=1./(1+25*a.^2)
f=b(1);
y1=0;
l=1;
for (i=1:10)
for(j=i+1:11)
y1(j)=(b(j)-b(i))/(a(j)-a(i));
end
c(i)=y1(i+1);
l=l*(x-a(i));
f=f+c(i)*l;
b=y1;
end
plotnewton.m
x=-1:0.01:1;
y=1./(1+25*x.^2);
plot(x,y,'r');
hold on;
xx=-1:0.2:1;
yy=1./(1+25*xx.^2);
plot(xx,yy,'o');
hold on;
fplot('Newton',[-1,1]);
title('Runge函数和其10次Newton插值');
legend('Runge','插值点','Newton插值');
2. Lagfun.m
function f=lagfun(x)
for(i=1:11)
a(i)=cos((2*i-1)*pi/22)
end
b=1./(1+25*a.^2)
for i=1:11
L(i)=1;
for j=1:11
if j~=i
L(i)=L(i)*(x-a(j))/(a(i)-a(j));
end
end
end
f=0;
for i=1:11
f=f+L(i)*b(i);
end
plotlagfun.m
x=-1:0.01:1;
y=1./(1+25*x.^2);
plot(x,y,'r');
hold on;
for(i=1:11)
xx(i)=cos((2*i-1)*pi/22)
end
yy=1./(1+25*xx.^2)
plot(xx,yy,'o');
hold on;
fplot('Lagfun',[-1,1]);
title('Runge函数和其10次Lagrange插值');
legend('Runge','插值点','Lagrange插值');
3. linear.m
function yy=linear(xx)
x=-1:0.2:1;
y=1./(1+25*x.^2);
yy=interp1(x,y,xx,'linear');
plotlinear.m
x=-1:0.01:1;
y=1./(1+25*x.^2);
plot(x,y,'r');
hold on;
xx=-1:0.2:1;
yy=1./(1+25*xx.^2);
plot(xx,yy,'o');
hold on;
fplot('linear',[-1,1]);
title('Runge函数和其分段线性插值');
legend('Runge','插值点','分段线性插值');
4. csape3.m
a=-1:0.01:1;
b=1./(1+25*a.^2);
plot(a,b,'r');
hold on;
x=-1:0.2:1;
y=1./(1+25*x.^2);
pp=csape (x,y,'variational');
xx=-1:0.01:1;
yy=ppval(pp,xx);
plot(x,y,'o',xx,yy,'k');
title('Runge函数和其三次自然样条插值');
legend('Runge','插值节点','三次自然样条插值');
因篇幅问题不能全部显示,请点此查看更多更全内容