插值拟合与MATLAB编程.docx

上传人:b****5 文档编号:2870757 上传时间:2022-11-16 格式:DOCX 页数:10 大小:202.77KB
下载 相关 举报
插值拟合与MATLAB编程.docx_第1页
第1页 / 共10页
插值拟合与MATLAB编程.docx_第2页
第2页 / 共10页
插值拟合与MATLAB编程.docx_第3页
第3页 / 共10页
插值拟合与MATLAB编程.docx_第4页
第4页 / 共10页
插值拟合与MATLAB编程.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

插值拟合与MATLAB编程.docx

《插值拟合与MATLAB编程.docx》由会员分享,可在线阅读,更多相关《插值拟合与MATLAB编程.docx(10页珍藏版)》请在冰豆网上搜索。

插值拟合与MATLAB编程.docx

插值拟合与MATLAB编程

插值、拟合与MATLAB编程

相关知识

在生产和科学实验中,自变量

与因变量

间的函数关系

有时不能写出解析表达式,而只能得到函数在若干点的函数值或导数值,或者表达式过于复杂而需要较大的计算量。

当要求知道其它点的函数值时,需要估计函数值在该点的值。

为了完成这样的任务,需要构造一个比较简单的函数

,使函数在观测点的值等于已知的值,或使函数在该点的导数值等于已知的值,寻找这样的函数

有很多方法。

根据测量数据的类型有以下两类处理观测数据的方法。

(1)测量值是准确的,没有误差,一般用插值。

(2)测量值与真实值有误差,一般用曲线拟合。

在MATLAB中,无论是插值还是拟合,都有相应的函数来处理。

一、插值

1、一维插值:

已知离散点上的数据集

,即已知在点集X=

上的函数值Y=

