1. 程式人生 > >matlab中的interp2插值函式

matlab中的interp2插值函式

看了好多文章才大體明白插值的含義,(⊙﹏⊙)b,這理解能力也是醉了.....為了記住這個慘痛教訓,在吃飯前要把看到的文章總結一下~~

interp2
功能 二維資料內插值
格式

(1)ZI = interp2(X,Y,Z,XI,YI)

好多文章裡巴拉巴拉說了一堆,迷迷糊糊的,我還是用我的大白話敘述一下:

X,Y是原始資料,相當於座標,類似於meshgrid的座標範圍,這麼說應該很容易理解......

Z是在上述座標下的數值,也就是在座標[xi  yi]下的zi

XI,YI就是用於插值的座標,

返回值ZI就是用於提取插值之後,對應位置的值

這裡需要注意:

X 與Y必須是單調的

若Xi與Yi中有在X與Y範圍之外的點,則相應地返回nan(Not a Number)


下面是其他形式的解釋,這個我就直接copy啦~~

(2)ZI = interp2(Z,XI,YI)
預設地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一種情形進行計算。

(3)ZI = interp2(Z,n)
作n次遞迴計算,在Z的每兩個元素之間插入它們的二維插值,這樣,Z的階數將不斷增加。

interp2(Z)等價於interp2(z,1)。

(4)ZI = interp2(X,Y,Z,XI,YI,method)
用指定的演算法method 計算二維插值:
’linear’:雙線性插值演算法(預設演算法);
’nearest’:最臨近插值;
’spline’:三次樣條插值;
’cubic’:雙三次插值。

總之,插值是根據已知的去推測未知,X,Y是已知的位置,XI,YI是未知的位置(當然也可以包含已知點,I表示Interp,實際命名已經很清楚了)

下面,是一個copy的例子:

(這裡,為了更清楚的觀測原始資料和插值資料之間的關係,我把它畫出來應該更直觀一些......)

years = 1950:10:1990;
service = 10:10:30;
wage = [ 150.697  199.592  187.625  179.323  195.072; 250.287  203.212  179.092  322.767  226.505;153.706  426.730  249.633  120.281  598.243];
[X, Y] = meshgrid(years, service);
% % 三維曲線
% plot3(X, Y, wage)
% 三維曲面
figure
surf(X, Y, wage)
w = interp2(service,years,wage,15,1975);


插值結果為:

 w = 190.6288

似乎也並不直觀,尷尬......先這樣,有空了繼續調整,QAQ......吃飯去了......