假设我有一个嵌入三维体积的二维曲面,例如球体的曲面,
其定义为r²=x²+y²+z²。现在我要计算立方体中这个曲面的切割所生成的体积。作为示例,请参见下图
所以在这种情况下,一个体积就是V=4/3πr³/8=π/8~0.5239,
什么是一种快速的高精度数值计算方法?
我的第一个想法是使用一个简单的monte-carlo方法,这个方法似乎有效,但是速度不够快,因为我必须对大约1000个立方体重复这个过程。例如:import numpy as np
def get_pi(n):
k = 10000
m = n/k
result = 0
for i in range(m): #split up n to save memory
x = np.random.rand(k)
y = np.random.rand(k)
z = np.random.rand(k)
r = np.sqrt(x**2+y**2+z**2)
t = r<1
result += np.sum(t)/float(k)*6
result /=m
return result
In [19]: get_pi(100000000)-np.pi
Out[19]: -9.6033589800370578e-05
In [28]: %timeit get_pi(100000000)
1 loops, best of 3: 4.98 s per loop
有没有更好的算法,或者至少有一种更快的方法?
谢谢你的建议。在
编辑:一般来说,这应该适用于所有类型的具有给定参数的曲面,如上述类型。而且立方体的位置可能与原点不同。在