我必须在MATLAB中构建半球,所以我这样做了:
figure
k = 5;
n = 2^k-1;
theta = pi*(-n:2:n)/n;
phi = (pi/2)*(0:2:n)'/n;
X = cos(phi)*cos(theta);
Y = cos(phi)*sin(theta);
Z = sin(phi)*ones(size(theta));
surf(X,Y,Z);
代码不是我写的,所以当我替换'在
phi = (pi/2)*(0:2:n)'/n;
我得到以下错误:
operator *: nonconformant arguments (op1 is 1x16, op2 is 1x32)
请解释为什么它必不可少....
另外,我想写一个更简单的代码来描绘半球。我可以在matlab中使用一些更短的命令/方法的想法。
答案 0 :(得分:2)
'
- 符号是转置。如果矩阵乘以16×1阵列乘以1乘32,最终得到一个16乘32的数组,其中元素(i,j)
是第一个数组乘以的第i个元素第二个数组的第j个元素。如果省略转置,则尝试使用1乘32的数组矩阵乘以1乘16的数组,这在线性代数中是未定义的。像这样使用线性代数是在Matlab中创建数字网格的一种方法。
另一种方法是通过ndgrid
创建网格,例如:
[theta,phi] = ndgrid(pi*(-n:2:n)/n, (pi/2)*(0:2:n)/n);
X = cos(phi).*cos(theta);
...
请注意,我使用了元素乘法.*
,因为我不是在这里做线性代数。
关于第二个问题:如果您发布的代码太长,最简单的方法是将其放入函数中,以便您可以通过单行函数调用创建绘图。