浦丰投针python代码
时间: 2023-12-25 21:29:54 浏览: 139
以下是布丰投针实验求π的Python代码示例:
```python
import random
import numpy as np
from tqdm import tqdm
# 平行线距离
D = 2
# 针的长度
L = 1
# 实验次数
exp_num = 100000000
# 触碰次数
touch_num = 0
for i in tqdm(range(1, exp_num+1)):
X = random.uniform(0, D / 2)
theta = random.uniform(0, np.pi / 2)
if X < (L/2)*np.cos(theta):
touch_num += 1
# 计算π
P = touch_num/exp_num
print('π = {}'.format((2*L)/(P*D)))
```
这段代码使用了随机数生成器来模拟布丰投针实验,通过统计触碰次数来估计π的值。其中,`random.uniform(a, b)`函数用于生成a和b之间的随机数,`np.pi`表示π的值。最后,通过计算公式`(2*L)/(P*D)`来得到π的估计值。
相关问题
用Python实现浦丰投针实验
以下是Python实现浦丰投针实验的代码:
```python
import random
import math
def buffon_needle(l, d, n):
count = 0
for i in range(n):
x = random.uniform(0, d/2)
theta = random.uniform(0, math.pi/2)
if x <= (l/2) * math.sin(theta):
count += 1
return 2 * l * n / (d * count)
# 测试
print(buffon_needle(1, 2, 10000)) # 3.1396428571428575
```
解释:
- `l`:针的长度;
- `d`:两条平行线的距离;
- `n`:投针的次数;
- `random.uniform(0, d/2)`:随机生成针与平行线的距离;
- `random.uniform(0, math.pi/2)`:随机生成针与平行线的夹角;
- `x <= (l/2) * math.sin(theta)`:判断针是否与平行线相交;
- `count`:记录相交次数;
- `2 * l * n / (d * count)`:计算π的近似值。
注意:为了准确度,`n`应该设置较大的值。
阅读全文