- MATLAB/Simulink權威指南:開發環境、程序設計、系統仿真與案例實戰
- 徐國保 張冰 石麗梅 吳凡
- 2649字
- 2019-12-20 20:33:33
4.2 數據插值
在工程測量與科學實驗中,通常得到的數據都是離散的。如果要得到這些離散數據點以外的其他數據值,就需要根據這些已知數據進行插值。假設測量得到n個點數據,(x1,y1),(x2,y2),…,(xn,yn),滿足某一個未知的函數關系y=f(x),數據插值的任務就是根據已知的n個數據,構造一個函數y=p(x),使得yi=p(xi)(i=1,2,…,n)成立,就稱p(x)為f(x)關于點x1,x2,…,xn的插值函數。求插值函數p(x)的方法為插值法。插值函數p(x)一般可以用線性函數、多項式或樣條函數實現。
根據插值函數的自變量的個數,數據插值可以分為一維插值、二維插值和多維插值等;根據插值函數的不同,可以分為線性插值、多項式插值和樣條函數插值等。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】 假設測量的數據來自函數f(x)=e﹣0.5xsinx,試根據生成的數據,用不同的方法進行插值,比較插值結果。
程序代碼如下:

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


圖4-2 各種插值結果比較
由上面的結果可知,interp1q實現插值的速度比interp1要快;最接近點擬合誤差大,直線擬合得到曲線不平滑;采用三次樣條插值效果最好,曲線平滑,誤差很小,基本逼近真實值。
2.一維快速傅里葉插值
在MATLAB中,一維快速傅里葉插值可以用interpft函數實現。該函數利用傅里葉變換將輸入數據變換到頻率域,然后用更多點實現傅里葉逆變換,實現對數據的插值。函數調用格式為

【例4-11】 假設測量的數據來自函數f(x)=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錯誤信息。
- Mastering Mesos
- Mastering Spark for Data Science
- 網絡服務器架設(Windows Server+Linux Server)
- 網上沖浪
- 機器自動化控制器原理與應用
- 工業機器人工程應用虛擬仿真教程:MotoSim EG-VRC
- 網絡綜合布線技術
- 永磁同步電動機變頻調速系統及其控制(第2版)
- Hybrid Cloud for Architects
- 大數據驅動的機械裝備智能運維理論及應用
- 深度學習與目標檢測
- C++程序設計基礎(上)
- Photoshop CS5圖像處理入門、進階與提高
- Mastering Exploratory Analysis with pandas
- INSTANT Adobe Story Starter