利用MATLAB分析数值积分中的龙格(Runge)现象(1)
(2012-12-10 10: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:
function f= f( x ) f=1./(1+x.^2); end
langrange.m:
function langrange= langrange( x,n ) langrange=0;
xx=linspace(-4,4,n+1); for i=1:n+1 lix=1;
for j=1:n+1 if j~=i
lix=lix.*((x-xx(j))./(xx(i)-xx(j))); end end
langrange=f(xx(i)).*lix+langrange;
end end
runge1.m:
function runge1(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 xf??
进行拉格朗日插值,
取不同的节点数n,在区间[-5,5]上取等距间隔的节点为插值点,把f(x)和插值多项式的曲线画在同一张图上进行比较。 具体步骤如下: 1)、编写拉格朗日插值函数(并将其存到当前路径的M文件中) function y=lagrange(x0,y0,x) n=length(x0);m=length(x); for i=1:m
z=x(i); L=0.0; for j=1:n T=1.0; for k=1:n if k~=j T=T*(z-x0(k))/(x0(j)-x0(k)); end end
L=T*y0(j)+L; end y(i)=L; end 2)、取不同的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') 绘制原函数图象 >> hold on >> plot(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') >> hold on >> plot(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') >> hold on >> plot(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') >> hold on >> plot(x,y,'--m') >>
(5)依次输入上述程序,将f(x)
和取不同节点数的插值多项式的曲线画在同一 张图上进行比较。