Sage计算联合CDF及其导数耗时过长的优化求助
Sage计算联合CDF及其导数耗时过长的优化求助
各位好,我最近在用Sage计算联合累积分布函数(CDF)和它的导数时遇到了效率问题,想请大家帮忙出出主意优化代码:
我有两个独立的[0,1]均匀随机变量U和V,需要计算的联合CDF是:F(x, y) = Pr[(2/3)U - 2/3 <= x, (2/3)V - 2/3 <= y]
以及它对x的偏导数。我写了下面这段代码来实现,但已经跑了10多分钟还没输出结果:
from sage.all import * var('u v x y') ineq1 = heaviside(x + QQ(2)/3 - QQ(2)/3 * u) ineq2 = heaviside(y + QQ(2)/3 - QQ(2)/3 * v ) indicator = ineq1 * ineq2 cdf = integrate(integrate(indicator, v, 0, 1), u, 0, 1) diff(cdf, x)
但奇怪的是,当我换成另一种线性组合的联合CDF计算时——比如计算Pr[(2/3)U + (1/3)V - 2/3 <= x, (1/3)U + (2/3)V - 2/3 <= y]——用几乎相同结构的代码却能在1秒内得到结果:
from sage.all import * var('u v x y') ineq1 = heaviside(x + QQ(2)/3 - QQ(2)/3 * u - QQ(1)/3 * v) ineq2 = heaviside(y + QQ(2)/3 - QQ(1)/3 * u - QQ(2)/3 * v ) indicator = ineq1 * ineq2 cdf = integrate(integrate(indicator, v, 0, 1), u, 0, 1) diff(cdf, x)
我实在搞不懂为什么第一段代码会这么慢,有没有什么办法能优化它,提升计算速度呢?
内容来源于stack exchange
相关产品推荐
相关产品推荐

