原理:当使用蒙特卡洛方法来估算π时,我们利用了圆的面积和正方形的面积的关系。假设我们有一个半径为1的圆和一个边长为2的正方形,圆完全包含在正方形内。蒙特卡洛方法的基本思想是,通过在正方形内生成大量的随机点,然后统计落在圆内的点的数量,以此来近似计算圆的面积。
具体来说,我们在正方形内生成大量的随机点,然后判断每一个点是否在圆内。如果一个点的坐标为(x, y),我们可以通过计算x^2 + y^2 是否小于等于1来确定该点是否在圆内。如果在圆内的点的数量足够大,那么这些点占正方形面积的比例将近似于圆和正方形面积的比例,即 π/4。
因此,通过统计落在圆内的点的数量,并将其与总点数的比值乘以4,我们就可以得到一个近似的π值。这就是蒙特卡洛方法估算π的基本原理。随着生成的随机点数量的增加,我们可以得到更接近真实π值的估计结果。
import random
import math
import sys
import matplotlib.pyplot as plt
def main():
total = 0
print('Start experiment: ')
n = int(input("Enter the number of iterations: "))
for i in range(n):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
if math.sqrt(x ** 2 + y ** 2) <= 1.0:
total += 1
plt.plot(x, y, 'ro')
else:
plt.plot(x, y, 'b*')
mypi = 4.0 * total / n
plt.show()
print('Iteration Times = ', n, 'PI estimate value = ', mypi)
print('math.pi = ', math.pi)
print('Errors = ', abs(math.pi - mypi) / math.pi)
if __name__ == "__main__":
main()
运行之后填入数字,也就是你选择多少个点落入这个区域。
这段代码使用蒙特卡洛方法估计π的值,并使用matplotlib可视化这个过程。现在让我来解释一下它的工作原理:
1. 首先导入了必要的库:`random`、`math`、`sys` 和 `matplotlib.pyplot`。
2. 定义了 `main()` 函数,这是程序的入口点。
3. 在 `main()` 函数中:
- 初始化了一个变量 `total` 用于跟踪落入单位圆内的点的数量。
- 打印了一个指示实验开始的消息。
- 要求用户输入实验的迭代次数(`n`)。
- 进入循环,迭代 `n` 次:
- 生成范围在[-1, 1]之间的随机坐标 `x` 和 `y`。
- 检查生成的点 `(x, y)` 是否落在单位圆内(即它距离原点的距离是否小于或等于1)。
- 如果点在单位圆内,增加 `total` 计数器,并在图上将该点绘制为红色圆圈 (`'ro'`)。否则,将该点绘制为蓝色星形 (`'b*'`)。
- 使用公式计算估算的 π 值:。
- 显示图表,展示生成的随机点及其分布。
- 打印迭代次数、估算的 π 值、从 `math.pi` 模块获得的实际 π 值,以及估算误差。
4. `if __name__ == "__main__":` 块确保 `main()` 函数只在直接运行脚本时执行,而不是在另一个脚本中导入时执行。
这就是这段代码的要点。实际上,它使用蒙特卡洛方法通过随机抽样点,并观察有多少点落在单位圆内来估计 π 的值。
运行结果:600为输入的点数,
红色点近似一个单位圆,蓝色落在单位圆外面的点。
搜了另一种代码:
下面是一个使用蒙特卡洛方法估算π的Python代码示例:
import random
def estimate_pi(num_samples):
num_points_in_circle = 0
for i in range(num_samples):
x = random.uniform(-1,1)
y = random.uniform(-1,1)
if x**2 + y**2 <= 1:
num_points_in_circle += 1
pi_estimate = 4 * num_points_in_circle / num_samples
return pi_estimate
这个代码中,我们定义了一个`estimate_pi()`函数,用于估计π的值。在函数内部,我们循环生成指定数量的随机点,并计算这些点是否在圆内。根据落在圆内的点和总点数的比例,我们可以求得π的近似值。
这个函数的参数是`num_samples`,它代表了我们生成的随机点的数量。如果点的数量越多,我们就能得到一个更准确的π的估计值。
下面是一个使用`estimate_pi()`函数进行π估计的例子:
estimated_pi = estimate_pi(100000)
print("Estimated pi: ", estimated_pi)
这行代码调用`estimate_pi()`函数并输出结果,以告诉我们估计出的π的值。
感谢观看!!!!!
python运行快捷键shift+enter