0

u1 v1 w1(速度成分) ボリューム データがあります。u1 のサイズは NxNxN (N は 100) で、v1 と w1 についても同じです。

サイズが NxNxN の u2、v2、w2 のケースがもう 1 つあります。これらのデータ セットは両方とも、TriScatteredInterp と meshgrid から取得されます。基本的に、これら2つのケースの流線をプロットしましたが、これらの流線の間に(ケース1から2まで)どのくらいの偏差があるかを確認したいと思います。meshgrid で指定された点で、それらの間の角度を見つける必要があります。しかし、外積は機能しません (A と B には、長さ 3 の次元が少なくとも 1 つ必要です)。どうもありがとう

4

1 に答える 1

1

角度は次を使用して見つけることができます

angle = atan2(norm(cross(a,b)),dot(a,b))

[四象限逆正接を使用]; しかし、私の場合、外積部分は 100x100x100 の各速度成分のサイズとして機能しません。

Matlab の Concatenate 関数を使用すると、Velocity1 と Velocity2 の 3 つのコンポーネントを結合して、サイズ NxNxNx3 の行列を作成できます。ここで、V1(u1,v1, w1) と V2(u2,v2, w2) の各トリプレット/組み合わせについて、外積 (C と呼びます) を 4 次元で取得でき、その結果、サイズ NxNxNx3 の行列が得られます。上記の式では、外積の結果の大きさ/ノルムを得るには、C と C 自体の内積を 4 次元で取り、それを平方根して大きさを求め、そのサイズを NxNxN に戻す必要があります。最終的に次のように実行できます--

   A = cat(4,u1,v1,w1); % Combine the three components in the 4th dimension
   B = cat(4,u2,v2,w2); % Ditto
   C = cross(A,B,4); % Take the cross products there.
   ang = atan2(sqrt(dot(C,C,4)),dot(A,B,4));

このソリューションは、Roger Stafford 氏 (Matlab Web サイト) によって提供され、すべての功績は彼に帰します。

答えはここにあります.. http://fr.mathworks.com/matlabcentral/answers/281635-cross-product-multi-dim-data

于 2016-05-01T11:11:25.377 に答える