簡體   English   中英

如何在 MATLAB 中對二維數組執行插值

[英]How to perform interpolation on a 2D array in MATLAB

如何創建一個包含 2 個變量的函數並給定一個 2D 數組,它會返回一個內插值?

我有N x M數組A 我需要對它進行插值並以某種方式獲得該表面的函數,以便我可以選擇非整數參數的值。 (我需要將該插值用作 2 個變量的函數)

例如:

A[N,M] //my array
// here is the method I'm looking for. Returns function interpolatedA
interpolatedA(3.14,344.1) //That function returns interpolated value

下面是一個使用scatteredInterpolant的例子:

%# get some 2D matrix, and plot as surface
A = peaks(15);
subplot(121), surf(A)

%# create interpolant
[X,Y] = meshgrid(1:size(A,2), 1:size(A,1));
F = scatteredInterpolant(X(:), Y(:), A(:), 'linear');

%# interpolate over a finer grid
[U,V] = meshgrid(linspace(1,size(A,2),50), linspace(1,size(A,1),50));
subplot(122), surf(U,V, F(U,V))

圖片

請注意,您可以隨時評估插值對象:

>> F(3.14,3.41)
ans =
     0.036288

上面的示例使用矢量化調用在網格的所有點進行插值

對於常規網格上的數據,請使用interp2 如果您的數據分散,請使用griddata 您可以創建一個匿名函數作為這些調用的簡化包裝器。

M = 10;
N = 5;
A = rand(M,N);
interpolatedA = @(y,x) interp2(1:N,1:M,A,x,y);
%interpolatedA = @(y,x) griddata(1:N,1:M,A,x,y); % alternative
interpolatedA(3.3,8.2)

ans =
      0.53955

你見過interp2函數嗎?

從 MatLab 文檔:

ZI = interp2(X,Y,Z,XI,YI)返回矩陣ZI其中包含與XIYI元素對應的元素,並由矩陣XYZ指定的二維函數內的插值確定。 XY必須是單調的,並且具有相同的格式(“格子”),就好像它們是由meshgrid生成的meshgrid 矩陣XY指定給出數據Z的點。 超出范圍的值作為NaN返回。

像這樣使用spline()命令:

% A contains N rows and 2 columns
pp = spline(A(:,1), A(:,2));
ppval(pp,3.44)

ans =

    0.4454

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM