【问题标题】:Dissimilar results to the surface plot in MATLAB与 MATLAB 中的曲面图结果不同
【发布时间】:2019-04-05 14:13:02
【问题描述】:
>> x=0:0.001:720;
>> y=sind(x);
>> z=cosd(x);
>> surf(x,y,z);

我想使用上面的代码绘制一个曲面,即 x 在 X 轴,y 是 Y 轴,z 是 Z 轴。 我还为以下目的编写了一个 FORTRAN 代码,创建了一个 csv 文件,并将其绘制在原点。我得到这样的结果:

但是,在 MATLAB 中,我在使用时也有类似的想法:-

>> plot3(x,y,z)

如图所示:

但它不是表面(原因很明显)。

当使用surf 命令时,我也收到一条错误消息:

Z 必须是矩阵,而不是标量或向量。

我的代码可能有什么问题?

【问题讨论】:

标签: matlab plot matlab-figure surface


【解决方案1】:

使用surf 需要Z 是一个矩阵。使用 meshgrid 之类的函数可以轻松解决此问题(griddata 也很有用)。

使用meshgrid 使得使用surf 非常方便。

但是Z 和Y 都只是X 的函数,所以我无法解释为什么你的情节Z-value 会随着X 和Y 而改变。根据您列出的解析(数学)方程,Z-值在Y-维度中应该是常数。

stepsize = 1;     % use 10 for cleaner look
x = 0:stepsize:720;
y = sind(x);
[X,Y] = meshgrid(x,y);
Z = cosd(X);

surf(X,Y,Z)

请注意,轮廓线在Y 维度上是笔直且平行的(使用surfc(X,Y,Z))。

另一种方法是循环遍历x(由i 索引)和y(由j 索引)的元素,其中x 和y(向量)都计算Z(i,j),其中Z 是一个矩阵。由于行和列的默认分配,此方法需要转置Z 矩阵,例如surf(X,Y,Z.')。


相关帖子:
How can I plot a function with two variables in octave or matlab?
MATLAB plot part of surface

【讨论】:

  • 好的,我知道了。你能告诉我如何为 plot3(x,y,z) 图像填充纯色吗?
  • 你的意思是喜欢surf 命令?发布的答案缺少什么?我没有遵循你想要的。
  • 其实我明白你的意思了。我什至通过了一些 meshgrid 命令。谢谢。
  • 太棒了!您可以单击复选标记让社区知道这解决了您的问题。如果还有其他问题,请随时发表评论。
  • 当然,但可惜,目前我的声望低于 15。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多