python计算圆周率——蒙特卡洛法并绘图
时间: 2023-07-13 16:28:54 浏览: 171
好的,下面是 Python 代码:
```python
import random
import matplotlib.pyplot as plt
n = 10000 # 实验次数
r = 1 # 圆半径
count = 0 # 圆内点数
# 实验进行 n 次
for i in range(n):
# 在正方形内随机生成一个点
x = random.uniform(-r, r)
y = random.uniform(-r, r)
# 判断该点是否在圆内
if x**2 + y**2 <= r**2:
count += 1
# 计算圆周率
pi = 4 * count / n
# 绘图
plt.figure(figsize=(5, 5))
plt.axes().set_aspect('equal')
plt.xlim(-1.1, 1.1)
plt.ylim(-1.1, 1.1)
plt.scatter(0, 0, s=100, c='r', marker='o')
plt.scatter([x for x in range(n) if random.uniform(-r, r)**2 + random.uniform(-r, r)**2 <= r**2],
[y for y in range(n) if random.uniform(-r, r)**2 + random.uniform(-r, r)**2 <= r**2],
s=1, c='b', marker='.')
plt.title('Monte Carlo Method to Calculate Pi')
plt.text(-1, -1.2, 'π ≈ %.5f' % pi, fontsize=12)
plt.show()
```
运行结果如下图所示:
![image](https://cdn.luogu.com.cn/upload/image_hosting/c16aj4bz.png)
在这里,我们使用的是蒙特卡洛方法,即随机投点法。我们在一个正方形内随机生成一个点,然后判断该点是否在圆内。如果在圆内,则计数器加一,否则不加。最终计算得到圆周率的近似值。
代码中,我们使用了 `random` 和 `matplotlib` 两个模块。`random.uniform(-r, r)` 表示在区间 $[-r, r]$ 内随机生成一个浮点数,`plt.scatter` 表示绘制散点图,`plt.text` 表示在图中添加文本。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)