1

2 つの 3D 配列があります。

 A=[
12751   4616    15915
15864   4622    15667
12877   4683    21050
15816   4668    21253
11374   5006    18495
16995   5466    18493
11638   4880    20023
17078   4938    20006
11576   4886    17011
];

 B=[
12402   2138    15743
10285   3175    15851
10237   3084    21052
12130   2129    21299
8074    3802    18505
14515   1623    18497
8415    3713    19856
14462   1120    20061
8340    3711    17145
14483   1157    16990];

そして、Matlab を使用して、それらの間でスプラインまたは 3D 補間を行いたいと考えています。Interp3どのように定義すればよいVですVI = interp3(X,Y,Z,V,XI,YI,ZI)か?

またはYyy = spline(x,Y,xx)

4

1 に答える 1

0

私はあなたのデータを完全に理解していませんB、の機能Aですか(またはその逆)?また、これらの配列は3Dではなく1Dのように見えます。これを明確にできますか?

関数呼び出しで

yy = spline(x, Y, xx)

Yは補間している従属変数です:はのY関数であり、上記の関数呼び出しの結果はatxの値を返します。一次元の例として、試してみてくださいYxx

x = linspace(0., 2.*pi, 100);
Y = sin(x);

% What is the value of Y (or sin(x)) at pi/2?
xx = pi/2.;
yy = spline(x, Y, xx); % This should result in yy = 1.000

この関数の使用例の詳細と例については、splineドキュメントを確認してください。

現在、この関数は1Dフィッティング専用であり、(おそらく)と同等yy = interp1(x, Y, xx, 'spline')です。3次元ルックアップを実行する場合は、を使用する必要があります。interp3これにより、上記の例が3Dに一般化されます。したがって、1つの独立した座標ではなく、ルックアップを実行するポイントに対してxさらに2つの、、、yおよび3つの座標があります: 、、。補間する関数は、座標の3D関数である必要があります。例として、試してみてください。zxxyyzz(x, y, z)

x = linspace(-1., 1., 100); y = x; z = x;
[X, Y, Z] = meshgrid(x, y, z);
s = exp(-sqrt(X.^2 + Y.^2 + Z.^2));

sinterp = interp3(x, y, z, s, 0., 0., 0.) % Should give sinterp = 0.9827
于 2012-04-27T15:24:54.397 に答える