matlab插值与曲线拟合.docx

上传人:b****1 文档编号:10397131 上传时间:2023-05-25 格式:DOCX 页数:9 大小:18.21KB
下载 相关 举报
matlab插值与曲线拟合.docx_第1页
第1页 / 共9页
matlab插值与曲线拟合.docx_第2页
第2页 / 共9页
matlab插值与曲线拟合.docx_第3页
第3页 / 共9页
matlab插值与曲线拟合.docx_第4页
第4页 / 共9页
matlab插值与曲线拟合.docx_第5页
第5页 / 共9页
matlab插值与曲线拟合.docx_第6页
第6页 / 共9页
matlab插值与曲线拟合.docx_第7页
第7页 / 共9页
matlab插值与曲线拟合.docx_第8页
第8页 / 共9页
matlab插值与曲线拟合.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

matlab插值与曲线拟合.docx

《matlab插值与曲线拟合.docx》由会员分享,可在线阅读,更多相关《matlab插值与曲线拟合.docx(9页珍藏版)》请在冰点文库上搜索。

matlab插值与曲线拟合.docx

matlab插值与曲线拟合

matlab插值与曲线拟合

(2010-05-0121:

49:

55)

在生产和科学实验中,自变量与因变量间的函数关系有时不能写出解析表达式,而只能得到函数在若干点的函数值或导数值,或者表达式过于复杂而需要较大的计算量。

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

为了完成这样的任务,需要构造一个比较简单的函数,使函数在观测点的值等于已知的值,或使函数在该点的导数值等于已知的值,寻找这样的函数有很多方法。

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

(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

来源:

(-matlab插值与曲线拟合_Emily_新浪博客

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.已知二元函数在点集上的值为,其中,左上角位置表示,右下角位置表示,求该数据集的插值曲面。

3.已知x=[1.2,1.8,2.1,2.4,2.6,3.0,3.3],y=[4.85,5.2,5.6,6.2,6.5,7.0,7.5],求对x,y分别进行4,5,6阶多项式拟合的系数,并画出相应的图形。

4.学习函数interp3(X,Y,Z,V,X1,Y1,Z1,method),对MATLAB提供的flow数据实现三维插值。

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2