【发布时间】:2014-02-16 15:38:41
【问题描述】:
我想使用Luce's axiom 计算二元决策的概率。相似度函数使用指数定义如下;
sA = b+exp(-|x-xA|)
sB = b+exp(-|x-xB|)
pA = 1/(1+(sB/sA))
为了得到损失,我们需要在各自的范围内对 pA 和 1-pA over x 进行积分。
loss = integrate(pA, (x,0,0.5)) + integrate(1-pA, (x,0.5,1))
当使用 sympy 编写时,当 b=0 (0.5075) 时我得到了损失,但是当 b>0 时出现以下错误;
raise PolynomialDivisionFailed(f, g, K) sympy.polys.polyerrors.PolynomialDivisionFailed:在除法时无法减少多项式>除法算法中的度数 [-0.426881219248826*_z + 0.0106631460069606] 由 [_z - 0.0249791874803424]。这可能 > 在无法解决时发生 系数域中的 tect 零。计算域是 RR(_z)。零检测 > 在这个系数中得到保证 nt 域。这可能表明 SymPy 中存在错误,或者域是用户定义的并且没有>正确实施零检测。
我不确定这个错误是什么意思。
python代码是(错误不依赖于具体的xA和xB);
from sympy import *
var('x')
xA = 0.8
xB = 0.9
#this works
b = 0
sA = b+exp(-abs(x-xA))
sB = b+exp(-abs(x-xB))
pA = 1/(1+(sB/sA))
print pA
loss = integrate(pA, (x,0,0.5)) + integrate(1-pA, (x,0.5,1))
print loss.evalf()
#this doesn't
b = 1
sA = b+exp(-abs(x-xA))
sB = b+exp(-abs(x-xB))
pA = 1/(1+(sB/sA))
print pA
loss = integrate(pA, (x,0,0.5)) + integrate(1-pA, (x,0.5,1)) #fails here
print loss.evalf()
请注意,计算工作部分需要几分钟,有什么方法可以加快速度吗?
如果有任何帮助/建议,我将不胜感激。
谢谢
编辑:编辑代码中的错字
【问题讨论】:
标签: python integration sympy