11.9 外插法
如果要查的資料超高範圍會如何?以前項之身高體重為例:
XI=interp1(M_wt,height,80) XI = NaN
顯然沒有資料,因為它已超出範圍。此時若要有資料可以採用外插法,即在後面之參數加上'extrap',並且要表示外插法所使用之方法,例如'linear'是。
XI=interp1(M_wt,height,80,'linear','extrap') XI = 191.2500
只是一個體重80kg的人,他的標準身高 191.2cm是否合理,那就不是外插法所能管得了的了。
內插法亦可應用於多維資料中。例如:
x = [1:10]'; y = [ x.^2, x.^3, x.^4 ]; xi = [ 1.5, 2.5; 5.5, 8.5], yi = interp1(x,y,xi) xi = 1.5000 2.5000 5.5000 8.5000 yi(:,:,1) = 2.5000 6.5000 30.5000 72.5000 yi(:,:,2) = 4.5000 17.5000 170.5000 620.5000 yi(:,:,3) = 1.0e+003 * 0.0085 0.0485 0.9605 5.3285
由於輸入值為2x2之向量,所得之yi具有三個函數,故會產生大小為2x2x3之對應值。
INTERP2 指令
處理函數如z=f(x,y)這種二維的內插問題時,可以使用interp2指令。其呼叫型式如下:
ZI = INTERP2(X,Y,Z,XI,YI)
指令中,X,Y,Z為對應值,其中X,Y為自變數,Z為對應函數值。進行內插時,必須設定XI,YI值,其後結果ZI置於等號之左邊。在輸入參數後邊,亦可加入前述之'method'項,以獲得不同的內插效果。其預設項仍為'linear',即線性內插。下面的例子為先設定XY方向之方格,建立Z函數;然後以較細的內插點繪出對應點,將其Z座標提高15個單位,以與原函數比較。
[X,Y] = meshgrid(-3:.5:3); Z = peaks(X,Y); [XI,YI] = meshgrid(-3:.25:3); ZI = interp2(X,Y,Z,XI,YI,'spline'); mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15) hold off axis([-3 3 -3 3 -5 20])
在interp2指令之參數中,若Z前面之X、Y兩項省略,如:
ZI = INTERP2(Z,XI,YI)
則表示內部預設 X=1:N,Y=1:M,其中 [M,N]=SIZE(Z)。如此可以省掉一些裝飾的工夫。interp2也可以使用外插法,其設定方式與interp1相同。所有XY之對應必須單一的,其間隔可以不是均勻分割的。
[x,y]=meshgrid(-5:5,-5:.5:5); z=x.^2+y.^2; [xi,yi] = meshgrid(-3:.2:3,-3:.2:3); zi = interp2(x,y,z,xi,yi); mesh(xi,yi,zi+50);hold on; mesh(x,y,z);hold off
2 則留言:
您好! 可否請教interp2外插法的使用範例呢?
感謝您的分享!
sabece-ma Angel Williams https://wakelet.com/wake/7o9lIiFcreSiSUULI1ZdZ
comphackmilkcap
張貼留言