官术网_书友最值得收藏!

4.2 數據插值

在工程測量與科學實驗中,通常得到的數據都是離散的。如果要得到這些離散數據點以外的其他數據值,就需要根據這些已知數據進行插值。假設測量得到n個點數據,(x1,y1),(x2y2),…,(xnyn),滿足某一個未知的函數關系y=fx),數據插值的任務就是根據已知的n個數據,構造一個函數y=px),使得yi=pxi)(i=1,2,…,n)成立,就稱px)為fx)關于點x1,x2,…,xn的插值函數。求插值函數px)的方法為插值法。插值函數px)一般可以用線性函數、多項式或樣條函數實現。

根據插值函數的自變量的個數,數據插值可以分為一維插值、二維插值和多維插值等;根據插值函數的不同,可以分為線性插值、多項式插值和樣條函數插值等。MATLAB提供了一維插值interp1、二維插值interp2、三維插值interp3和N維插值interpn函數,以及三次樣條插值spline函數等。

4.2.1 一維插值

所謂一維插值是指被插值函數的自變量是一個單變量的函數。一維插值采用的方法一般有一維多項式插值、一維快速插值和三次樣條插值。

1.一維多項式插值

MATLAB中提供了interp1函數進行一維多項式插值。interp1函數使用了多項式函數,通過已知數據點計算目標插值點的數據。interp1函數的調用格式如下:

其中,Y是在默認自變量x選為1:n的值。

其中,X和Y是長度一樣的已知向量數據,xi可以是一個標量,也可以是向量。

其中,method是插值方法,其取值有下面幾種:

(1)linear線性插值:這是默認插值方法,它是把與插值點靠近的兩個數據點以直線連接,在直線上選取對應插值點的數據。這種插值方法兼顧速度和誤差,插值函數具有連續性,但平滑性不好。

(2)nearest最鄰近點插值:根據插值點和最接近已知數據點進行插值,這種插值方法速度快,占用內存小,但一般誤差最大,插值結果最不平滑。

(3)next下一點插值:根據插值點和下一點的已知數據點插值,這種插值方法的優缺點和最鄰近點插值一樣。

(4)previous前一點插值:根據插值點和前一點的已知數據點插值,這種插值方法的優缺點和最鄰近點插值一樣。

(5)spline三次樣條插值:采用三次樣條函數獲得插值點數據,要求在各點處具有光滑條件。這種插值方法連續性好,插值結果最光滑,缺點為運行時間長。

(6)cubic三次多項式插值:根據已知數據求出一個三次多項式進行插值。這種插值方法連續性好,光滑性較好,缺點是占用內存多,速度較慢。

需要注意,xi的取值如果超出已知數據X的范圍,就會返回NaN錯誤信息。

MATLAB還提供interp1q函數用于一維插值。它與interp1函數的主要區別是,當已知數據不是等間距分布時,interp1q插值速度比interp1快。需要注意,interp1q執行的插值數據x必須是單調遞增的。

【例4-9】 某氣象臺對當地氣溫進行測量,實測數據如表4-1所示,用不同的插值方法計算t=12時的氣溫。

表4-1 某地不同時間的氣溫

程序代碼如下:

程序運行結果:

【例4-10】 假設測量的數據來自函數fx)=e﹣0.5xsinx,試根據生成的數據,用不同的方法進行插值,比較插值結果。

程序代碼如下:

程序運行結果如下,插值效果如圖4-2所示。

圖4-2 各種插值結果比較

由上面的結果可知,interp1q實現插值的速度比interp1要快;最接近點擬合誤差大,直線擬合得到曲線不平滑;采用三次樣條插值效果最好,曲線平滑,誤差很小,基本逼近真實值。

2.一維快速傅里葉插值

在MATLAB中,一維快速傅里葉插值可以用interpft函數實現。該函數利用傅里葉變換將輸入數據變換到頻率域,然后用更多點實現傅里葉逆變換,實現對數據的插值。函數調用格式為

【例4-11】 假設測量的數據來自函數fx)=sinx,試根據生成的數據,用一維快速傅里葉插值,比較插值結果。

程序代碼如下:

程序運行結果如下,插值效果如圖4-3所示。

圖4-3 一維快速傅里葉插值及比較

由上述結果可知,一維快速傅里葉插值interpft實現插值的速度比較快,曲線平滑,誤差很小,基本逼近真實值。

