实验四 插值算法的Matlab实现 【作业内容与要求】:对函数
进行插值。
在区间[-1, 1]上求出f(x)的10次Lagrange插值多项式$L_{10}(x)$,并且绘制图像;
在区间[-1, 1]上求出f(x)的10次一致逼近插值多项式$P_{10}(x)$,并且绘制图像;
将区间[-1, 1]10等分,进行分段线性插值,求出表达式,并且绘制图像。
将区间[-1, 1]10等分,进行三次样条插值(参考例4.5),求出表达式,并且绘制图像。
在区间[-1, 1]上求出f(x)的10次Lagrange插值多项式$L_{10}(x)$,并且绘制图像; matlab代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 clc; x0 = -1 :0.2 :1 ; y0= 1. /(1 +9 *x0.^2 ); x=-1 :0.01 :1 ; m=length (x); yx=zeros (m,1 ); for k=1 :m tx=x(k); n=length (x0); s=0 ; for j =1 :n t=1 ; for i =1 :n if i ~=j t=t*(tx-x0(i ))/(x0(j )-x0(i )); end end s=s+t*y0(j ); end yx(k)=s; end figure ;plot (x,yx,':m' ,'LineWidth' ,2 );hold on;plot (x0,y0,'-r' ,'LineWidth' ,0.5 );grid on; xlabel('x轴' ); ylabel('y轴' ); legend ('插值曲线' ,'原曲线' );
在区间[-1, 1]上求出f(x)的10次一致逼近插值多项式$P_{10}(x)$,并且绘制图像; 与(1)的不同在于先计算切比雪夫多项式 $T_{11}$的零点作为插值节点
matlab代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 format long; k = 1 :1 :11 ; x0 = cos ((2 *k-1 )*pi /22 ); y0 = 1. /(1 +9 *x0.^2 ); x=-1 :0.01 :1 ; m=length (x); yx=zeros (m,1 ); for k=1 :m tx=x(k); n=length (x0); s=0 ; for j =1 :n t=1 ; for i =1 :n if i ~=j t=t*(tx-x0(i ))/(x0(j )-x0(i )); end end s=s+t*y0(j ); end yx(k)=s; end figure ;plot (x,yx,':m' ,'LineWidth' ,2 );hold on;plot (x0,y0,'-r' ,'LineWidth' ,0.5 );grid on; xlabel('x轴' ); ylabel('y轴' ); legend ('插值曲线' ,'原曲线' );format short;
将区间[-1, 1]10等分,进行分段线性插值,求出表达式,并且绘制图像。 matlab代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 clear; clc; x0 = -1 :0.2 :1 ; y0 = 1. /(1 +9 *x0.^2 ); x=-1 :0.01 :1 ; n=length (x0); yx=zeros (length (x),1 ); k=1 ; i = 1 ;for z=-1.0 :0.01 :1 for i =1 :n-1 if (z >= x0(i )) && (z <= x0(i +1 )) yx(k)=(z-x0(i +1 ))/ (x0(i )-x0(i +1 ))*y0(i )+ (z-x0(i ))/ (x0(i +1 )-x0(i ))*y0(i +1 ); break end end k= k+1 ; end figure ;plot (x,yx,':m' ,'LineWidth' ,2 );hold on;xlabel('x轴' ); ylabel('y轴' ); legend ('插值曲线' );
将区间[-1, 1]10等分,进行三次样条插值(参考例4.5),求出表达式,并且绘制图像。 依据例4.5,进行三次样条插值时调用系统函数spline
matlab代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 clear; clc; x0=-1 :0.2 :1 ; y0=1. /(1 +9 *x0.^2 ); x=-1 :0.02 :1 ; y=spline(x0,y0,x); plot (x,y,'r' ); hold on;title('三次样条插值' ); legend ('10等份' );