您的当前位置:首页正文

Runge函数与插值

2022-12-27 来源:客趣旅游网


第二次程序题

2R(x)1/(125x),用在区间[-1,1]下列条件作插值逼近,并和R(x)1.对Runge函数

的图

像进行比较。

(1)用等距节点xi1h,h0.2,绘出它的10次Newton插值多项式的图像。

调用plotnewton.m,得到如下图像:

2i1)(i0,1,...10)22,绘出它的10次Lagrange插值多项式图像

(2)用节点

xicos(

(3)用等距节点xi1h,h0.2,绘出它的分段线性插值函数的图像。

(4)用等距节点xi1h,h0.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','插值节点','三次自然样条插值');

因篇幅问题不能全部显示,请点此查看更多更全内容