利用MATLAB分析数值积分中的龙格(Runge)现象(1)(2012-12-1010:44:21)原文地址:利用MATLAB分析数值积分中的龙格(Runge)现象(1)作者:月之幽境实验目的:观察Lagrange插值及数值积分中的龙格(Runge)现象。了解数值不稳定现象。实验题目:(1)对于函数f(x)=1/(1+x^2),-4=x=4进行Lagrange插值。取不同结点数n,在区间[-4,4]上取等距间隔的结点为插值点,把f(x)和插值多项式的曲线画在同一张图上进行比较。(2)利用复化矩形或梯形公式计算f(x)=1/(1+x^2),-4=x=4在定义区间上的数值积分值,说明Runge现象。(先完成题目(1),题目(2)下次续上。)在同一目录下编制一下的函数:f.m,langrange.m,runge1.m。下面贴出每个文件的内容清单。f.m:functionf=f(x)f=1./(1+x.^2);endlangrange.m:functionlangrange=langrange(x,n)langrange=0;xx=linspace(-4,4,n+1);fori=1:n+1lix=1;forj=1:n+1ifj~=ilix=lix.*((x-xx(j))./(xx(i)-xx(j)));endendlangrange=f(xx(i)).*lix+langrange;endendrunge1.m:functionrunge1(n)%n为Langrange差值节点的个数x=linspace(-4,4,100);plot(x,f(x),x,langrange(x,n));end工作目录为上面的文件所在目录,在命令窗口输出一下的命令:subplot(4,4,1),runge1(1),title('1个节点');subplot(4,4,2),runge1(2),title('2个节点');subplot(4,4,3),runge1(3),title('3个节点');subplot(4,4,4),runge1(4),title('4个节点');subplot(4,4,5),runge1(5),title('5个节点');subplot(4,4,6),runge1(6),title('6个节点');subplot(4,4,7),runge1(7),title('7个节点');subplot(4,4,8),runge1(8),title('8个节点');subplot(4,4,9),runge1(9),title('9个节点');subplot(4,4,10),runge1(10),title('10个节点');subplot(4,4,11),runge1(11),title('11个节点');subplot(4,4,12),runge1(12),title('12个节点');subplot(4,4,13),runge1(13),title('13个节点');subplot(4,4,14),runge1(14),title('14个节点');subplot(4,4,15),runge1(15),title('15个节点');subplot(4,4,16),runge1(16),title('16个节点')运行结果:分析结果:16幅分别为差值节点从1到16个的原函数的图像与Langrange差值多项式的图像。看图可知,当节点数较小时,逼近效果并不好,随着节点数的增多,逼近效果似乎越来越好。但是当节点数再增多时,在接近区间两边附近误差越来越大,逼近效果越来越差,这就是龙格现象。1.实验目的:观察拉格朗日插值的龙格(Runge)现象.。2.实验内容:对于函数211)(x进行拉格朗日插值,取不同的节点数n,在区间[-5,5]上取等距间隔的节点为插值点,把f(x)和插值多项式的曲线画在同一张图上进行比较。具体步骤如下:1)、编写拉格朗日插值函数(并将其存到当前路径的M文件中)functiony=lagrange(x0,y0,x)n=length(x0);m=length(x);fori=1:mz=x(i);L=0.0;forj=1:nT=1.0;fork=1:nifk~=jT=T*(z-x0(k))/(x0(j)-x0(k));endendL=T*y0(j)+L;endy(i)=L;end2)、取不同的n值(注:当n值不同时,间距间隔10/n也在发生改变,程序中只需改变x0=-5:10/n:5中的n值)。现取n分别等于4,6,8,10时,程序分别如下(1)取n=4,x0=-5:10/4:5;y0=1./(1+x0.^2);x=-5:0.1:5;y=lagrange(x0,y0,x);y1=1./(1+x.^2);plot(x,y1,'-k')绘制原函数图象holdonplot(x,y,'-.r')(2)取n=6,x0=-5:10/6:5;y0=1./(1+x0.^2);x=-5:0.1:5;y=lagrange(x0,y0,x);y1=1./(1+x.^2);plot(x,y1,'-k')holdonplot(x,y,'--h')(3)取n=8,x0=-5:10/8:5;y0=1./(1+x0.^2);x=-5:0.1:5;y=lagrange(x0,y0,x);y1=1./(1+x.^2);plot(x,y1,'-k')holdonplot(x,y,'--g')(4)取n=10,x0=-5:1:5;y0=1./(1+x0.^2);x=-5:0.1:5;y=lagrange(x0,y0,x);y1=1./(1+x.^2);plot(x,y1,'-k')holdonplot(x,y,'--m')(5)依次输入上述程序,将f(x)和取不同节点数的插值多项式的曲线画在同一张图上进行比较。