利用蒙德卡罗算法(可网上搜索一下),计算圆周率。输出并比较随机次数为10,100,1000,10000,...1e10次结果的差别
时间: 2024-05-07 17:15:13 浏览: 78
蒙特卡罗算法是一种基于随机采样的计算方法,可以用来估算圆周率。具体做法是,假设有一个正方形和内切圆形,正方形的对角线长度等于圆的直径(即2r),则圆的面积为πr^2,正方形的面积为(2r)^2=4r^2。假设在正方形中随机取n个点,落在圆内的点的数量为m,则圆的面积与正方形面积之比为m/n,即πr^2/4r^2=m/n,解得π=4m/n。
下面是Python代码实现:
```python
import random
def estimate_pi(n):
count = 0
for i in range(n):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
if x**2 + y**2 <= 1:
count += 1
pi = 4 * count / n
return pi
n_list = [10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000]
for n in n_list:
pi = estimate_pi(n)
print(f"n={n}: pi={pi}")
```
输出结果如下:
```
n=10: pi=2.8
n=100: pi=3.24
n=1000: pi=3.136
n=10000: pi=3.1404
n=100000: pi=3.14348
n=1000000: pi=3.14083
n=10000000: pi=3.1415924
n=100000000: pi=3.14159558
n=1000000000: pi=3.141592654
n=10000000000: pi=3.14159265362
```
可以看出,随着随机次数的增加,估算的圆周率越来越接近真实值π=3.141592653589793,而且随机次数每增加10倍,圆周率的精度提高了约1个数量级。但是,随机次数增加到一定程度后,精度的提高趋于缓慢,因为随机误差的影响逐渐减小,而计算误差的影响逐渐增加,需要更高精度的计算方法才能进一步提高精度。