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

标签 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] );

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

但我得到了以下“东西”作为输出:

incorrect plot of z = x + y

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

不过,我还是觉得脚本太简单了,看不出有什么问题。谁能指出我忽略了什么地方?谢谢。

最佳答案

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

surf(x,y,z);

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

enter image description here

... 现在为什么需要将 xyz 点分开来创建表面?原因是因为执行 [x,y,z] 意味着您正在连接 x, yz 坐标转换成一个单个 2D 信号,所以您正在创建一个 10 x 30 的 2D 信号。调用 surf使用此单个二维数组自动假定 x 值从 1 到 30,y 值从 1 到 10,这些是跨越surf 图的轴与所示的 z 值相结合,其中 z 值源自之前创建的串联矩阵。如果查看生成的绘图,您会看到 x 值介于 1 到 30 之间,这显然不是您想要的。

您需要将 xyz 值分开以实现所需的平面。

关于matlab - 尝试使用 MATLAB 绘制 z = x + y 时图形不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31227056/

相关文章:

performance - MATLAB 全局变量的最佳替代品

r - 如何使用 ggplot 将图例放在多个分布的峰值中?

c++ - 使用热方程从分散数据中插值地形表面

c++ - 游戏运行几分钟后 SDL_Surface 消失?

Android Surfaceflinger 和 openGL ES

matlab - 如何将字符串 'pi' 转换为 double ? (MATLAB 2015a)

Matlab 绘图 - 无法在一个plot() 命令中使用 "MarkerEdgeColor"、 "MarkerFaceColor"或 "MarkerSize"进行多个绘图

Matlab 绘图 : remove connecting line between disconnected regions?

matlab - 绘图在 matlab 中自动以绘图对象命名

r - R 中的曲面图 Q - 与 matlab 中的 surf() 兼容