创建向量场输出标量场



嗨,我有一个 n x 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
    . . .
    . . .

等等。我哪里出错了?

谢谢

试试这个

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

问题是您试图创建 3 个单独的 n x n 矩阵并将它们强制进入错误的维度。相反

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

然后 韦克菲尔德(:,:,3) = z;

或者,您正在尝试获取 Z 的标量值并将其用作 vecfield 的 z 维大小的指标。这是不可能的,因为尺寸设置不会统一。但是,您仍然可以通过对 vecfield 中的单元格进行编号并使其他所有内容为零来表示该信息。然后它看起来像...

韦克菲尔德(:,:,1)

1 2 3 2 1

1 2 3 2 1

1 2 3 2 1

然后 韦克菲尔德(:,:,2)

0 1

2 1 0

0 1

2 1 0

0 1

2 1 0

然后 韦克菲尔德(:,:,3)

0 0

1 0 0

0 0

1 0 0

0 0

1 0 0

我们可以这样做(它的想法,显然使用你的 n x 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

希望有帮助!

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

最新更新