尝试使用MATLAB绘制z = x + y时图表不正确

时间:2015-07-05 04:08:18

标签: matlab

我试图在MATLAB中绘制3D曲面,我使用meshgrid,类似于MATLAB教程在这里所说的:http://www.mathworks.com/help/matlab/ref/meshgrid.html

我写了一个非常简单的三行脚本,我认为它会产生表面z = x + y,它如下:

[x , y] = meshgrid( linspace( 0 , 10 , 10 ) , linspace( 0 , 10 , 10 ) );
z = x + y;
surf( [ x , y , z] );

根据我的理解,第1行产生(x,y)坐标的所有组合,从0到10均匀间隔。然后,第2行只将公式z = x + y应用于该详尽的组合列表。然后第3行只绘制所有(x, y, z)点。

但是我得到了以下内容""作为输出:

incorrect plot of z = x + y

我很确定上图中的图表不是z = x + y,我不知道为什么两个轴没有达到最大值10.

尽管如此,我觉得这个剧本太简单了,而且看不出它有什么问题。任何人都可以指出我忽略了什么吗?谢谢。

1 个答案:

答案 0 :(得分:6)

生成3D坐标的语法是正确的。您对surf的来电不正确。您实际需要做的是将xyz分成三个独立的参数:

surf(x,y,z);

当你这样做时,你会得到这个表面。请注意,生成的图形使用的是MATLAB R2013a,因此显示的颜色图不是R2014b及以上版本中可用的parula颜色图,但表面将是您正在寻找的正确颜色:

enter image description here

...现在为什么您需要将xyz点分开以创建曲面?原因是因为执行[x,y,z]意味着您xyz坐标连接成单个2D信号,所以正在发生的是你正在创建一个10 x 30的2D信号。用这个单个2D阵列调用surf会自动假设x值从1到30并且y值的范围从1到10,这些值是跨越surf绘图轴的二维网格值,并结合显示的z值,其中z } values来自先前创建的连接矩阵。如果你看一下你生成的图,你可以看到x值从1到30,这显然不是你想要的。

您需要将xyz值分开才能获得所需的平面。