0

こんにちは、ベクトル フィールドの z 次元のスカラー値を表す n 行 n 列の行列 z があります。すなわち

z = 1 2 3 4 5 4 3 2 1
    1 2 3 4 5 4 3 2 1
    1 2 3 4 5 4 3 2 1
    1 2 3 4 5 4 3 2 1
    1 2 3 4 5 4 3 2 1

x 次元と y 次元のスカラー フィールド値は 0 です。私の質問は、どのように z を取得してベクトル フィールドを形成するかです。私は次のようなことを試しました:

x = zeros(size(z));
y = x;
vecfield = [x(:) y(:) z(:)]

私が期待する場所:

vecfield(:,:1) = 

    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 

 vecfield(:,:2) = 

    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 

 vecfield(:,:3) = 

    1 2 3 4 5 4 3 2 1
    1 2 3 4 5 4 3 2 1
    1 2 3 4 5 4 3 2 1
    1 2 3 4 5 4 3 2 1
    1 2 3 4 5 4 3 2 1

しかし、私は得ています:

vecfield = 

    0 0 1
    0 0 2
    0 0 3
    0 0 4
    . . .
    . . .

等々。ここでどこが間違っていますか?

ありがとう

4

3 に答える 3

2

これを試して

vecfield = 猫 (3, x,y,z)

于 2012-08-10T16:18:22.017 に答える
1

問題は、3つの別々のn x n行列を作成しようとして、それらを間違った次元に強制していることです。その代わり、

vecfield = zeros(size(z),length(z),3) %because you want three arrays in the z direction

次に、vecfield(:、:、3)= z;

または、Zのスカラー値を取得して、vecfieldのz次元サイズのインジケーターとして使用しようとしています。寸法設定が均一でないため、これは不可能です。ただし、 vecfieldにあるセルに番号を付け、それ以外はすべてゼロにすることで、その情報を表すことができます。それからそれは次のようになります...

vecfield(:、:、1)

1 2 3 2 1

1 2 3 2 1

1 2 3 2 1

次に、vecfield(:、:、2)

0 1 2 1 0

0 1 2 1 0

0 1 2 1 0

次に、vecfield(:、:、3)

0 0 1 0 0

0 0 1 0 0

0 0 1 0 0

私たちはそれを行うことができます(それのアイデア、明らかにあなたのn行n列の次元を使用します)。多分このようなもの、

vecfield = zeros(size(z),length(z),max(max(z)));
for n  = 1 : size(vecfield,3)
     vecfield(:,:,n) = z(:,:)- n;
     vecfield((vecfield(:,:,n) < 0)==1) = 0;
end

お役に立てば幸いです。

于 2012-08-10T21:28:54.030 に答える
1

明示的xに作成する必要はありません:y

z = [1 2 3 4 5 4 3 2 1;
    1 2 3 4 5 4 3 2 1;
    1 2 3 4 5 4 3 2 1;
    1 2 3 4 5 4 3 2 1;
    1 2 3 4 5 4 3 2 1];

vecfield = z; % vecfield 5 x 9 (x 1)
vecfield(:,:,2:3) = 0; 

最後のコマンドは、vecfield を 3 次元に動的に拡張し、すべての値をゼロに設定します。

于 2012-08-10T16:26:43.407 に答える