假设我有一个嵌入3d体积的2D表面,例如球体表面, 由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
是否有更好的算法或者至少有一种方法可以让它更快? 感谢您的任何建议。
编辑:一般来说,这应该适用于具有给定参数化的所有类型的表面,如上面的类型。此外,立方体的位置可能与原点不同。