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

Posted

技术标签:

【中文标题】尝试使用 MATLAB 绘制 z = x + y 时图形不正确【英文标题】:Incorrect graph when trying to plot z = x + y with MATLAB 【发布时间】:2015-09-22 11:46:33 【问题描述】:

我正在尝试在 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) 点。

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

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

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

【问题讨论】:

【参考方案1】:

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

surf(x,y,z);

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

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

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

【讨论】:

以上是关于尝试使用 MATLAB 绘制 z = x + y 时图形不正确的主要内容,如果未能解决你的问题,请参考以下文章

用matlab绘制四维图像

MATLAB如何绘制三维三次隐函数图像?

MATLAB之心形图绘制

MATLAB绘制三维图形

matlab中怎么让三维曲面的颜色随X,Y的值变化

如何用Matlab绘制球面图形?以不同视角观察球面:x^2+y^2+z^2=r^2; x^2+y^2=rx