Python:蒙特卡洛方法求圆周率
题目:使用蒙特卡洛方法求圆周率。
基本思想:利用圆与其外接正方形面积之比为 pi /的关系,通过产生大量均匀分布的二维点,计算落在单位圆和单位正方形的数量之比再乘以4便得到 pi 的近似值。样本点越多,计算出的数据将近真实的 pi .
代码实现的具体步骤:
1.导入random模块,用于生成随机数。
import random
2.定义一个的函数(pi),用来接受一个表示要进行模拟的样本点数量的参数(nums)。
def pi(nums):
3.在函数内部初始化一个变量(inside_circle),用于记录落在单位圆内的点的数量。
inside_circle = 0
4.使用for循环生成nums个随机点
for _ in range(nums):
5.生成一个在[-1, 1]范围内的随机x坐标,一个在[-1, 1]范围内的随机y坐标
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
6.计算该点到原点的距离(平方和:x**2)
distance = x ** 2 + y ** 2
7.判断如果距离小于等于1,说明该点在单位圆内,将inside_circle加1。
if distance <= 1:
inside_circle += 1
8.计算圆的面积与正方形的面积之比(*4),并返回π的近似值(pi_approximation)。
pi_approximation = (inside_circle / nums) * 4
return pi_approximation
9.设置了nums为1000000,进行100万次随机采样。
nums = 1000000
10.调用pi函数来计算π的近似值,并将结果赋给变量approx_pi
approx_pi = pi(nums)
print("通过蒙特卡洛方法计算得到的圆周率近似值为:", approx_pi)
完整代码:
import random
def pi(nums):
inside_circle = 0
for _ in range(nums):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
distance = x ** 2 + y ** 2
if distance <= 1:
inside_circle += 1
pi_approximation = (inside_circle / nums) * 4
return pi_approximation
nums = 1000000
approx_pi = pi(nums)
print("通过蒙特卡洛方法计算得到的圆周率近似值为:", approx_pi)
作者:YO__Y