如何使用Monte Carlo方法求出python中球体的体积?
How to use Monte Carlo method to find the volume of a sphere in python?
我需要使用 Monte Carlo 方法在 jupyter notebook 的 python3 环境中求出球体的体积。但是我讲师的代码里的方法的例子好像没有意义。
我被指示修改讲师的代码,该代码使用 monte carlo 方法在单位正方形中使用圆来查找圆周率;然而,当我 运行 他们的代码时,我得到的 pi 值是 0.04,这太小了。我知道如何调整它来找到球体的体积,但我得到的答案还是太小了。下面是讲师的代码。
import numpy as np
n = 100
x = np.random.random(n)
y = np.random.random(n)
z = np.sqrt(x**2 + y**2)
ninside = len( np.where(z < 1.) )
pi = 1.*ninside/n * 4.
print(pi)
当你运行代码并打印pi
时,你得到0.04
,这显然是不正确的,应该大致是3.14
。这段代码应该如何工作以及我应该如何使用 Monte Carlo 方法来计算球体的体积?
替换
ninside = len( np.where(z < 1.) )
和
ninside = len( np.where(z < 1.)[0] )
np.where()
returns一个元组,所以在获取长度之前需要把数组从元组中取出来
当调试这样的东西时,我建议 运行 在解释器中逐行检查每个新变量的值。
这样我发现len(np.where(z < 1.))
一直是1,然后我查看np.where(z < 1.)
的值,发现它是一个元组,里面有一个数组。
我需要使用 Monte Carlo 方法在 jupyter notebook 的 python3 环境中求出球体的体积。但是我讲师的代码里的方法的例子好像没有意义。
我被指示修改讲师的代码,该代码使用 monte carlo 方法在单位正方形中使用圆来查找圆周率;然而,当我 运行 他们的代码时,我得到的 pi 值是 0.04,这太小了。我知道如何调整它来找到球体的体积,但我得到的答案还是太小了。下面是讲师的代码。
import numpy as np
n = 100
x = np.random.random(n)
y = np.random.random(n)
z = np.sqrt(x**2 + y**2)
ninside = len( np.where(z < 1.) )
pi = 1.*ninside/n * 4.
print(pi)
当你运行代码并打印pi
时,你得到0.04
,这显然是不正确的,应该大致是3.14
。这段代码应该如何工作以及我应该如何使用 Monte Carlo 方法来计算球体的体积?
替换
ninside = len( np.where(z < 1.) )
和
ninside = len( np.where(z < 1.)[0] )
np.where()
returns一个元组,所以在获取长度之前需要把数组从元组中取出来
当调试这样的东西时,我建议 运行 在解释器中逐行检查每个新变量的值。
这样我发现len(np.where(z < 1.))
一直是1,然后我查看np.where(z < 1.)
的值,发现它是一个元组,里面有一个数组。