如何获得 f(x, y, z) = c 的曲面图
How to obtain a surface plot of f(x, y, z) = c
我的等式是这样的形式:
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
它在x
、y
、z
中包含更多的术语,但它们的形式相同
(625*((X - var)^2)/72)
其中 X
是 {x, y, z}
并且在指数内。
我可以使用它获得 3d 曲面图吗?
编辑 :: 我可以用 Matlab 绘制一个带负号的图来避免太大的值吗?
您可以像这样在 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
而不是结果如下所示:
我的等式是这样的形式:
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
它在x
、y
、z
中包含更多的术语,但它们的形式相同
(625*((X - var)^2)/72)
其中 X
是 {x, y, z}
并且在指数内。
我可以使用它获得 3d 曲面图吗?
编辑 :: 我可以用 Matlab 绘制一个带负号的图来避免太大的值吗?
您可以像这样在 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
而不是结果如下所示: