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

如何用SymPy符号化表示随机变量的随机和并计算期望与方差?

在SymPy中构造复合随机变量并计算期望与方差

核心思路

SymPy目前没有直接创建这类复合随机变量($Y = \sum_{i=1}^{N} X_i$,其中$N$是离散随机变量,$X_i$独立同分布于$X$)的内置函数,但可以利用复合分布的经典公式,结合SymPy的符号计算能力验证手动结果:

  • 期望公式:$E[Y] = E[N] \cdot E[X]$
  • 方差公式:$\text{Var}(Y) = E[N] \cdot \text{Var}(X) + (E[X])^2 \cdot \text{Var}(N)$

代码实现步骤

1. 导入库并定义随机变量

注意:SymPy的Geometric分布默认建模"首次成功前的失败次数"(取值0,1,2,...),如果你的$N$是"首次成功的试验次数"(取值1,2,...),需要指定succ=1参数:

from sympy import stats, S, simplify, Sum, symbols

# 定义随机变量:N为几何分布,X为标准正态分布
N = stats.Geometric(name='N', p=S.One/2, succ=1)  # succ=1让N从1开始取值
X = stats.Normal(name='X', mu=0, sigma=1)

2. 计算单个变量的期望与方差

# 计算各基础变量的期望和方差
E_N = stats.E(N)
Var_N = stats.variance(N)
E_X = stats.E(X)
Var_X = stats.variance(X)

print(f"E(N): {E_N}")
print(f"Var(N): {Var_N}")
print(f"E(X): {E_X}")
print(f"Var(X): {Var_X}")

3. 用复合分布公式计算Y的期望与方差

# 代入公式计算复合变量Y的期望和方差
E_Y = E_N * E_X
Var_Y = E_N * Var_X + (E_X)**2 * Var_N

print(f"\nE(Y): {simplify(E_Y)}")
print(f"Var(Y): {simplify(Var_Y)}")

4. 用符号求和验证期望(可选)

通过离散分布的期望定义直接求和,验证公式结果:

k = symbols('k', integer=True, positive=True)
p = S.One/2
# 对应succ=1时N=k的概率:P(N=k) = p*(1-p)^(k-1)
prob_N_k = p * (1 - p)**(k - 1)
# 计算E[Y] = sum_{k=1}^∞ E[Y|N=k] * P(N=k) = sum_{k=1}^∞ k*E[X]*P(N=k)
E_Y_sum = simplify(Sum(k * E_X * prob_N_k, (k, 1, S.Infinity)))

print(f"\nE(Y) 符号求和验证: {E_Y_sum}")

结果说明

对于示例中的参数:

  • $N$是succ=1的几何分布($p=1/2$),$E[N]=2$,$\text{Var}(N)=2$
  • $X$是标准正态分布,$E[X]=0$,$\text{Var}(X)=1$
  • 代入公式得$E(Y)=0$,$\text{Var}(Y)=21 + 0^22=2$,和符号求和结果完全一致。

内容的提问来源于stack exchange,提问作者Josh Hernandez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:01:06