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

use*_*465 4 matlab plot surface

我试图在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] );
Run Code Online (Sandbox Code Playgroud)

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

但我得到以下"东西"作为输出:

z = x + y的错误图

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

尽管如此,我发现脚本太简单了,看不出有什么问题.任何人都可以指出我忽略了什么吗?谢谢.

ray*_*ica 6

生成3D坐标的语法是正确的.您的来电surf不正确.您实际需要做的是分开x,yz分成三个独立的参数:

surf(x,y,z);
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

...现在为什么你需要分开你的x,yz指出创造表面?究其原因,就是因为这样[x,y,z],你是手段串联x,yz协调到一个单一的2D信号,因此发生的事情是,你正在创建一个2D信号是10×30调用surf这个单一的2D阵列自动假定x值范围从1到30,y值范围从1到10,这些是跨越图的轴的值的2D网格以及显示surfz值,其中z值来自先前创建的连接矩阵.如果你看一下你生成的图,你可以看到x值从1到30,这显然不是你想要的.

你需要单独的x,yz值,以达到理想的平面.