我正在尝试在MATLAB中绘制以下函数:
目标是将所有不同条件拼接成一张图,以制作整个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()
生成器在0
和1
之间产生20多个数字,该数字显示了变量可以位于的区域。但是,当给定区域中的线分散时,它看起来很混乱。我希望它是坚实的表面。
有没有可以用于此目的的特定命令?在一些示例中,我已经看到使用Mesh()
来使图更坚实,但是不确定这是否适用于数据集。
答案 0 :(得分:5)
您可以通过使用meshgrid
生成包含x
和y
值的规则网格,使用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');
注意:这假设未指定的条件(例如{x < 0
和y > 1
)和(y < 0
和x > 1
)应为零也是