web-dev-qa-db-ja.com

MATLABで2D配列の補間を実行する方法

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
6
MaxPY

通常のグリッド上のデータの場合は、 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
4
shoelzer

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))

pic

補間オブジェクトはいつでも評価できることに注意してください。

>> F(3.14,3.41)
ans =
     0.036288

上記の例では、ベクトル化された呼び出しを使用して、グリッドのすべてのポイントで補間します

6
Amro

_interp2_関数を見たことがありますか?

MatLabのドキュメントから:

ZI = interp2(X,Y,Z,XI,YI)は、ZIおよびXIの要素に対応し、行列YIX、およびYで指定された2次元関数内の補間によって決定される要素を含む行列Zを返します。 XYは単調で、meshgridによって生成された場合と同じ形式(「格子縞」)である必要があります。行列XおよびYは、データZが指定されるポイントを指定します。範囲外の値はNaNsとして返されます。

0
anandr

次のようにspline()コマンドを使用します。

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

ans =

    0.4454
0
ja72