如何获得f(x,y,z)= c的表面图

时间:2019-07-30 08:25:34

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

我的方程式为:

Root Leaks

它在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 xy中包含更多术语,但它们的格式相同 z,其中(625*((X - var)^2)/72)X,在指数内。 我可以使用此方法获得3d表面图吗? 编辑::我可以用Matlab制作一个带有负号的图,以避免太大的值。

1 个答案:

答案 0 :(得分:2)

您可以像这样在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,您会发现它的另一种形式是

Alternate form of equation

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

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

编辑

Matlab可以在没有8.12e1759前置因子的情况下绘制上述函数的某些部分。看起来像这样:

Surface plot of alternate form of function

但是,正如您所见,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

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

Contours plot in interval close to origin

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

我无法解释为什么对于较大的间隔,即使在较小的间隔内看起来不错的零件也无法由Matlab显示。例如,如果我使用interval2,结果将如下所示:

Contour plot for wider range