在Python中可视化正弦分布随机变量:生成抽样直方图
生成0.5sin(t)分布的随机抽样并绘制直方图
1. 用逆变换法生成随机样本
要得到符合f(t)=0.5sin(t)(t∈[0,π])分布的随机样本,最直接的方法是用逆变换法:
- 先计算该分布的累积分布函数(CDF):
F(t) = ∫₀ᵗ 0.5sin(x)dx = 0.5(1 - cos(t)) - 求CDF的逆函数:令
u = 0.5(1 - cos(t)),解得t = arccos(1 - 2u),其中u是0到1之间的均匀分布随机数
2. 完整代码实现(含PDF与直方图同图绘制)
假设你用Python的numpy和matplotlib实现,以下是整合后的代码:
import numpy as np import matplotlib.pyplot as plt # 生成10^4个目标分布的随机样本 np.random.seed(42) # 设置随机种子,结果可复现 u_samples = np.random.uniform(0, 1, size=10**4) target_samples = np.arccos(1 - 2 * u_samples) # 绘制PDF曲线 t_range = np.linspace(0, np.pi, 1000) pdf_curve = 0.5 * np.sin(t_range) # 创建画布并绘图 plt.figure(figsize=(10, 6)) # 绘制直方图,density=True让直方图高度与PDF匹配(面积归一为1) plt.hist(target_samples, bins=50, density=True, alpha=0.6, label='10^4个随机样本直方图') # 绘制PDF曲线 plt.plot(t_range, pdf_curve, 'r-', linewidth=2, label='PDF: 0.5sin(t)') # 图表样式设置 plt.xlabel('t') plt.ylabel('概率密度') plt.title('0.5sin(t)分布的PDF与随机抽样直方图') plt.xlim(0, np.pi) plt.legend() plt.grid(alpha=0.3) plt.show()
3. 关键细节说明
- 逆变换的正确性:代入均匀分布随机数到逆函数,生成的样本完全符合给定的概率密度分布
- 直方图与PDF匹配:
density=True参数会把直方图的总面积归一为1,和PDF的积分(总概率)一致,两者可以直接对比 - 可视化优化:设置
alpha让直方图和曲线的重叠部分更清晰,添加网格和图例提升可读性
内容的提问来源于stack exchange,提问作者WatT
相关产品推荐
相关产品推荐

