本系列教程來(lái)源于出版設(shè)計(jì)《基于MATLAB編程基礎(chǔ)與典型應(yīng)用書(shū)籍》,如涉及版權(quán)問(wèn)題,請(qǐng)聯(lián)系:156204968@qq.com。 出版社:人民郵電出版社, 頁(yè)數(shù):525。
本系列教程目前基于MATLABR2006a,可能對(duì)于更高級(jí)版本的功能和函數(shù)有差異,教程中如有問(wèn)題,請(qǐng)聯(lián)系:156204968@qq.com
5.2 數(shù)據(jù)插值
插值運(yùn)算是根據(jù)數(shù)據(jù)點(diǎn)的規(guī)律,首先找到一個(gè)多項(xiàng)式連接這些已知的數(shù)據(jù)點(diǎn),然后根據(jù)該多項(xiàng)式計(jì)算出要得到的與已知數(shù)據(jù)點(diǎn)相鄰的點(diǎn)對(duì)應(yīng)的數(shù)值。數(shù)據(jù)的插值運(yùn)算在信號(hào)和圖象處理等領(lǐng)域使用比較廣泛。MATLAB提供了專用的函數(shù)來(lái)處理數(shù)據(jù)的插值問(wèn)題,下面將詳細(xì)的介紹使用這些插值函數(shù)的方法。
5.2.1 一維數(shù)據(jù)插值
一維插值是指對(duì)一個(gè)自變量的插值,實(shí)現(xiàn)一維數(shù)據(jù)插值的函數(shù)是interp1,該函數(shù)的調(diào)用格式為:
Y1=interp1(X,Y,X1,'method')
interp1函數(shù)的功能是根據(jù)X,Y的值,計(jì)算出在X1處的值,并返回給Y1。其中,X和Y是兩個(gè)等長(zhǎng)的已知向量,分別描述采樣點(diǎn)和樣本值;X1是一個(gè)向量或標(biāo)量,描述欲插值的點(diǎn),返回值Y1是與X1等長(zhǎng)的插值結(jié)果;method是插值函數(shù)的類型,允許的取值有“l(fā)inear”(線性插值)、“nearest”(用最接近的相鄰點(diǎn)插值)、“cubic”(三次插值)和“spline”(三次樣條插值),linear為默認(rèn)值。
注意:X1的取值范圍不能超出X的給定范圍,否則,會(huì)給出“NaN”錯(cuò)誤。
除此之外,MATLAB還提供了一個(gè)專門(mén)的用于3次樣條插值的函數(shù)spline,功能與函數(shù)Y1=interp1(X,Y,X1,‘spline’)完全相同,使用方法也類似。該函數(shù)的調(diào)用格式如下:
Y1=spline(X,Y,X1)
【例5.8】一維數(shù)據(jù)插值
在命令窗口輸入以下內(nèi)容,生成用于一維插值運(yùn)算的數(shù)據(jù)h和k。
>> h=0:0.3:5;
>> k=cos(h); %生成插值運(yùn)算數(shù)據(jù)點(diǎn)
下面分別采用不同的插值函數(shù)類型進(jìn)行插值,用戶可以通過(guò)該示例對(duì)比以下插值的計(jì)算結(jié)果。參數(shù)method分別取值‘linear’、‘nearest’、‘cubic’、‘spline’時(shí)的具體操作如下,讀者可自行比較采用不同插值方法的計(jì)算精度:
>> Y1=interp1(h,k,2,'linear') %采用線形函數(shù)插值
>> Y1=interp1(h,k,2,'nearest') %采用最近鄰插值
>> Y1=interp1(h,k,2,'cubic') %采用三次多項(xiàng)式插值
>> Y1=interp1(h,k,2,'spline') %采用三次樣條插值
>> Y1=spline(h,k,2) %三次樣條插值
注意:不同的插值函數(shù)具有不同的計(jì)算特性,適用的場(chǎng)合也不同,用戶使用時(shí)一定要根據(jù)具體的應(yīng)用選用不同的插值函數(shù)。linear最常用,計(jì)算的速度也較快,是插值函數(shù)的缺省設(shè)置;cubic和spline插值效果的平滑性較好,插值的精度比較高,但是計(jì)算的速度也相應(yīng)的減慢;nearst的計(jì)算速度最快,但是精度比較低,平滑性較差。
5.2.2 二維數(shù)據(jù)插值
除前面介紹的一維數(shù)據(jù)的插值,MATLAB還提供用于解決二維插值問(wèn)題的函數(shù)interp2,該函數(shù)的調(diào)用格式為:
Z1=interp2(X,Y,Z,X1,Y1,'method')
其中,X和Y是兩個(gè)向量,分別描述兩個(gè)參數(shù)的采樣點(diǎn),Z是與參數(shù)采樣點(diǎn)對(duì)應(yīng)的函數(shù)值,X1,Y1是兩個(gè)向量或標(biāo)量,描述欲插值的點(diǎn)。返回值Z1是根據(jù)相應(yīng)的插值方法得到的插值結(jié)果。method的取值與一維插值函數(shù)相同。X,Y,Z也可以是矩陣形式。
注意:X1,Y1的取值范圍不能超出X,Y的給定范圍,否則,會(huì)給出“NaN”錯(cuò)誤。
【例5.9】二維數(shù)據(jù)插值
在命令窗口輸入以下內(nèi)容,生成用于二維插值運(yùn)算的數(shù)據(jù)如下所示:
>> x=0:2.5:10
>> h=[0:30:60]'
>> T=[95,14,0,0,0;88,48,32,12,6;67,64,54,48,41]
>> xi=[0:10]
>> hi=[0:20:60]'
使用函數(shù)interp2進(jìn)行插值運(yùn)算,T必須為矩陣形式,即至少是2x2階以上的矩陣。在命令窗口中輸入如下內(nèi)容:
>> TI=interp2(x,h,T,xi,hi) %使用函數(shù)interp2進(jìn)行插值運(yùn)算
注意:Z必須為矩陣形式,即至少是2x2階以上的矩陣。
5.3 曲線擬合
多項(xiàng)式曲線擬合是用一個(gè)多項(xiàng)式來(lái)逼近一組給定的數(shù)據(jù),擬合的準(zhǔn)則是最小二乘法,即找出使的
.
在MATLAB中,用polyfit函數(shù)來(lái)求得最小二乘擬合多項(xiàng)式的系數(shù),計(jì)算得到多項(xiàng)式后可以用polyval函數(shù)計(jì)算所給出點(diǎn)的近似值。polyfit函數(shù)的調(diào)用格式為:
[P,S]=polyfit(X,Y,m)
polyfit函數(shù)根據(jù)采樣點(diǎn)X和采樣點(diǎn)函數(shù)值Y,返回一個(gè)m次多項(xiàng)式P及供polyval使用的結(jié)構(gòu)數(shù)組S,S有三個(gè)域:S.R給出QR分解后滿足Q·R=V的矩陣R,S.df給出相應(yīng)χ2量的自由度,S.normr給出擬合殘數(shù)的2—范數(shù)。其中X,Y是兩個(gè)等長(zhǎng)的向量,P是一個(gè)長(zhǎng)度為m+1的向量,P的元素為多項(xiàng)式系數(shù)。
【例5.10】曲線擬合
在命令窗口輸入以下內(nèi)容,生成用于曲線擬合的數(shù)據(jù)如下所示:
>> A=[1 2 3 4 5 5 3 4 8 5 6 8 7 6 9 2 6 8 2 1 2 7 9 3 9 ] %數(shù)據(jù)點(diǎn)X軸
>> B=[5 3 4 8 5 6 8 7 6 9 2 6 8 2 1 2 7 9 3 9 4 5 6 7 8 ] %數(shù)據(jù)點(diǎn)Y軸
>> x=1:1:10 %擬合數(shù)據(jù)點(diǎn)
①根據(jù)采樣點(diǎn)A和采樣點(diǎn)函數(shù)值B,產(chǎn)生一個(gè)2次多項(xiàng)式P及供polyval使用的結(jié)構(gòu)數(shù)組S。在命令窗口輸入:
>> [P,S]=polyfit(A,B,2) %產(chǎn)生一個(gè)2次多項(xiàng)式P
調(diào)用polyfit函數(shù)得到二次多項(xiàng)式各項(xiàng)系數(shù)如下:
P =
-0.0357 0.4527 4.4691
用ployval函數(shù)計(jì)算擬合多項(xiàng)式在給定點(diǎn)的函數(shù)值。在命令行窗口中輸入以下命令:
>> Y=polyval(P,x) %根據(jù)多項(xiàng)式系數(shù)向量計(jì)算對(duì)應(yīng)點(diǎn)x處的擬合函數(shù)值
即可計(jì)算得到擬合多項(xiàng)式在給定點(diǎn)的函數(shù)值。
注意:曲線擬合時(shí)正確選擇所要擬合的多項(xiàng)式的階是很重要的,并不是擬合多項(xiàng)式的階越高精度越好,為了保證擬合的精度,一般擬合多項(xiàng)式的階不超過(guò)5階。
作者:德特?cái)?shù)據(jù)
聯(lián)系方式:156204968@qq.com