2013-12-10 75 views
3

我正在嘗試解決任意方程式的大型系統(對於使用普通數學寫成的物理組件模型的流程流程圖應用程序)。sympy求解器中的浮點數和整數

在處理非整數時,我對sympy的solve_poly_system函數的行爲感到困惑,並且無法通過文檔找出它。這個簡單的代碼片段:

sympy.solve_poly_system([x-5,y-x]) 

給我[[(5,5)]如我所料。當我改變的數量卻一個浮動:

sympy.solve_poly_system([x-5.1,y-x]) 

我得到的錯誤: 提高DomainError(「不能計算Groebner基超過%的」%opt.domain) sympy.polys.polyerrors。 DomainError:無法計算RR上的Groebner基礎

該文檔提到sympy更喜歡使用自己的變量類型,因此我嘗試使用'sympify'將輸入函數轉換爲sympy更加可口的東西,但沒有運氣。有關如何解決這個問題的任何建議?我只是使用錯誤的工具?

注:顯然這是一個微不足道的例子,我只是試圖說明我已經提煉出的基本問題。

我使用python 2.7在Windows 7

+0

非''int'在數學上是否相關,即它們可能嗎?對我來說,一個'DomainError'意味着某些東西超出了可能的數學領域。 – SethMMorton

回答

2

嘗試使用SymPy 0.7.4(剛剛發佈了前幾天)。這現在起作用。

In [37]: solve_poly_system([x-5,y-x]) 
Out[37]: [(5, 5)] 

In [38]: solve_poly_system([x-5.1,y-x]) 
Out[38]: [(5.1, 5.1)] 

要從問題澄清一些困惑:

  • 這是事實,SymPy使用自己的類型,但在大多數情況下,你永遠不要需要擔心對這個。當您評估x - 5.1時,將在x5.1(a Symbol)上調用__sub__方法,該方法使用sympify立即將5.1轉換爲Float(5.1)。您唯一需要擔心的是當您進行操作時,兩個操作數都不是SymPy類型,並且SymPy行爲與內置行爲不同時(例如,您不必擔心1 - 4sympify(1) - sympify(4))。唯一的例子是int/int,比如1/4。 Python將對0(或Python 3中的0.25)進行評估,而SymPy會將其評估爲Rational(1, 4)。因此,在這種情況下,您需要sympify其中一個參數來獲得理性,如S(1)/4Ssympify的簡寫)。

  • 的DomainError事情是參照由解算器所用多項式的內部表示。它從未打算被用戶看到(這是一個錯誤)。特別是,這個錯誤與某些算法沒有用於浮點數(與有理數相對)有關。

如果仍然看到有更多的平凡的例子錯誤,請報告它作爲SymPy issue tracker的錯誤。

+0

很好,謝謝! – ericksonla