,构造一个解析函数(其图形为一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维插值。

MATLAB命令:

yi=interp1(X,Y,xi,method)

该命令用指定的算法找出一个一元函数

,然后以

给出

处的值。

xi可以是一个标量,也可以是一个向量,是向量时,必须单调,method可以下列方法之一:

‘nearest’:

最近邻点插值,直接完成计算;

‘spline’:

三次样条函数插值;

‘linear’:

线性插值(缺省方式),直接完成计算;

‘cubic’:

三次函数插值;

对于[min{xi},max{xi}]外的值,MATLAB使用外推的方法计算数值。

例1:

已知某产品从1900年到2010年每隔10年的产量为:

75.995,91.972,105.711,123.203,131.699,150.697,179.323,203.212,226.505,249.633,256.344,267.893,计算出1995年的产量,用三次样条插值的方法,画出每隔一年的插值曲线图形,同时将原始的数据画在同一图上。

解:

程序如下

year=1900:

10:

2010;

product=[75.995,91.972,105.711,123.203,131.699,150.697,179.323,203.212,226.505,249.633,256.344,267.893]

p1995=interp1(year,product,1995)

x=1900:

2010;

y=interp1(year,product,x,'cubic');

plot(year,product,'o',x,y);

计算结果为:

p1995=252.9885。

 

2、二维插值

已知离散点上的数据集

,即已知在点集

上的函数值

,构造一个解析函数(其图形为一曲面)通过这些点,并能够求出这些已知点以外的点的函数值,这一过程称为二维插值。

MATLAB函数:

Zi=interp2(X,Y,Z,Xi,Yi,method)

该命令用指定的算法找出一个二元函数

,然后以

给出

处的值。

返回数据矩阵

,Xi,Yi是向量,且必须单调,

和meshgrid(Xi,Yi)是同类型的。

method可以下列方法之一:

‘nearest’:

最近邻点插值,直接完成计算;

‘spline’:

三次样条函数插值;

‘linear’:

线性插值(缺省方式),直接完成计算;

‘cubic’:

三次函数插值;

例2:

已知1950年到1990年间每隔10年,服务年限从10年到30年每隔10年的劳动报酬表如下:

 表:

某企业工作人员的月平均工资(元)

服务年限

年份

10

20

30

1950

150.697

169.592

187.652

1960

179.323

195.072

250.287

1970

203.212

239.092

322.767

1980

226.505

273.706

426.730

1990

249.633

370.281

598.243

试计算1975年时,15年工龄的工作人员平均工资。

解:

程序如下:

years=1950:

10:

1990;

service=10:

10:

30;

wage=[150.697169.592187.652

179.323195.072250.287

203.212239.092322.767

226.505273.706426.730

249.633370.281598.243];

mesh(service,years,wage)%绘原始数据图

w=interp2(service,years,wage,15,1975);%求点(15,1975)处的值

计算结果为:

235.6288

例3:

设有数据x=1,2,3,4,5,6,y=1,2,3,4,在由x,y构成的网格上,数据为:

12,10,11,11,13,15

16,22,28,35,27,20

18,21,26,32,28,25

20,25,30,33,32,20

求通过这些点的插值曲面。

解:

程序为:

x=1:

6;

y=1:

4;

t=[12,10,11,11,13,15

16,22,28,35,27,20

18,21,26,32,28,25;

20,25,30,33,32,20]

subplot(1,2,1)

mesh(x,y,t)

x1=1:

0.1:

6;

y1=1:

0.1:

4;

[x2,y2]=meshgrid(x1,y1);

t1=interp2(x,y,t,x2,y2,'cubic');

subplot(1,2,2)

mesh(x1,y1,t1);

结果如右图。

作业:

已知某处山区地形选点测量坐标数据为:

x=00.511.522.533.544.55

y=00.511.522.533.544.555.56

海拔高度数据为:

z=8990878592919693908782

9296989995918986848284

9698959290888584838185

8081828995969392898686

8285879899969788858283

8285899495939291868488

8892939495898786838192

9296979896939584828184

8585818280808185909395

8486819899989796958487

8081858283848790958688

8082818485868382818082

8788899899979698949287

1、画出原始数据图;

2、画出加密后的地貌图,并在图中标出原始数据。

 

二、拟合

曲线拟合

已知离散点上的数据集

,即已知在点集

上的函数值

,构造一个解析函数(其图形为一曲线)使

在原离散点

上尽可能接近给定的

值,这一过程称为曲线拟合。

最常用的曲线拟合方法是最小二乘法,该方法是寻找函数

使得

最小。

MATLAB函数:

p=polyfit(x,y,n)

[p,s]=polyfit(x,y,n)

说明:

x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。

x必须是单调的。

矩阵s用于生成预测值的误差估计。

(见下一函数polyval)

多项式曲线求值函数:

polyval()

调用格式:

y=polyval(p,x)

[y,DELTA]=polyval(p,x,s)

说明:

y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。

[y,DELTA]=polyval(p,x,s)使用polyfit函数的选项输出s得出误差估计YDELTA。

它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。

则YDELTA将至少包含50%的预测值。

例5:

求如下给定数据的拟合曲线,x=[0.5,1.0,1.5,2.0,2.5,3.0],

y=[1.75,2.45,3.81,4.80,7.00,8.60]。

解:

MATLAB程序如下:

x=[0.5,1.0,1.5,2.0,2.5,3.0];

y=[1.75,2.45,3.81,4.80,7.00,8.60];

p=polyfit(x,y,2)

x1=0.5:

0.05:

3.0;

y1=polyval(p,x1);

plot(x,y,'*r',x1,y1,'-b')

计算结果为:

p=0.56140.82871.1560

此结果表示拟合函数为:

,用此函数拟合数据的效果如图所示。

例2:

由离散数据

x

0

.1

.2

.3

.4

.5

.6

.7

.8

.9

1

y

.3

.5

1

1.4

1.6

1.9

.6

.4

.8

1.5

2

拟合出多项式。

程序:

x=0:

.1:

1;

y=[.3.511.41.61.9.6.4.81.52]

n=3;

p=polyfit(x,y,n)

xi=linspace(0,1,100);

z=polyval(p,xi);%多项式求值

plot(x,y,’o’,xi,z,’k:

’,x,y,’b’)

legend(‘原始数据’,’3阶曲线’)

结果:

p=

16.7832-25.745910.9802-0.0035

多项式为:

16.7832x3-25.7459x2+10.9802x-0.0035

曲线拟合图形:

也可由函数给出数据。

例3:

x=1:

20,y=x+3*sin(x)

程序:

x=1:

20;

y=x+3*sin(x);

p=polyfit(x,y,6)

xi=linspace(1,20,100);

z=polyval(p,xi);%¶àÏîʽÇóÖµº¯Êý

plot(x,y,'o',xi,z,'k:

',x,y,'b')

结果:

p=

0.0000-0.00210.0505-0.59713.6472-9.729511.3304

再用10阶多项式拟合

程序:

x=1:

20;

y=x+3*sin(x);

p=polyfit(x,y,10)

xi=linspace(1,20,100);

z=polyval(p,xi);

plot(x,y,'o',xi,z,'k:

',x,y,'b')

结果:

p=

Columns1through7

0.0000-0.00000.0004-0.01140.1814-1.806511.2360

Columns8through11

-42.086188.5907-92.815540.267

可用不同阶的多项式来拟合数据,但也不是阶数越高拟合的越好。

作业:

1.已知x=[0.1,0.8,1.3,1.9,2.5,3.1],y=[1.2,1.6,2.7,2.0,1.3,0.5],利用其中的部分数据,分别用线性函数插值,3次函数插值,求x=2.0处的值。

2.已知二元函数

在点集

上的值为

,其中,左

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

当前位置:首页 > 表格模板 > 合同协议

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

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