在Matlab中绘制四个变量u = f(x,y,z),范围为x,y,z

时间:2017-06-20 21:27:44

标签: matlab plot

我正在尝试在3D空间中绘制四个变量(x,y,z,u)。

下面我定义了u = f(x,y,z) = (x-y)/z以及xyz的范围。
然后我使用scatter3函数进行绘图。

linspace命令仅返回

u1 = f(x1, y1, z1) 
u2 = f(x2, y2, z2)
...

我想绘制我的变量,以便为所有uxy获取z的值,以及u_i = f(x_i, y_i, z_i) ,我想要:

u112 = f(x1, y1, z2) 
u121 = f(x1, y2, z1) 
...

我需要使用哪个功能?

完整代码:

z = linspace(1,2,50);
y = linspace(0,0.5,50);
x = linspace(-1,1,50);
f = (x-y)./z;
scatter3(x,y,z,5,f,'filled')
for i=1:50
    if f(i)<0
        scatter3(x,y,z,5,f,'r','filled');
    else
        scatter3(x,y,z,5,f,'b','filled');
    end
end

1 个答案:

答案 0 :(得分:2)

您需要将xyz向量传递给meshgrid,让它生成点以填充整个3-D卷:

z = linspace(1, 2, 50);
y = linspace(0, 0.5, 50);
x = linspace(-1, 1, 50);
[X, Y, Z] = meshgrid(x, y, z);
f = (X-Y)./Z;

这些将是50乘50乘50的矩阵。要使用scatter3绘制它们,您需要使用colon operator将它们重新整形为列向量:

scatter3(X(:), Y(:), Z(:), 5, f(:), 'filled');

如果您想将f的负值显示为红色,将正值显示为蓝色,则可以像这样调用scatter3并添加jet colormap(没有必要的循环):

scatter3(X(:), Y(:), Z(:), 5, (f(:) < 0), 'filled');
colormap(jet);