2013-10-29 63 views
2

我試圖用sympy來求解一個多項式方程,其係數有不確定性。所以對於不確定性我試圖使用不確定性模塊。有沒有這樣做的任何方式如下:結合Sympy和不確定性

x=ufloat(10,0.2) #the xs are coefficients 
x1=ufloat(8,0.01) 
x3=ufloat(25,2) 
L=Symbol("L") 
eqn=(x*(L**2))+(x1*(L*1))+(x3*(L**0)) 
solve(eqn,L) #ideally this should give the value of L with it's propagated uncertainty 

沒有它引發錯誤:

TypeError: unsupported operand type(s) for *: 'Variable' and 'Pow' 
+0

你是不是想要不使用'x1'和'x3'? – asmeurer

回答

1

一個解決方案是使用Symbol('x'),然後用它替換您的ufloat(你可能會需要使用lambdify來做到這一點)。假設SymPy能夠用符號係數求解一般形式的方程,這應該起作用。由於這只是一個二次方,它會。對於一個立方體也是如此,但對於高階多項式,你運氣不好。我還假設ufloat插入二次方程時會做正確的事情。

喜歡的東西

x, x1, x3 = symbols('x x1 x3') 
L=Symbol("L") 
eqn=(x*(L**2))+(x1*(L*1))+(x3*(L**0)) 
s = solve(eqn,L) 
lambdify([x, x1, x3], s)(ufloat(10,0.2), ufloat(8,0.01), ufloat(25,2)) 

(注意有兩種解決方案,二次,所以這會給兩者)。

+0

除了https://code.google.com/p/sympy/issues/detail?id=4003外,四分法也應該有效。 – asmeurer

+2

我一直在嘗試這個沒有運氣。你可能會更明確嗎?我沒有lamdify的經驗,閱讀文檔不是很有啓發性。 – user2151741

+0

查看編輯答案。 – asmeurer

1

有基於不確定性Python包和sympy該做的:maabara

它仍處於測試階段,但看到上面

的聯繫例子here


更新已經無效了。您可以在github上找到該軟件包。 這是User Guide