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

如何用Sympy验证独立泊松随机变量平方和平方的期望?

解决Sympy中独立泊松变量和的期望计算问题

问题出在你创建随机变量的方式:Poisson("x_i", mu)里的"x_i"是固定字符串,Sympy不会把字符串里的符号i解析成循环变量,所以所有求和项都被当成同一个随机变量,展开后自然得到n²·x_i⁴。

要正确生成n个独立的泊松随机变量,有两种可行方法:

方法一:使用IndexedBase创建随机变量序列

利用sympy.stats的IndexedBase和PoissonRV来定义独立的随机变量序列,这样每个x[i]都是独立的泊松变量:

import sympy as sy
from sympy.stats import PoissonRV, E, IndexedBase

# 定义符号
n = sy.Symbol("n", integer=True, positive=True)
mu = sy.Symbol("mu", positive=True)
i = sy.Symbol("i", integer=True)

# 创建独立的泊松随机变量序列
x = IndexedBase("x")
x_i = PoissonRV(x[i], mu)  # 每个x[i]都是参数为mu的独立泊松变量

# 构造y并计算期望
sum_x2 = sy.Sum(x_i**2, (i, 0, n-1))
y = sum_x2**2
E_y = E(y).simplify()

# 手动展开理论表达式对比
E_x2 = E(x_i**2)
E_x4 = E(x_i**4)
theoretical_Ey = n * E_x4 + n*(n-1) * E_x2**2

# 验证是否相等
print(sy.simplify(E_y - theoretical_Ey) == 0)  # 输出True,说明结论正确

方法二:通过循环生成独立随机变量

如果更直观,也可以用循环逐个生成独立的随机变量,再求和:

import sympy as sy
from sympy.stats import Poisson, E

n = sy.Symbol("n", integer=True, positive=True)
mu = sy.Symbol("mu", positive=True)

# 生成n个独立的泊松随机变量
x_list = [Poisson(f"x_{k}", mu) for k in range(n)]

# 构造y并计算期望
sum_x2 = sum([x**2 for x in x_list])
y = sum_x2**2
E_y = E(y).simplify()

# 理论表达式
E_x2 = E(x_list[0]**2)
E_x4 = E(x_list[0]**4)
theoretical_Ey = n * E_x4 + n*(n-1) * E_x2**2

print(sy.simplify(E_y - theoretical_Ey) == 0)  # 输出True

两种方法都能正确识别每个x_i是独立变量,展开平方和后会得到交叉项,计算期望时利用独立变量的协方差为0,最终结果和理论公式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:03:26