線性內插interp1函式用法
線性內插是假設在二個已知資料中的變化為線性關係,因此可由已知二點的座標(a, b)去計算通過這二點的 斜線,公式如下:
其中 a<b<c 在上式的 b 點即是代表要內插的點,f(b)則是要計算的內插函式值。下圖即是一個以二種內插 法的比較
\pcxfile[12cm,5cm]{fig9_1.pcx}
\caption{線性式與 spline 函式的曲線契合}
線性內插是最簡單的內插方法,但其適用範圍很小;如果原來資料的函式f有極大的變化,假設其資料點之 間為線性變化並不合理。所以我們可以用二次、三次方程式或是另一種稱為spline函式來近似原來資料的函 數。MATLAB的一維內插函式是interp1
我們以下面的例子說明。假設有一個汽車引擎在定轉速下,溫度與時間(單位為sec)的三次量測值如下
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其中溫度的資料從 20oC變化到 503oC,如果要估計在t=2.6, 4.9 sec 的溫度,可以下列指令計算
>> x=[0 1 2 3 4 5]'; % 鍵入時間
>> y=[0 20 60 68 77 110]'; % 鍵入第一組時間
>> y1=interp1(x,y,2.6) % 要內插的資料點為 2.6
y1 = % 對應 2.6
64.8
>> y1=interp1(x,y,[2.6 4.9]) % 內插資料點為 2.6, 4.9,注意用[ ]將多個內插點放在其中
y1 =
64.8
106.7
>> y1=interp1(x,y,2.6,'cubic') % 以三次方程式對資料點 2.6 作內插
y1 = % 對應 2.6 的函式值為 66.264
66.264
>> y1=interp1(x,y,2.6,'spline') % 以spline函式對資料點 2.6 作內插
y1 = % 對應 2.6 的函式值為 66.368
66.368
以下的例子還配合繪圖功能,用以比較不同內插方法的差異。
>> h=1:12;
>> temp=[5 8 9 15 25 29 31 30 22 25 27 24]; % 這組溫度資料變化較大
>> plot(h,temp,'--',h,temp,'+') % 將線性內插結果繪圖
>> h_3=1:0.1:12 % 要每0.1小時估計一次溫度值
>> t_3=interp1(h,temp,h_3,'cubic') % 以三次方程式做內插
>> t_s=interp1(h,temp,h_3,'spline') % 以spline函式做內插
>> hold on
>> subplot(1,2,1)
>> plot(h,temp,'--',h,temp,'+',h_3,t_3) % 將線性及三次方程式內插繪圖
>> subplot(1,2,2)
>> plot(h,temp,'--',h,temp,'+',h_3,t_s) % 將線性方程式及spline內插繪圖
>> hold off