MH算法的Python代码
时间: 2024-05-13 07:11:21 浏览: 191
MH算法(Metropolis-Hastings算法)是一种用于特卡洛模拟的采样算法,用于生成服从某个概率分布的样本。下面是一个简单的MH算法的Python代码示例:
```python
import numpy as np
def target_distribution(x):
# 定义目标分布函数,这里以标准正态分布为例
return np.exp(-0.5 * x**2) / np.sqrt(2 * np.pi)
def proposal_distribution(x, sigma):
# 定义建议分布函数,这里以均值为x,标准差为sigma的正态分布为例
return np.random.normal(x, sigma)
def metropolis_hastings(num_samples, sigma):
samples = []
x = 0 # 初始样本值
for _ in range(num_samples):
x_new = proposal_distribution(x, sigma) # 从建议分布中生成新样本
acceptance_ratio = target_distribution(x_new) / target_distribution(x)
if np.random.uniform() < acceptance_ratio:
x = x_new # 接受新样本
samples.append(x)
return samples
# 示例运行
num_samples = 10000 # 生成样本数量
sigma = 1 # 建议分布的标准差
samples = metropolis_hastings(num_samples, sigma)
```
这段代码实现了一个简单的MH算法,其中`target_distribution`函数定义了目标分布,`proposal_distribution`函数定义了建议分布,`metropolis_hastings`函数实现了MH算法的主要逻辑。在示例运行中,我们生成了10000个样本,并将其存储在`samples`列表中。
阅读全文