我想使用Luce's axiom來計算二元決策的概率。相似性函數使用指數如下定義;Luce規則的python sympy
sA = b+exp(-|x-xA|)
sB = b+exp(-|x-xB|)
pA = 1/(1+(sB/sA))
爲了獲得損失,我們需要將pA和1-pA整合到x的各自範圍內。
loss = integrate(pA, (x,0,0.5)) + integrate(1-pA, (x,0.5,1))
當使用sympy寫入我得到的損耗當b = 0(0.5075),但以下錯誤當b> 0;
加註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()
作爲一個說明工作部分需要幾分鐘的時間來計算,有沒有什麼辦法來加快步伐?
我會感謝任何幫助/建議。
感謝
編輯:編輯代碼
數值積分解決方案對我來說非常合適,謝謝! (我編輯了我的帖子來糾正錯字) –
是的,調用'integrate'並沒有意義,然後立即調用輸出中的'evalf'。 'integration'將嘗試尋找一個封閉的符號解決方案,但是'evalf'只會將其轉換爲數字形式。所以你可以從一開始就從數字上整合。另一種方式的唯一優點是,在某些情況下,數值計算封閉式解決方案比計算積分數值更快。 – asmeurer