创建标量字段的矢量字段

时间:2012-08-10 16:10:59

标签: matlab

嗨我有一个n乘n矩阵z,它表示矢量场的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
    . . .
    . . .

等等。我在哪里错了?

由于

3 个答案:

答案 0 :(得分:2)

试试这个

  

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

答案 1 :(得分:1)

无需明确创建xy

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扩展到第三维,将所有值设置为零。

答案 2 :(得分:1)

问题是你试图创建3个独立的n×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维度)。这样的事可能,

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
希望有所帮助!