函数的数值逼近插值.docx

上传人:b****5 文档编号:7769660 上传时间:2023-01-26 格式:DOCX 页数:17 大小:440.94KB
下载 相关 举报
函数的数值逼近插值.docx_第1页
第1页 / 共17页
函数的数值逼近插值.docx_第2页
第2页 / 共17页
函数的数值逼近插值.docx_第3页
第3页 / 共17页
函数的数值逼近插值.docx_第4页
第4页 / 共17页
函数的数值逼近插值.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

函数的数值逼近插值.docx

《函数的数值逼近插值.docx》由会员分享,可在线阅读,更多相关《函数的数值逼近插值.docx(17页珍藏版)》请在冰豆网上搜索。

函数的数值逼近插值.docx

函数的数值逼近插值

课程名称计算方法

实验项目名称函数的数值逼近-插值

实验成绩指导老师(签名)日期2011-9-16

一.实验目的和要求

1.掌握用Matlab计算Lagrange、分段线性、三次样条三种插值的方法,改变节点的数目,对三种插值结果进行初步分析。

2.通过实例学习如何用插值方法解决实际问题。

二.实验内容和原理

1)编程题2-1要求写出Matlab源程序(m文件),并对每一行语句加上适当的注释语句;

2)分析应用题2-2,2-3,2-4,2-5要求将问题的分析过程、Matlab源程序、运行结果和结果的解释、算法的分析等写在实验报告上。

2-1分析应用题

产生5个节点

用以下五种不同的节点构造Lagrange插值公式来计算

处的插值,与精确值比较并进行分析。

functiony=lagr(x0,y0,x)

n=length(x0);

m=length(x);

L=zeros(1,n);

y=zeros(1,m);

fork=1:

m

s=0;

fori=1:

n

L(i)=1;

forj=1:

n

ifj~=i

L(i)=L(i)*(x(k)-x0(j))/(x0(i)-x0(j));

end

end

s=s+y0(i)*L(i);

end

y(k)=s;

end

1)用

构造;

>>x0=[4,9];

>>y0=[2,3];

>>lagr(x0,y0,5)

ans=

2.2000

2)用

构造;

>>x0=[1,4,9];

>>y0=[1,2,3];

>>lagr(x0,y0,5)

ans=

2.2667

3)用

构造;

>>x0=[1,4,9,16];

>>y0=[1,2,3,4];

>>lagr(x0,y0,5)

ans=

2.2540

4)用

构造;

>>x0=[0,1,9,16];

>>y0=[0,1,3,4];

>>lagr(x0,y0,5)

ans=

2.9524

5)用全部插值节点

构造。

>>x0=[0,1,4,9,16];

>>y0=[0,1,2,3,4];

>>lagr(x0,y0,5)

ans=

2.0794

从结果看出,用

构造时误差最小,而用

构造时并没有更精确,误差还更大,所以不是用的构造点越多越准确。

2-2分析应用题

意大利柑橘的产量变化如下表。

使用3次样条插值来估计1962年、1977年和1992年的产量。

将这些结果与相对应的实际值进行比较,并说明计算的精度。

实际值分别为12380,27403和32059(

kg)。

再利用Lagrange插值多项式重新计算。

年份

1965

1970

1980

1985

1990

1991

产量(

kg)

17769

24001

25961

34336

29036

33417

>>x0=[1965,1970,1980,1985,1990,1991];

>>y0=[17769,24001,25961,34336,29036,33417];

>>y1=spline(x0,y0,1962)

y1=

5.1461e+003

>>y2=spline(x0,y0,1977)

y2=

2.2642e+004

>>y3=spline(x0,y0,1992)

y3=

4.1894e+004

利用Lagrange插值多项式计算:

>>x0=[1965,1970,1980,1985,1990,1991];

>>y0=[17769,24001,25961,34336,29036,33417];

>>y1=lagr(x0,y0,1962)

y1=

-7.7765e+004

>>y2=lagr(x0,y0,1977)

y2=

1.5405e+004

>>y3=lagr(x0,y0,1992)

y3=

4.3127e+004

2-3分析应用题

在区间[-1,1]上,在21个平均分布的节点上对函数

进行估计。

计算Lagrange插值多项式和3次样条,并在给定的区间上将两个函数的曲线与

进行比较。

使用干扰数据

来重复计算。

注意观察,对于小扰动,Lagrange插值多项式与3次样条相比,分析哪个更敏感。

>>x=linspace(-1,1,21);

>>y=sin(2*pi*x)

y=

Columns1through10

