1. 程式人生 > >線性內插interp1函式用法

線性內插interp1函式用法

線性內插是假設在二個已知資料中的變化為線性關係,因此可由已知二點的座標(a, b)去計算通過這二點的 斜線,公式如下:

其中 a<b<c 在上式的 b 點即是代表要內插的點,f(b)則是要計算的內插函式值。下圖即是一個以二種內插 法的比較

\pcxfile[12cm,5cm]{fig9_1.pcx}

\caption{線性式與 spline 函式的曲線契合}

線性內插是最簡單的內插方法,但其適用範圍很小;如果原來資料的函式f有極大的變化,假設其資料點之 間為線性變化並不合理。所以我們可以用二次、三次方程式或是另一種稱為spline函式來近似原來資料的函 數。MATLAB的一維內插函式是interp1

,其語法為interp1(x,y,xi),interp1(x,y,xi,'method');其中的x,y是原已知的 資料的x,y值,而xi則是要內插的資料點,另外method可以設定內插方法有 linear,cubic,spline,分別是一次、三 次方程式和spline函式,其中預設方法是linear。如果資料的變化較大,以 spline函式內插所形成的曲線最平滑 ,所以效果最好。而三次方程式所得到的內插曲線平滑度,則介於線性與spline函式之間。

我們以下面的例子說明。假設有一個汽車引擎在定轉速下,溫度與時間(單位為sec)的三次量測值如下

time
temp1
temp2
temp3
0
0
0
0
1
20
110
176
2
60
180
220
3
68
240
349
4
77
310
450
5
110
405
503

其中溫度的資料從 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

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