matlab 曲线拟合.docx
《matlab 曲线拟合.docx》由会员分享,可在线阅读,更多相关《matlab 曲线拟合.docx(14页珍藏版)》请在冰豆网上搜索。
matlab曲线拟合
MATLAB插值、拟合与编程[转]
科学计算 2009-04-0708:
28 阅读313 评论1
字号:
大大 中中 小小
相关知识
在生产和科学实验中,自变量与因变量间的函数关系有时不能写出解析表达式,而只能得到函数在若干点的函数值或导数值,或者表达式过于复杂而需要较大的计算量。
当要求知道其它点的函数值时,需要估计函数值在该点的值。
为了完成这样的任务,需要构造一个比较简单的函数,使函数在观测点的值等于已知的值,或使函数在该点的导数值等于已知的值,寻找这样的函数有很多方法。
根据测量数据的类型有以下两类处理观测数据的方法。
(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.5614 0.8287 1.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数据实现三维插值。
多数情况都是用多项式曲线拟合函数polyfit进行拟合,如果是直线的话,n取1。
p=polyfit(x,y,n)
[p,S]=polyfit(x,y,n)
[p,S,mu]=polyfit(x,y,
拟合度或拟合率R^2=(SSy-RSS)/SSy,SSy为目标变数的离均差平方和,RSS为离回归平方和(残差平方和)。
【求助】求助matlab高手,请问如何用matlab拟合曲线
作者:
fn09 发布日期:
2008-09-08
电缆深度 双程时间(um)
大井平台起算 固定基准面(海拔1100m)起算
770 728.66
790 741.26
810 753.85
830 766.45
850 779.04
870 791.64
890 804.23
910 816.83
930 829.42
950 841.93
970.0000293 854.37
990.0000293 866.38
1009.999968 878.30
1030.000029 890.21
1050.000029 902.13
1070.000029 914.04
1090.000029 926.94
1110.000029 940.31
1130.000029 953.69
1150.000029 967.06
1170.000029 980.44
1190.000029 993.82
1210.000029 1007.43
1230.000029 1021.82
1250.000029 1036.22
1270.000029 1050.45
1290.000029 1064.13
1310.000029 1077.70
1330.000029 1090.09
1350.000029 1102.48
1370.000029 1114.87
1390.000029 1128.13
1410.000029 1141.87
1430.000029 1155.61
1450.000029 1169.35
1470.000029 1183.09
1490.000029 1196.34
1510.000029 1209.10
1530.000029 1221.85
1550.000029 1233.90
1570.000029 1245.22
1590.000151 1256.54
1610.000029 1267.86
1630.000029 1279.19
1650.000029 1290.64
1670.000029 1302.13
1689.999907 1313.59
1710.000151 1325.04
1730.000029 1336.49
1750.000029 1347.94
1770.000029 1359.39
1790.000029 1370.84
1810.000151 1382.29
1830.000029 1393.74
1850.000029 1405.19
1870.000029 1416.52
1890.000029 1427.32
1909.999907 1438.12
1930.000151 1448.91
1950.000029 1458.38
1970.000029 1467.41
1990.000029 1475.72
2009.999907 1483.58
2030.000151 1491.43
2050.000029 1499.28
2070.000029 1507.13
2090.000029 1514.99
2110.000029 1523.37
2130.000029 1531.74
2150.000029 1540.11
2170.000029 1548.49
2190.000029 1556.72
2210.000029 1564.61
2230.000029 1572.50
2250.000029 1580.39
2270.000029 1588.72
2290.000029 1597.61
2310.000029 1606.50
2330.000029 1615.40
2350.000029 1624.29
2370.000029 1633.18
2390.000029 1643.02
2410.000029 1654.13
2430.000029 1665.24
2450.000029 1676.36
2470.000029 1687.80
2490.000029 1699.26
2510.000029 1710.72
2530.000029 1722.22
2550.000029 1733.71
2570.000029 1745.20
2590.000029 1756.17
2610.000029 1766.70
2630.000029 1777.23
2650.000029 1787.76
2670.000029 1797.75
2690.000029 1806.22
2710.000029 1814.69
2730.000029 1823.16
2750.000029 1831.62
2770.000029 1840.82
2790.000029 1850.63
2810.000029 1860.45
2830.000029 1870.26
2850.000029 1880.08
2870.000029 1889.89
2890.000029 1900.02
2910.000029 1910.17
2930.000029 1920.31
2950.000029 1930.45
2970.000029 1940.60
2990.000029 1950.74
3010.000029 1960.89
3030.000029 1971.03
3050.000029 1981.17
3070.000029 1988.82
3090.000029 1996.32
3110.000029 2003.82
3130.000029 2011.32
3150.000029 2018.82
3170.000029 2026.32
3190.000029 2033.85
3210.000029 2041.77
3230.000029 2049.68
3250.000029 2057.