Python 同理,为什么两个随机变量的求和会产生难以捉摸的结果?
考虑到SymPy中2个高斯变量的总和:Python 同理,为什么两个随机变量的求和会产生难以捉摸的结果?,python,statistics,sympy,Python,Statistics,Sympy,考虑到SymPy中2个高斯变量的总和: from sympy import * from sympy.stats import * init_printing() a = Normal('a', 0, Symbol('P', real=true)) b = Normal('b', 0, Symbol('Q', real=true)) ss = a + b pprint(simplify(density(ss))) 我希望结果是一个具有更多方差的高斯分布的PDF。相反,结果如下所示:
from sympy import *
from sympy.stats import *
init_printing()
a = Normal('a', 0, Symbol('P', real=true))
b = Normal('b', 0, Symbol('Q', real=true))
ss = a + b
pprint(simplify(density(ss)))
我希望结果是一个具有更多方差的高斯分布的PDF。相反,结果如下所示:
⎧ ⎛ 2 2
⎪ ⎜ z ⋅P
⎪ ⎜ ───────────────
⎪ ⎜ ⎛ 2 ⎞
⎪ ⎜ 4 ⎜ P 1⎟
⎪ ⎜ 4⋅Q ⋅⎜──── + ─⎟
⎪ ⎜ ⎜ 2 2⎟ 2
⎪ ⎜ ⎝2⋅Q ⎠ ⎛ z⋅P ⎞ z
⎪ ⎜ z⋅π⋅P⋅ℯ ⋅erf⎜─────────────────────⎟ ───────
⎪ ⎜ ⎜ __________⎟ ⎛
⎪ ⎜ ⎜ ╱ 2 ⎟ 4 ⎜
⎪ ⎜ ⎜ 2 ╱ P 1 ⎟ 4⋅Q ⋅⎜─
⎪ ⎜ ⎜2⋅Q ⋅ ╱ ──── + ─ ⎟ ⎜
⎪ ⎜ ⎜ ╱ 2 2 ⎟ ⎝2
⎪ ⎜ ⎝ ╲╱ 2⋅Q ⎠ z⋅π⋅P⋅ℯ
⎪ Q⋅⎜- ───────────────────────────────────────────────── - ──────────────
⎪ ⎜ __________ ___
⎪ ⎜ ╱ 2 ╱
⎪ ⎜ 2 ╱ P 1 2 ╱ P
z ↦ ⎨ ⎜ 2⋅Q ⋅ ╱ ──── + ─ 2⋅Q ⋅ ╱ ──
⎪ ⎜ ╱ 2 2 ╱
⎪ ⎝ ╲╱ 2⋅Q ╲╱ 2⋅
⎪- ───────────────────────────────────────────────────────────────────────
⎪ 3/2
⎪ 2⋅z⋅π ⋅P
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎩
... (426 lines in total)
⎞ ⎞
⎛ 1 ⎞│ π⎟ │ ⎛ 1 ⎞│ π⎟
t⎜──────────────, ∞⎟│ < ─⎟ ∨ │periodic_argument⎜──────────────, ∞⎟│ < ─⎟
⎜ 2 ⎟│ 2⎟ │ ⎜ 2 ⎟│ 2⎟
⎝polar_lift (P) ⎠│ ⎠ │ ⎝polar_lift (P) ⎠│ ⎠
⎧ ⎛ 2 2
⎪ ⎜ Z⋅P
⎪ ⎜ ───────────────
⎪ ⎜ ⎛ 2.⎞
⎪ ⎜ 4.⎜ P1⎟
⎪ ⎜ 4.⋅Q⋅⎜──── + ─⎟
⎪ ⎜ ⎜ 2 2⎟ 2.
⎪ ⎜ ⎝2.⋅Q⎠ ⎛ Z⋅P⎞ Z
⎪ ⎜ Z⋅π⋅P⋅ℯ ⋅erf⎜─────────────────────⎟ ───────
⎪ ⎜ ⎜ __________⎟ ⎛
⎪ ⎜ ⎜ ╱ 2.⎟ 4.⎜
⎪ ⎜ ⎜ 2.╱ P1⎟ 4.⋅Q⋅⎜─
⎪ ⎜ ⎜2.⋅Q⋅ ╱ ──── + ─ ⎟ ⎜
⎪ ⎜ ⎜ ╱ 2 2 ⎟ ⎝2.
⎪ ⎜ ⎝ ╲╱ 2.⋅Q⎠ Z⋅π⋅P⋅ℯ
⎪ Q⋅⎜- ───────────────────────────────────────────────── - ──────────────
⎪ ⎜ __________ ___
⎪ ⎜ ╱ 2.╱
⎪ ⎜ 2.╱ 第12页╱ P
Z↦ ⎨ ⎜ 2.⋅Q⋅ ╱ ──── + ─ 2.⋅Q⋅ ╱ ──
⎪ ⎜ ╱ 2 2 ╱
⎪ ⎝ ╲╱ 2.⋅Q╲╱ 2.⋅
⎪- ───────────────────────────────────────────────────────────────────────
⎪ 3/2
⎪ 2.⋅Z⋅π ⋅P
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎩
... (共426行)
⎞ ⎞
⎛ 1.⎞│ π⎟ │ ⎛ 1.⎞│ π⎟
T⎜──────────────, ∞⎟│ < ─⎟ ∨ │周期自变量⎜──────────────, ∞⎟│ < ─⎟
⎜ 2.⎟│ 2.⎟ │ ⎜ 2.⎟│ 2.⎟
⎝极轴升力(P)⎠│ ⎠ │ ⎝极轴升力(P)⎠│ ⎠
为什么SymPy给出了这样一个奇怪的结果?我应该怎么做才能得到简洁的形式?将第二个参数(标准偏差,“sigma”)声明为正:
a = Normal('a', 0, Symbol('P', positive=True))
b = Normal('b', 0, Symbol('Q', positive=True))
那么结果正如预期的那样:
2
-z
───────────
2 2
2⋅P + 2⋅Q
√2⋅ℯ
z ↦ ─────────────────
_________
╱ 2 2
2⋅√π⋅╲╱ P + Q
在引擎盖下,SymPy使用Meijer G函数计算一个不恰当的积分,这涉及到将计算提升到某个黎曼曲面,而p或Q为负数可能导致另一个分支;因此,答案很复杂。从数学上讲,这对计算应该没有多大影响,因为sigma是指数的平方;但这关系到算法的成功
如果SymPy只知道独立法线是如何被添加的,那么所有这些都是没有意义的,但事实并非如此;所有这些计算都是通过直接积分完成的,这通常会扩大已实现积分方法的限制
备注:
true
(Symphy truth对象),但符号创建方法需要Python的true
与Symphy.stats import*
中的合并,因为这会导致命名冲突:E
是Symphy中的Euler数,是Symphy.stats中预期值的表示法李>
谢谢!这是一个很大的疏忽。