【问题标题】:How to obtain a surface plot of f(x, y, z) = c如何获得 f(x, y, z) = c 的曲面图
【发布时间】:2019-07-30 08:25:34
【问题描述】:

我的方程式是这样的:

exp(- (625*(x - 31/20)^2)/72   -  (625*(x - 981/250)^2)/72 - (625*(y - 461/100)^2)/72 -  (625*(y - 4797/1000)^2)/72 - (625*(z - 13207/1000)^2)/72 - (625*(z - 15177/1000)^2)/72) = 0.0005 

它包含更多xyz的术语,但它们的形式相同 (625*((X - var)^2)/72) 其中X{x, y, z} 并且在指数内。 我可以使用这个获得 3d 曲面图吗? 编辑 :: 我可以用 Matlab 绘制一个带有负号的图,避免值太大。

【问题讨论】:

    标签: matlab plot matlab-figure matlab-guide surface


    【解决方案1】:

    您可以像这样在 Matlab 中创建隐式函数的曲面图:

    f = @(x,y,z) exp((625*(x - 31/20)^2)/72 + (625*(x - 981/250)^2)/72 + (625*(y - 461/100)^2)/72 + (625*(y - 4797/1000)^2)/72 + (625*(z - 13207/1000)^2)/72 + (625*(z - 15177/1000)^2)/72) - 0.0005;
    
    fimplicit3(f)
    

    但是,如果您分析 your equation in Wolfram Alpha,您会发现它的另一种形式是

    Matlab 无法绘制此图,因为它将所有计算值解释为 Inf。您需要先对函数进行一些缩放。

    您可以使用realmax 来检查 IEEE 双精度中最大的有限浮点数是多少。这会给你1.7977e+308

    编辑

    Matlab 能够在没有8.12e1759 前置因子的情况下绘制上述函数的某些部分。这将如下所示:

    但是,正如您所见,Matlab 无法在每个位置都显示一个表面,因为您的函数仍然会出现意外行为。

    ** 编辑 2 **

    Ander Biguri 建议查看原点附近的函数。

    如果我们这样做:

    f = @(x,y,z) exp(5/288 .* (2 .* x .* (500 .* x - 2737) + y .* (1000 .* y - 9407) + 8 .* z .* (125 .* z - 3548))) - 0.0005;
    
    interval = [-0.6 0.6 -0.6 0.6 -0.6 0.6];
    
    %interval2 = [-6 6 -6 6 -6 6];
    
    fimplicit3(f,interval)
    
    colorbar
    

    然后从顶部看结果,我们得到一个漂亮的等高线图,如下所示:

    请注意,出于性能原因,我还对您的函数进行了矢量化。

    我无法解释为什么对于较大的间隔,即使在这个较小的间隔中看起来很好的部分也无法由 Matlab 显示。例如,如果我改用 interval2,结果如下所示:

    【讨论】:

    • 双浮点格式的最大可能值,不一定是 MATLAB。
    • 我是 matlab 新手,不知道函数绘图。有解决方法吗?其他软件/方法?
    • 这实际上更像是一道数学题,而不是 Matlab 题。也许 math.stackexchange.com 上的人可以帮助您以另一种方式分析您的函数。
    • @AnderBiguri 感谢您的更正。我相应地改变了我的答案。
    • 我想知道其他一些函数近似值是否在 [0,0,0] 附近数值稳定。
    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2013-02-26
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多