【发布时间】:2021-03-30 16:27:33
【问题描述】:
我想模拟一些关于光子-光子-相互作用的主题。特别是,有 Halpern 散射。这是关于它的德语维基百科条目Halpern-Streuung。并且差分横截面具有(3 +(cos(theta))^ 2)^ 2的角度依赖性。
我想要一个 0 到 2*Pi 之间的随机数生成器,它对应于密度函数 ((3+(cos(theta))^2)^2)*(1/(99*Pi /4))。因此,0、Pi 和 2*Pi 周围的值应该比 Pi/2 和 3 周围的值更频繁地出现。
我已经发现有一个函数可以随机输出具有用户定义概率值的离散值numpy.random.choice(numpy.arange(1, 7), p=[0.1, 0.05, 0.05, 0.2, 0.4, 0.2])。如果没有其他情况,我可以在紧急情况下使用它。但实际上我在这里已经想要一个连续的概率分布。
我知道即使有这样一个 Python 命令可以输入数学分布函数,它基本上也只会产生离散的值分布,因为不能表示 1 和 0 的无理数。但是,如果使用连续函数,这样的命令会更优雅。
【问题讨论】:
-
如果你有 CDF 的逆,你可以在
[0,1)中提取一个随机数,并使用它来获取[0, 2pi)范围内的样本。更多信息here -
您可以通过扩展
scipy.stats.rv_continuous创建自定义分布,然后使用它来获取随机变量:docs.scipy.org/doc/scipy/reference/generated/… -
谢谢大家,我想我会看看逆变换采样的东西。函数 'scipy.stats.rv_continuous' 仅适用于某些概率分布。不是随意的,对吧?马尔可夫链蒙特卡罗采样也可能是某种东西。谢谢你。