使用SymPy定义U01 PDF后无法获取正确CDF,求解决方法
解决SymPy中U01矩形函数CDF积分问题
- 问题根源:用
sign()组合定义的PDF,SymPy在积分时无法自动识别分段边界的逻辑,导致积分结果不符合预期。正确的做法是直接用分段函数定义U01的概率密度函数(PDF)。 - 实现代码:
from sympy import symbols, Piecewise, integrate, simplify # 定义符号变量 x = symbols('x') # 正确定义U01的PDF:分段函数 u01_pdf = Piecewise( (0, x < 0), (1, (x >= 0) & (x <= 1)), (0, x > 1) ) # 计算CDF并化简 u01_cdf = integrate(u01_pdf, x) u01_cdf_simplified = simplify(u01_cdf) print("U01的CDF:") print(u01_cdf_simplified)
- 输出结果:
Piecewise((0, x < 0), (x, x <= 1), (1, True))
这个结果就是U01分布的正确CDF:x<0时0,0≤x≤1时x,x>1时1。
如果偏好用阶跃函数组合定义,也可以用SymPy的Heaviside函数实现,同样能得到正确的积分结果:
from sympy import Heaviside # 用Heaviside函数定义U01 PDF u01_pdf_heaviside = Heaviside(x) - Heaviside(x - 1) u01_cdf_heaviside = integrate(u01_pdf_heaviside, x) print(simplify(u01_cdf_heaviside))
内容的提问来源于stack exchange,提问作者Severin Pappadeux
相关产品推荐
相关产品推荐

