【问题标题】:Plotting a 3D surface in Matlab在 Matlab 中绘制 3D 曲面
【发布时间】:2020-01-06 08:32:46
【问题描述】:

我有以下功能:


我想在 MATLAB 中在 -15 ≤ x ≤ 15 和 -15 ≤ y ≤ 15 处绘制它。

我尝试的是这样的:

[x,y] = meshgrid(-15:1:15, -15:1:15);
z = ((x^4 + y^4 - 4 * x^2 * y^2)/(x^2 + y^2));
plot(x,y,z)

当我运行它时,它说 Warning: Matrix is singular to working precision.Data must be a single matrix Y or a list of pairs X,Y.

而我的变量 z 只包含一个用 NaN 填充的 31x31 双精度。

【问题讨论】:

标签: matlab plot


【解决方案1】:

问题是由术语 x^2+y^2(在某些情况下实际上为零)以及您对 Matlab 运算符的错误使用产生的。最后,plot 函数不适合绘制 3D 表面。 为简单起见,我建议使用符号计算:

syms x y; 
z = ((x^4 + y^4 - 4 * x^2 * y^2)/(x^2 + y^2));
fsurf(z,[-15,15,-15,15])

您也可以使用数字版本(更快),但请注意使用正确的运算符 - 例如,不要使用矩阵乘法 *,而是使用逐元素乘法 .*。这也与^ 和/ 相关。

[x,y] = meshgrid(-15:1:15, -15:1:15);
z = ((x.^4 + y.^4 - 4 .* x.^2 .* y.^2)./(x.^2 + y.^2));
surf(x,y,z)

请注意,在这种情况下没有定义原点 - 由于被零除的问题。如果您愿意,可以使用不同的范围来避免此问题。

[x,y] = meshgrid(-15:0.17:15, -15:0.17:15);
z = ((x.^4 + y.^4 - 4 .* x.^2 .* y.^2)./(x.^2 + y.^2));
surf(x,y,z,'EdgeAlpha',0) % The above range is dense - so we remove the edge coloring for clarity. 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多