2016-04-11 58 views
2

我正在嘗試使用sympy查找兩個術語的LCM。我使用的代碼是:sympy.lcm沒有正確地擴展術語

import sympy 
s=sympy.Symbol("s") 
A=(s+0.0004)*(s+0.02) 
B=(s+0.02) 
sympy.lcm(A,B) 

返回

1.0*s**2 + 0.0204*s + 7.99999999999992e-6 

然而,通過檢查LCM應

1.0*s**2 + 0.0204*s + 8.0e-6 

我怎樣才能獲得sympy.lcm計算準確解?

謝謝。

回答

3

這裏的問題是,0.02和0.004沒有一個有限的精確表示形式作爲浮點數,所以即使在開始之前您仍然有四捨五入的問題。

A = (s + sympy.Rational(4, 1000))*(s + sympy.Rational(2, 100)) 
B = (s + sympy.Rational(2, 100)) 
sympy.lcm(A, B).expand() 

現在這給出了一個確切的結果:

s**2 + 3*s/125 + 1/12500 
您可以準確使用 sympy.Rational,使其保持這些號碼