【发布时间】:2020-06-15 17:25:09
【问题描述】:
假设我想使用 GNU Octave 的 scatter3 函数绘制 f(x,y,z) = x^2。
我的代码是
x = [1,2,3,4];
y = [1,2,3,4,5];
z = [1,2,3,4,5,6];
for xi = 1:4
for yi = 1:5
for zi = 1:6
a(xi,yi,zi) = x(xi) * x(xi);
endfor
endfor
endfor
[xx yy zz] = meshgrid(x,y,z);
scatter3(xx(:), yy(:), zz(:), [], a(:),'fill');
xlabel('x')
ylabel('y')
zlabel('z')
colormap(rainbow)
colorbar()
我得到了上面的图,它表明函数随着y(实际上是y^2)而变化,并且是一个常数w.r.t。 x。难道我做错了什么?由于a(xi,yi,zi) = x(xi) * x(xi),由于索引xi,我不应该得到a = x^2吗?
我已经标记了三个轴。
我在 Ubuntu 18.04 中使用 Octave 4.2.2。
【问题讨论】:
-
啊,您可能需要在 mehsgrid 中交换 x,y 输入
-
@AnderBiguri
a(xi,yi,zi) = x(xi) * x(xi),所以我们应该使用a = x^2而不是a = y^2(在情节中) -
是的,要进行绘图,您需要交换
meshgrid(y,x,z)。这是因为 MATLAB/Octave 用作行/列的内容与您命名它们的内容不匹配。 -
但是,如果 x 和 y 没有相同的编号怎么办。点数?我会更新帖子
-
没关系,您的绘图不是在“x”轴上绘制变量
x,而是在绘制y。因此,您更改网格网格以使其适合绘图。如果您愿意,还可以更改在图中调用 x 和 y 的轴。