根据提示,在右侧编辑器 Begin-End 区间补充代码,实现普通版本和向量化版本的一维随机游走模拟,计算模拟结果的粒子位置的平均值和标准差。 bernoulli_real(p, n, x):根据公式计算并返回 n 重伯努利试验成功概率的理论值,其中,p为单次试验的成功概率,n为试验总次数,x为成功试验的总次数(x<=n); bernoulli_simu(p, n, x, N):用蒙特卡罗方法计算 n 重伯努利试验成功概率的模拟值,其中,p为单次试验的成功概率(0<=p<=1),n为试验总次数,x为成功试验的总次数(x<=n),N为蒙特卡罗方法模拟次数。在每次蒙特卡罗模拟过程中,如果具有概率p的那个结果刚好出现x次,那么称这n次实验是成功的,如果M是N次蒙特卡罗模拟中成功的次数,那么概率估计为M/N。
时间: 2024-02-15 22:04:01 浏览: 141
普通版本的一维随机游走模拟:
```python
import random
import math
def random_walk(n, m):
x = 0
for i in range(n):
if random.random() < 0.5:
x -= 1
else:
x += 1
return x * m
# 模拟粒子位置
N = 1000000
n = 100
m = 0.1
positions = [random_walk(n, m) for i in range(N)]
# 计算粒子位置的平均值和标准差
mean = sum(positions) / N
std_dev = math.sqrt(sum((x - mean)**2 for x in positions) / N)
print("平均值: ", mean)
print("标准差: ", std_dev)
```
向量化版本的一维随机游走模拟:
```python
import numpy as np
def random_walk_vectorized(n, m, N):
flips = np.random.choice([-1, 1], size=(N, n))
positions = np.cumsum(flips, axis=1) * m
return positions[:, -1]
# 模拟粒子位置
N = 1000000
n = 100
m = 0.1
positions = random_walk_vectorized(n, m, N)
# 计算粒子位置的平均值和标准差
mean = np.mean(positions)
std_dev = np.std(positions)
print("平均值: ", mean)
print("标准差: ", std_dev)
```
阅读全文