(完整版)Matlab学习系列13.数据插值与拟合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13. 数据插值与拟合
实际中,通常需要处理实验或测量得到的离散数据(点)。插值与拟合方法就是要通过离散数据去确定一个近似函数(曲线或曲面),使其与已知数据有较高的拟合精度。
1.如果要求近似函数经过所已知的所有数据点,此时称为插值问
题(不需要函数表达式)。
2.如果不要求近似函数经过所有数据点,而是要求它能较好地反
映数据变化规律,称为数据拟合(必须有函数表达式)。
插值与拟合都是根据实际中一组已知数据来构造一个能够反映数据变化规律的近似函数。区别是:【插值】不一定得到近似函数的表达形式,仅通过插值方法找到未知点对应的值。【拟合】要求得到一个具体的近似函数的表达式。
因此,当数据量不够,但已知已有数据可信,需要补充数据,此时用【插值】。当数据基本够用,需要寻找因果变量之间的数量关系(推断出表达式),进而对未知的情形作预测,此时用【拟合】。
一、数据插值
根据选用不同类型的插值函数,逼近的效果就不同,一般有:(1)拉格朗日插值(lagrange插值)
(2)分段线性插值
(3)Hermite
(4)三次样条插值
Matlab 插值函数实现:
(1)interp1( ) 一维插值
(2)intep2( ) 二维插值
(3)interp3( ) 三维插值
(4)intern( ) n维插值
1.一维插值(自变量是1维数据)
语法:yi = interp1(x0, y0, xi, ‘method’)
其中,x0, y0为原离散数据(x0为自变量,y0为因变量);xi为需要插值的节点,method为插值方法。
注:(1)要求x0是单调的,xi不超过x0的范围;
(2)插值方法有‘nearest’——最邻近插值;‘linear’——线性插值;‘spline’——三次样条插值;‘cubic’——三次插值;
默认为分段线性插值。
例1 从1点12点的11小时内,每隔1小时测量一次温度,测得的温度的数值依次为:5,8,9,15,25,29,31,30,22,25,27,24.试估计每隔1/10小时的温度值。
代码:
hours=1:12;
temps=[5 8 9 15 25 29 31 30 22 25 27 24]; h=1:0.1:12;
t=interp1(hours,temps,h,'spline');
plot(hours,temps,'+',h,t,hours,temps,'r:') % 作图,原散点数据用+标记
xlabel('Hour'),ylabel('Degrees Celsius')
运行结果:
5
10
15
20
25
30
35
Hour
D e g r e e s C e l s i u s
2.二维插值(自变量是2维数据)
语法:zi = interp2(x0, y0, z0, xi, yi, ‘method’)
其中,x0, y0, z0为原离散数据(x0, y0为自变量,z0为因变量);xi, yi为需要插值的节点,method为插值方法。
注:(1)要求x0, y0是单调的,xi, yi不超过x0, y0的范围,注意:要求xi取为行向量,yi取列向量;
(2)插值方法有‘nearest’——最邻近插值;‘linear’——双线性插值;‘cubic’——双三次插值;默认为双线性插值。
例2山区地貌:在某山区测得一些地点的高度如下表:
(平面区域为:1200<=x<=4000, 1200<=y<=3600)
试作出该山区的地貌图和等高线图。
代码:
x0=1200:400:4000;
y0=1200:400:3600;
height=[1130 1250 1280 1230 1040 900 500 700;
1320 1450 1420 1400 1300 700 900 850;
1390 1500 1500 1400 900 1100 1060 950;
1500 1200 1100 1350 1450 1200 1150 1010;
1500 1200 1100 1550 1600 1550 1380 1070;
1500 1550 1600 1550 1600 1600 1600 1550;
1480 1500 1550 1510 1430 1300 1200 980];
mesh(x0,y0,height)
title('原数据散点图');
pause % 等待,按任意键切换到新图形
xi=1200:5:4000;
yi=1200:5:3600;
zi=interp2(x0,y0,height,xi',yi,'cubic');
mesh(xi,yi,zi)
title('cubic 插值图');
运行结果:
另外,二维插值函数还有griddata函数,格式类似
cz = griddata(x0, y0, z0, cx, cy, ‘method’)
插值方法有‘nearest’——最邻近插值;‘linear’——双线性插值;‘cubic’——双三次插值;‘v4’——Matlab提供的插值方法;默认为双线性插值。
与interp2区别是,interp2的插值数据必须是矩形域,即已知数据点(x,y)组成规则的矩阵(或称之为栅格),可使用meshgid生成。而griddata函数的已知数据点(X,Y)不要求规则排列,特别是对试验中随机没有规律采取的数据进行插值具有很好的效果。
例3在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,在矩形区域(75,200)×(-50,150)里的哪些地方船要避免进入.