3.三次樣條插值

三次樣條插值利用多段多項式逼近插值,降低了插值多項式的階數,使得曲線更為光滑。在MATLAB中,interp1插值函數的method選為spline樣條插值選項,就可以實現三次樣條插值。另外,MATLAB專門提供了三次樣條插值函數spline,其格式如下:

【例4-12】 已知數據x=[﹣5﹣4﹣3﹣2﹣1 0 1 2 3 4 5],y=[26 16 9 4 1 0 1 4 9 16 25],對xi=﹣5:0.5:5,用spline進行三次樣條插值,并比較用interp1實現三次樣條插值的結果。

程序代碼如下:

程序運行結果如下,插值效果如圖4-4所示。

圖4-4 三次樣條插值及比較

由程序結果可知,三次樣條插值spline函數實現插值的效果和interp1(x,y,xi,'spline')一樣。

4.2.2 二維插值

二維插值是指已知一個二元函數的若干個采用數據點x、y和z(x,y),求插值點(x1,y2)處的z1的值。在MATLAB中,提供了interp2函數用于實現二維插值,其調用格式為

其中,X和Y是兩個參數的采樣點,一般是向量,Z是參數采樣點對應的函數值。X1和Y1是插值點,可以是標量也可以是向量。Z1是根據選定的插值方法(method)得到的插值結果。插值方法method和一維插值函數相同,linear為線性插值(默認算法),nearest為最近點插值,spline為三次樣條插值,cubic為三次多項式插值。需要注意,X1和Y1不能超出X和Y的取值范圍,否則會得到NaN錯誤信息。

【例4-13】 某實驗對計算機主板的溫度分布做測試。用x表示主板的寬度(cm),y表示主板的深度(cm),用T表示測得的各點溫度(℃),測量結果如表4-2所示。

表4-2 主板各點溫度測量值

(1)分別用最近點二維插值和線性二維插值法求(12.6,7.2)點的溫度。

(2)用三次多項式插值求主板寬度每1cm、深度每1cm處各點的溫度,并用圖形顯示插值前后主板的溫度分布圖。

程序代碼如下:

運行程序,結果如下,圖4-5是插值前后主板溫度分布圖。由圖4-5可知,用插值技術處理數據,可以使得溫度分布圖更加光滑。

圖4-5 插值前后主板溫度分布圖

4.2.3 多維插值

1.三維插值

在MATLAB中,還提供了三維插值的函數interp3,其調用格式為

其中,X、Y、Z是三個參數的采樣點,一般是向量,U是參數采樣點對應的函數值。X1、Y1、Z1是插值點,可以是標量也可以是向量。U1是根據選定的插值方法(method)得到的插值結果。插值方法method和一維插值函數相同,linear為線性插值(默認算法),nearest為最近點插值,spline為三次樣條插值,cubic為三次多項式插值。需要注意,X1、Y1和Z1不能超出X、Y和Z的取值范圍,否則會得到NaN錯誤信息。

2.n維插值

在MATLAB中,還可以實現更高維的插值,interpn函數用于實現n維插值。其調用格式為

其中,X1,X2,…,Xn是n個參數的采用點,一般是向量,U是參數采樣點對應的函數值。Y1,Y2,…,Yn是插值點,可以是標量也可以是向量。U1是根據選定的插值方法(method)得到的插值結果。插值方法method和一維插值函數相同,linear為線性插值(默認算法),nearest為最近點插值,spline為三次樣條插值,cubic為三次多項式插值。需要注意,Y1,Y2,…,Yn不能超出X1,X2,…,Xn的取值范圍,否則會得到NaN錯誤信息。

主站蜘蛛池模板: 电白县| 宜黄县| 西昌市| 昭通市| 大埔区| 广河县| 科尔| 五常市| 常宁市| 开平市| 遵义市| 纳雍县| 蒲江县| 东台市| 万载县| 磐安县| 乌兰浩特市| 桐庐县| 休宁县| 古交市| 天门市| 长汀县| 田阳县| 高淳县| 广安市| 额尔古纳市| 天柱县| 渝北区| 香河县| 筠连县| 天台县| 遵义县| 阿图什市| 台前县| 贺兰县| 嵊泗县| 廉江市| 崇明县| 冷水江市| 厦门市| 仁布县|