如何制作两个变量的分段函数的3D图?

时间:2018-11-06 18:13:37

标签: matlab plot surface piecewise

我正在尝试在MATLAB中绘制以下函数:

1

目标是将所有不同条件拼接成一张图,以制作整个CDF图。到目前为止,我已经尝试了以下方法:

x=linspace(0,1,20);
y=linspace(0,1,20);
Z=x.^y;
plot3(x,y,Z)
hold on
plot3(x,0,0);
plot3(0,y,0);

我不确定如何为x>1, y>1绘制图1,也不确定是否有办法使这组条件的图成为固体表面。我尝试使用rand()生成器在01之间产生20多个数字,该数字显示了变量可以位于的区域。但是,当给定区域中的线分散时,它看起来很混乱。我希望它是坚实的表面。

有没有可以用于此目的的特定命令?在一些示例中,我已经看到使用Mesh()来使图更坚实,但是不确定这是否适用于数据集。

1 个答案:

答案 0 :(得分:5)

您可以通过使用meshgrid生成包含xy值的规则网格,使用logical indexing修改Z中的值并显示surf的搜索结果:

% Grid points spanning from -1 to 2 for x and y:
[x, y] = meshgrid(linspace(-1, 2, 91));

% Fill Z with zeroes to start (satisfies condition 1 by default):
Z = zeros(size(x));

% Condition 2:
index = (x >= 0) & (x <= 1) & (y >= 0) & (y <= 1);
Z(index) = x(index).*y(index);

% Condition 3:
index = (x >= 0) & (x <= 1) & (y > 1);
Z(index) = x(index);

% Condition 4:
index = (y >= 0) & (y <= 1) & (x > 1);
Z(index) = y(index);

% Condition 5:
Z((x > 1) & (y > 1)) = 1;

% Plot surface:
surf(x, y, Z, 'EdgeColor', 'none');

enter image description here

注意:这假设未指定的条件(例如{x < 0y > 1)和(y < 0x > 1)应为零也是