【问题标题】:Z must be a matrix, not a scalaqr or vector, matlabZ必须是矩阵,而不是scalaqr或向量,matlab
【发布时间】:2017-10-25 16:46:32
【问题描述】:

我正在尝试制作 3d 绘图,但我遇到了一个错误,我不知道如何解决它。我知道还有其他与我类似的问题,但我尝试了其中一些,但没有奏效。

fh = sin(x)*cos(y).^3 + 2*cos(x).^5*sin(y)

[X,Y] = meshgrid(1:0.5:10,1:20);

surf(X,Y,fh)

Error using surf (line 82)
Z must be a matrix, not a scalar or vector.

【问题讨论】:

  • 请发布一个包含可运行代码的最小示例。第一行会报错,因为xy 是未定义的
  • @LuisMendo 在查看了一些简单的 3d 绘图示例后,我没有看到它们在任何地方定义 X 和 Y。自从它是我的第一个 3D 绘图以来,我正在寻找一些帮助来绘制我拥有的这个函数。这就是我拥有的所有代码。

标签: matlab surf


【解决方案1】:

在这种情况下,Z 数据就是您作为fh 传递给surf 的数据。看起来fh 是您要用于计算Z 的函数,但您需要使用为XY 生成的网格值来评估它。正如您的代码现在一样,它正在使用您尚未为我们定义的 xy 评估函数(大小写很重要!)。试试这个:

[X, Y] = meshgrid(1:0.5:10, 1:20);
Z = sin(X).*cos(Y).^3 + 2.*cos(X).^5.*sin(Y);

surf(X, Y, Z);

请注意,我在方程式中使用了 .* 运算符 (element-wise multiplication) 而不是 * 运算符 (matrix multiplication)。

您也可以通过定义一个 anonymous function 来评估给定数据集的公式来做到这一点:

fh = @(x, y) sin(x).*cos(y).^3 + 2.*cos(x).^5.*sin(y);
[X, Y] = meshgrid(1:0.5:10, 1:20);

surf(X, Y, fh(X, Y));

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2021-01-05
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多