0.00000.58780.95110.95110.5878-0.0000-0.5878-0.9511-0.9511-0.5878

Columns11through20

00.58780.95110.95110.58780.0000-0.5878-0.9511-0.9511-0.5878

Column21

-0.0000

>>x0=linspace(-1,1,11);

>>y0=sin(2*pi*x0);

>>y1=lagr(x0,y0,x)

y1=

Columns1through10

0.00000.63290.95110.94330.58780.0024-0.5878-0.9522-0.9511-0.5869

Columns11through20

00.58690.95110.95220.5878-0.0024-0.5878-0.9433-0.9511-0.6329

Column21

-0.0000

>>y2=interp1(x0,y0,x,'spline')

y2=

Columns1through10

0.00000.64940.95110.92410.58780.0048-0.5878-0.9434-0.9511-0.5818

Columns11through20

00.58180.95110.94340.5878-0.0048-0.5878-0.9241-0.9511-0.6494

Column21

-0.0000

可以看出3次样条更敏感。

2-4分析应用题

已知函数表如下:

0.7

0.9

1.1

1.3

1.5

1.7

0.6442

0.7833

0.8912

0.9636

0.9975

0.9917

计算

的近似值。

2-5分析应用题

利用Matlab相关函数分析用下列三种不同的插值逼近著名的Runge函数

1)Lagrange插值;

2)分段线性插值;

3)三次样条插值。

其中取插值节点为区间

上的10等分点,同时列出100等分点上的三种插值结果,比较分析,同时对这三种插值在100等分点上进行作图比较。

>>x=linspace(-1,1,101);

>>y=1./(1+25*x.^2);

>>x0=linspace(-1,1,11);

>>y0=1./(1+25*x0.^2);

>>y1=lagr(x0,y0,x);

>>y2=interp1(x0,y0,x);

>>y3=interp1(x0,y0,x,'spline');

>>plot(x,y,'k',x,y1,'g',x,y2,'b',x,y3,'m')

2-6

分析应用题

运行程序

figure

set(gcf,'menubar','none')

axes('position',[0011])

[x,y]=ginput

然后将你的手直接放在弹出窗口中,用鼠

标点击选取需要的插值点,最后回车得到所有插值点的坐标。

用三次样条插值函数对手的形状进行插值,并作图。

提示:

可用构造“参数曲线”的方法,即在参数区间

上选取

个插值点,然后用三次样条插值构造逼近函数在

个点上的值:

,最后以这

个点

作出图形。

>>m=length(x);

>>s=(1:

m);

>>n=(1:

0.05:

m);

>>u=spline(s,x,n);

>>v=spline(s,y,n);

>>plot(x,y,u,v)

2-7分析应用题

美国的人口普查每10年举行一次,下表列出了从1940年到1990年的人口(按千人计)

1940年

1950年

1960年

1970年

1980年

1990年

人口

(千)

132165

151326

179323

203302

226542

249633

1)选择一种插值求在1930年、1965年和2010年人口的近似值。

>>x=[1940,1950,1960,1970,1980,1990];

>>y=[132165,151326,179323,203302,226542,249633];

>>spline(x,y,1930)

ans=

1.3918e+005

>>spline(x,y,1965)

ans=

1.9178e+005

>>spline(x,y,2010)

ans=

2.9056e+005

2)1930年的人口大约是123203千。

你认为你得到的1965年和2010年的人口数字精确度如何?

精确度不高。

2-8分析应用题

测得平板表面3*5网格点处的温度分别为:

(二维插值应用)

82

81

80

82

84

79

63

61

65

81

84

84

82

85

86

试作出平板表面的温度分布曲面z=f(x,y)的图形,然后对平面进一步光滑化。

>>x=1:

5;

>>y=1:

3;

>>temps=[8281808284;7963616581;8484828586];

>>mesh(x,y,temps);

>>pause

>>xi=1:

0.2:

5;

>>yi=1:

0.2:

3;

>>zi=interp2(x,y,temps,xi',yi,'cubic');

>>figure

(2)

>>mesh(xi,yi,zi)

优化后:

【MATLAB相关函数】

⏹分段线性插值y=interp1(x0,y0,x)

输入值:

个插值节点对应数组

,以及

个待求点对应的数组

输出值:

个待求点对应的数组

⏹三次样条插值y=interp1(x0,y0,x,’spline’)或y=spline(x0,y0,x)

输入值:

个插值节点对应数组

,以及

个待求点对应的数组

输出值:

个待求点对应的数组

三.操作方法与实验步骤(包括实验数据记录和处理)

 

四.实验结果与分析

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1