数值分析分段线性插值样条插值Runge函数Newton-Lagrange-Chebyshev插值多项式Runge现象matlab源程序代码
- 格式:docx
- 大小:571.52 KB
- 文档页数:21
题目1:对Runge 函数R(x ) =1在区间[-1,1]作下列插值逼近,并和1 + 25x 2R(x)的图像进行比较,并对结果进行分析。
= -1 + ih,h= 0.1,0 ≤ i≤ 20 绘出它的20 次Newton 插值(1)用等距节点xi多项式的图像。
分别画出在[-1,1]区间,[-0.7,0.7]区间和[-0.5,0.5]区间上的 Newton 插值多项式和Runge 函数的图像从图中可以看出: 1)在[-0.5,0.5]区间 Newton 插值多项式和 Runge 函数的图像偏差较小,这说 明 Newton 插值多项式在此区间上可以较好的逼近 Runge 函数; 2)在边界(自变量 x=-1 和 x=1)附近,Newton 插值多项式和 Runge 函数的图像 偏差很大,Newton 插值多项式出现了剧烈的震荡。
(Runge 现象) (2)用节点 x = cos(2i + 1π)(, i = 0,1,2,⋅ ⋅ ⋅ ,20),绘出它的 20 次 Lagrangei 42 插值多项式的图像。
画出在[-1,1]区间上的 Lagrange 插值多项式和 Runge 函数的图像从图中可以看出:使用 Chebyshev 多项式零点构造的 Lagrange 插值多项式和 Runge 函数的图 像偏差较小,没有出现 Runge 现象。
(3)用等距节点 x i 的图像。
= -1 + ih ,h = 0.1,0 ≤ i ≤ 20 绘出它的分段线性插值函数画出在[-1,1]区间上分段线性插值函数和 Runge 函数的图像从图中可以看出:使用分段线性插值函数和 Runge 函数的图像偏差较小,也没有出现 Runge 现象,只在自变量 x=0 处有稍许偏差。
(4)用等距节点 x i 函数的图像。
= -1 + ih ,h = 0.1,0 ≤ i ≤ 20 绘出它的三次自然样条插值画出在[-1,1]区间上三次自然样条插值函数和 Runge 函数的图像从图中可以看出:使用三次自然样条插值函数和 Runge 函数的图像偏差较小,也没有出现 Runge 现象。
题目2:对函数:在区间[-1,1]作下列插值逼近,并和被插值函数的图像进行比较,并对结果进行分析。
= -1 + ih,h= 0.1,0 ≤ i≤ 20 绘出它的20 次Newton 插值多(1)用等距节点xi项式的图像。
分别画出在[-1,1]区间,[-0.8,0.8]区间和[-0.6,0.6]区间上的 Newton 插值多项式和Runge 函数的图像从图中可以看出:Newton 插值多项式和 Runge 函数的图像在[-1,1]区间上整体偏差都比较 大,尤其是在边界(自变量 x=-1 和 x=1)附近,Newton 插值多项式出现了剧烈 的震荡。
(Runge 现象) (2)用节点 x = cos(2i + 1π)(, i = 0,1,2,⋅ ⋅ ⋅ ,20),绘出它的 20 次 Lagrange 插 i 42 值多项式的图像。
画出在[-1,1]区间上的 Lagrange 插值多项式和 Runge 函数的图像从图中可以看出:1)使用 Chebyshev 多项式零点构造的 Lagrange 插值多项式和 Runge 函数的 图像偏差较小,没有出现 Runge 现象。
2)使用 Chebyshev 多项式零点构造的 Lagrange 插值多项式相比使用等距节 点构造的 Newton 插值多项式要好得多,但在自变量 x=0 附近,Lagrange 插值多 项式有稍许偏差。
(3)用等距节点 x i 数的图像。
= -1 + ih ,h = 0.1,0 ≤ i ≤ 20 绘出它的分段线性插值函画出在[-1,1]区间上分段线性插值函数和 Runge 函数的图像从图中可以看出:使用分段线性插值函数和 Runge 函数的图像偏差较小,也没有出现 Runge 现象,只在自变量 x=0 附近处有稍许偏差。
(4)用等距节点 x i 函数的图像。
= -1 + ih ,h = 0.1,0 ≤ i ≤ 20 绘出它的三次自然样条插值画出在[-1,1]区间上三次自然样条插值函数和 Runge 函数的图像从图中可以看出:使用三次自然样条插值函数和 Runge 函数的图像偏差较小,也没有出现 Runge 现象,只在自变量 x=0 附近有稍许偏差。
分析与小结:1)使用等距节点的高次插值多项式会出现 Runge 现象,插值函数和被插值函数的偏差较大,精度不高。
2)使用Chebyshev 多项式零点作为插值节点构造的Lagrange 插值多项式,将会消除Runge 现象,可以提高精度。
3)使用分段线性插值函数可以有效的提高精度,但是插值函数不够光滑,只能保证连续性。
4)使用三次自然样条插值函数具有较高的精度,同时插值函数也有一定的光滑性,至少是C2 的。
5)对于被插值函数有间断的情况,插值函数在间断点附近仍有稍许偏差,例如题目2 中的被插值函数在自变量x=0 处有间断。
Matlab的源程序代码:题目1:Lagrange.m%Lagrange插值多项式for i=1:21x(i)=cos((2*(i-1)+1)*pi/42);endn=length(x);for i=1:ny(i)=1/(1+25*x(i)*x(i));end%构造插值基函数syms z;temp=1;for i=1:nlx=1;for j=1:nif i~=jtemp=(z-x(j))/(x(i)-x(j));lx=lx*temp;endendl(i)=lx;end%插值多项式L=0;for i=1:nL=L+l(i)*y(i);end% l=l';% L=y*l;%画出在[-1,1]区间Lagrange插值多项式和Runge函数的图像a=[-1:0.01:1];n=length(a);for i=1:nb(i)=1/(1+25*a(i)*a(i));endfx=subs(L,z,a);plot(a,b,'k',a,fx,'x r');legend('Runge函数','Lagrange插值多项式');xlabel('自变量x');ylabel('函数值f(x)');title('在[-1,1]区间Lagrange插值多项式和Runge函数的图像对比'); Natura_Spline.m%三次自然样条插值函数x=[-1:0.1:1];n=length(x);syms z;for i=1:ny(i)=1/(1+25*x(i)*x(i));endfor i=1:n-1h(i)=x(i+1)-x(i);endfor i=1:n-2u(i)=h(i)/(h(i+1)+h(i));r(i)=1-u(i);endG=zeros(n,n);for i=1:nG(i,i)=2;endfor i=2:n-1G(i,i-1)=u(i-1);G(i,i+1)=r(i-1);endG(n-1,n)=0;G(2,1)=0;G(1,1)=1;G(n,n)=1;d=zeros(1,n);d(i)=6*((y(i+1)-y(i))/h(i)-(y(i)-y(i-1))/h(i-1))/(h(i)+h(i-1)); endsyms u v;u=diff(1/(1+25*v*v),v);a=subs(u,v,x(1));b=subs(u,v,x(n));d(1)=0;d(n)=0;d=d';M=inv(G)*d;for i=1:n-1s(i)=M(i)*(x(i+1)-z)^3/0.6+M(i+1)*(z-x(i))^3/0.6+(y(i)-M(i)*0.01/6)*(x(i+1)-z)/0.1+(y(i+1)-M(i+1)*0.01/6)*(z-x(i))/0.1;end%画出在[-1,1]区间三次自然样条插值函数和Runge函数的图像for i=1:n-1a=[x(i):0.01:x(i+1)];f=subs(s(i),z,a);plot(a,f,'x r')hold onenda=[-1:0.01:1];n=length(a);for i=1:nb(i)=1/(1+25*a(i)*a(i));endplot(a,b,'k');legend('三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','Runge函数'); xlabel('自变量x');ylabel('函数值f(x)');title('在[-1,1]区间三次自然样条插值函数和Runge函数的图像对比'); Newton1.m%Newton插值多项式x=[-1:0.1:1];n=length(x);syms zy(i)=1/(1+25*x(i)*x(i));endN=zeros(n,n);N(:,1)=y';for j=2:nfor k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1));endendfor t=1:nc(t)=N(t,t);endf=N(1,1);for k=2:na=1;for r=1:(k-1)a=a*(z-x(r));endf=f+N(k,k)*a;end%画出在[-1,1]区间Newton插值多项式和Runge函数的图像a=[-1:0.01:1];n=length(a);for i=1:nb(i)=1/(1+25*a(i)*a(i));endfx1=subs(f,z,a);plot(a,b,'k',a,fx1,'r');legend('Runge函数','Newton插值多项式');xlabel('自变量x');ylabel('函数值f(x)');title('在[-1,1]区间Newton插值多项式和Runge函数的图像对比'); Newton2.m%Newton插值多项式x=[-1:0.1:1];n=length(x);syms zfor i=1:ny(i)=1/(1+25*x(i)*x(i));endN=zeros(n,n);N(:,1)=y';for j=2:nfor k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1));endendfor t=1:nc(t)=N(t,t);endf=N(1,1);for k=2:na=1;for r=1:(k-1)a=a*(z-x(r));endf=f+N(k,k)*a;end%画出在[-0.7,0.7]区间Newton插值多项式和Runge函数的图像c=[-0.7:0.01:0.7];n=length(c);for i=1:nd(i)=1/(1+25*c(i)*c(i));endfx2=subs(f,z,c);plot(c,d,'k',c,fx2,'r');legend('Runge函数','Newton插值多项式');xlabel('自变量x');ylabel('函数值f(x)');title('在[-0.7,0.7]区间Newton插值多项式和Runge函数的图像对比'); Newton3.m%Newton插值多项式x=[-1:0.1:1];n=length(x);syms zfor i=1:ny(i)=1/(1+25*x(i)*x(i));endN=zeros(n,n);N(:,1)=y';for j=2:nfor k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1));endendf=N(1,1);for k=2:na=1;for r=1:(k-1)a=a*(z-x(r));endf=f+N(k,k)*a;end%画出在[-0.5,0.5]区间Newton插值多项式和Runge函数的图像p=[-0.5:0.01:0.5];n=length(p);for i=1:nq(i)=1/(1+25*p(i)*p(i));endfx3=subs(f,z,p);plot(p,q,'k',p,fx3,'r');legend('Runge函数','Newton插值多项式');xlabel('自变量x');ylabel('函数值f(x)');title('在[-0.5,0.5]区间Newton插值多项式和Runge函数的图像对比'); Piecewise_linear.m%分段线性插值函数x=[-1:0.1:1];n=length(x);syms zfor i=1:ny(i)=1/(1+25*x(i)*x(i));end%构造分段线性插值多项式for i=1:n-1l(i)=(z-x(i+1))/(x(i)-x(i+1))*y(i)+(z-x(i))/(x(i+1)-x(i))*y(i+1); end%画出在[-1,1]区间分段线性插值函数和Runge函数的图像for i=1:n-1a=[x(i):0.01:x(i+1)];f=subs(l(i),z,a);plot(a,f,'x r')hold onenda=[-1:0.01:1];endplot(a,b,'k');legend('分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','Runge函数');xlabel('自变量x');ylabel('函数值f(x)');title('在[-1,1]区间分段线性插值函数和Runge函数的图像对比');题目2:Lagrange.m%Lagrange插值多项式for i=1:21x(i)=cos((2*(i-1)+1)*pi/42);endn=length(x);y=zeros(1,n);for i=1:nif x(i)<0y(i)=sin(pi*x(i));elseif x(i)>0.5y(i)=0;elsey(i)=cos(pi*x(i));endend%插值基函数syms z;temp=1;for i=1:nlx=1;for j=1:nif i~=jtemp=(z-x(j))/(x(i)-x(j));lx=lx*temp;endendl(i)=lx;endfor i=1:nL=L+l(i)*y(i);end% l=l';% L=y*l;%画出在[-1,1]区间Lagrange插值多项式和Runge函数的图像x1=[-1:0.01:1];n=length(x1);y1=zeros(1,n);for i=1:nif x1(i)<0y1(i)=sin(pi*x1(i));elseif x1(i)>0.5y1(i)=0;elsey1(i)=cos(pi*x1(i));endendplot(x1,y1,'k');hold on;a=[-1:0.01:1];fx=subs(L,z,a);plot(a,fx,'x r');legend('Runge函数','Lagrange插值多项式');xlabel('自变量x');ylabel('函数值f(x)');title('在[-1,1]区间Lagrange插值多项式和Runge函数的图像对比'); Natura_Spline.m%三次自然样条插值函数x=[-1:0.1:1];n=length(x);syms z;y=zeros(1,n);for i=1:nif x(i)<0y(i)=sin(pi*x(i));elseif x(i)>0.5y(i)=0;elsefor i=1:n-1h(i)=x(i+1)-x(i);endfor i=1:n-2u(i)=h(i)/(h(i+1)+h(i));r(i)=1-u(i);endG=zeros(n,n);for i=1:nG(i,i)=2;endfor i=2:n-1G(i,i-1)=u(i-1);G(i,i+1)=r(i-1);endG(n-1,n)=0;G(2,1)=0;G(1,1)=1;G(n,n)=1;d=zeros(1,n);for i=2:n-1d(i)=6*((y(i+1)-y(i))/h(i)-(y(i)-y(i-1))/h(i-1))/(h(i)+h(i-1)); endsyms u v;u=diff(1/(1+25*v*v),v);a=subs(u,v,x(1));b=subs(u,v,x(n));d(1)=0;d(n)=0;d=d';M=inv(G)*d;for i=1:n-1s(i)=M(i)*(x(i+1)-z)^3/0.6+M(i+1)*(z-x(i))^3/0.6+(y(i)-M(i)*0.01/6)*(x(i+1)-z)/0.1+(y(i+1)-M(i+1)*0.01/6)*(z-x(i))/0.1; end%画出在[-1,1]区间三次自然样条插值函数和Runge函数的图像for i=1:n-1a=[x(i):0.01:x(i+1)];f=subs(s(i),z,a);plot(a,f,'x r')hold onendfor i=1:nif x1(i)<0y1(i)=sin(pi*x1(i));elseif x1(i)>0.5y1(i)=0;elsey1(i)=cos(pi*x1(i));endendplot(x1,y1,'k');legend('三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','三次自然样条插值函数','Runge函数'); xlabel('自变量x');ylabel('函数值f(x)');title('在[-1,1]区间三次自然样条插值函数和Runge函数的图像对比'); Newton1.m%Newton插值多项式x=[-1:0.1:1];n=length(x);syms z;y=zeros(1,n);for i=1:nif x(i)<0y(i)=sin(pi*x(i));elseif x(i)>0.5y(i)=0;elsey(i)=cos(pi*x(i));endendN=zeros(n,n);N(:,1)=y';for j=2:nfor k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1));c(t)=N(t,t);endf=N(1,1);for k=2:na=1;for r=1:(k-1)a=a*(z-x(r));endf=f+N(k,k)*a;end%画出在[-1,1]区间Newton插值多项式和Runge函数的图像x1=[-1:0.01:1];n=length(x1);y1=zeros(1,n);for i=1:nif x1(i)<0y1(i)=sin(pi*x1(i));elseif x1(i)>0.5y1(i)=0;elsey1(i)=cos(pi*x1(i));endendplot(x1,y1,'k');hold on;a=[-1:0.01:1];fx=subs(f,z,a);plot(a,fx,'r');legend('Runge函数','Newton插值多项式');xlabel('自变量x');ylabel('函数值f(x)');title('在[-1,1]区间Newton插值多项式和Runge函数的图像对比');Newton2.m%Newton插值多项式x=[-1:0.1:1];n=length(x);syms z;y=zeros(1,n);elseif x(i)>0.5y(i)=0;elsey(i)=cos(pi*x(i));endendN=zeros(n,n);N(:,1)=y';for j=2:nfor k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1)); endendfor t=1:nc(t)=N(t,t);endf=N(1,1);for k=2:na=1;for r=1:(k-1)a=a*(z-x(r));endf=f+N(k,k)*a;end%画出在[-0.8,0.8]区间Newton插值多项式和Runge函数的图像x1=[-1:0.01:1];n=length(x1);y1=zeros(1,n);for i=1:nif x1(i)<0y1(i)=sin(pi*x1(i));elseif x1(i)>0.5y1(i)=0;elsey1(i)=cos(pi*x1(i));endendplot(x1,y1,'k');hold on;a=[-0.8:0.01:0.8];fx=subs(f,z,a);plot(a,fx,'r');ylabel('函数值f(x)');title('在[-0.8,0.8]区间Newton插值多项式和Runge函数的图像对比');Newton3.m%Newton插值多项式x=[-1:0.1:1];n=length(x);syms z;y=zeros(1,n);for i=1:nif x(i)<0y(i)=sin(pi*x(i));elseif x(i)>0.5y(i)=0;elsey(i)=cos(pi*x(i));endendN=zeros(n,n);N(:,1)=y';for j=2:nfor k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1));endendfor t=1:nc(t)=N(t,t);endf=N(1,1);for k=2:na=1;for r=1:(k-1)a=a*(z-x(r));endf=f+N(k,k)*a;end%画出在[-0.6,0.6]区间Newton插值多项式和Runge函数的图像x1=[-1:0.01:1];n=length(x1);y1(i)=sin(pi*x1(i));elseif x1(i)>0.5y1(i)=0;elsey1(i)=cos(pi*x1(i));endendplot(x1,y1,'k');hold on;a=[-0.6:0.01:0.6];fx=subs(f,z,a);plot(a,fx,'r');legend('Runge函数','Newton插值多项式');xlabel('自变量x');ylabel('函数值f(x)');title('在[-0.6,0.6]区间Newton插值多项式和Runge函数的图像对比'); Piecewise_linear.m%分段线性插值函数x=[-1:0.1:1];n=length(x);y=zeros(1,n);for i=1:nif x(i)<0y(i)=sin(pi*x(i));elseif x(i)>0.5y(i)=0;elsey(i)=cos(pi*x(i));endend%构造插值多项式for i=1:n-1l(i)=(z-x(i+1))/(x(i)-x(i+1))*y(i)+(z-x(i))/(x(i+1)-x(i))*y(i+1); end%作图f=subs(l(i),z,a);plot(a,f,'x r')hold onendx1=[-1:0.01:1];n=length(x1);y1=zeros(1,n);for i=1:nif x1(i)<0y1(i)=sin(pi*x1(i));elseif x1(i)>0.5y1(i)=0;elsey1(i)=cos(pi*x1(i));endendplot(x1,y1,'k');legend('分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','分段线性插值函数','Runge函数');xlabel('自变量x');ylabel('函数值f(x)');title('在[-1,1]区间分段线性插值函数和Runge函数的图像对比');。