2017-08-05 334 views
2

於是我開始與方程的平等和一小部分,我用它來解決x和y:sympy solveset返回FiniteSet在一種情況下,但在另一種情況下,補

mrs = y/x 
ratio = 2/5 
x = sympy.solveset(sympy.Eq(mrs, ratio), x) 
y = sympy.solveset(sympy.Eq(mrs, ratio), y) 

到底,解決y的回報:

{2*x/5} 

這是一個FiniteSet

但求解X的回報:

{5*y/2} \ {0} 

這是一個補

我不知道爲什麼求解一個變量求解時,對其他沒有做同樣給了我FiniteSet?另外,是否有辦法解決其他變量,以獲得有限集而不是補充?

回答

1

作爲一個結果你期望什麼?你能用手解決這個問題並寫出預期的解決方案嗎?你爲什麼要用FiniteSet作爲解決方案?

由於x=0需要排除,我自己不能拿出比sympy更好的符號。

當您繼續使用解決方案時,sympy可以輕鬆使用FiniteSet和Complement。在數學上,這些不是完全不同的結構。不同之處在於sympy需要在內部表示這些解決方案,並且不能對所有內容使用相同的構造,而是使用小型構建塊來創建解決方案。你用type(x)得到的結果是使用的最後一個積木。

編輯:這裏的一些數學:x=0沒有解決方程y/x=2/5任何y。所以這必須從解決方案集中排除。

如果您解決了y,那麼x=0已被排除,因爲y/0沒有很好地定義。

如果您解決了y,那麼y=0是先驗可能的,因爲0/x=0x!=0。因此sympy需要手動排除x=0,它通過從解決方案集中刪除0來完成。

現在,由於我們知道x=0永遠不可能是方程的解,所以我們可以在嘗試求解方程之前排除它。因此我們做

x = sympy.symbols('x', real=True, nonzero=True) 

在示例的開始(在定義mrs之前)。其餘的可以保持不變。

+0

所以我真的希望得到一個Finiteset,因爲我知道如何訪問我得到的答案,以便我可以將它們替換回另一個方程。當我在紙上做這個問題時,我只是交叉乘法,所以我可以找到x和y。這意味着我期待的只是{5 * y/2}而不是補集sympy給我的。 – CcruzRamos

+0

真的嗎?我確實得到了不同的東西。 {5 * y/2}包括y = 0,因此x = 0。但計算mrs = y/x = 0/0的定義並不明確(特別是不是2/5),所以y = 0,x = 0不是一個有效的解決方案。 – Hannebambel

+0

更改x的參數有竅門!非常感謝,隊友! – CcruzRamos

相關問題