龙格现象的matlab实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用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)

和取不同节点数的插值多项式的曲线画在同一

张图上进行比较。

相关文档
最新文档