You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:42:12