2016-09-29 34 views
7

我想解決y =(x + 1)** 3 -2爲x在sympy找到它的反函數。
我嘗試使用solve,但我沒有得到我的預期。

這是我在IPython的控制檯CMD(關於Python 3.5.2 sympy 1.0)寫道:
如何解決sympy中的x =(x + 1)** 3 -2?

In [1]: from sympy import * 
In [2]: x, y = symbols('x y') 
In [3]: n = Eq(y,(x+1)**3 - 2) 
In [4]: solve(n,x) 
Out [4]: 
[-(-1/2 - sqrt(3)*I/2)*(-27*y/2 + sqrt((-27*y - 54)**2)/2 - 27)**(1/3)/3 - 1, 
-(-1/2 + sqrt(3)*I/2)*(-27*y/2 + sqrt((-27*y - 54)**2)/2 - 27)**(1/3)/3 - 1, 
-(-27*y/2 + sqrt((-27*y - 54)**2)/2 - 27)**(1/3)/3 - 1] 

我一直在尋找在Out [4]在列表的最後一個元素,但不等於X = (y + 2)**(1/3) - 1(我期待的)。
爲什麼sympy輸出錯誤的結果,
以及我能做些什麼來使sympy輸出我正在尋找的解決方案?

我試過使用solveset,但我得到了與使用solve相同的結果。

In [13]: solveset(n,x) 
Out[13]: {-(-1/2 - sqrt(3)*I/2)*(-27*y/2 + sqrt((-27*y - 54)**2)/2 - 27)**(1/3)/ 
3 - 1, -(-1/2 + sqrt(3)*I/2)*(-27*y/2 + sqrt((-27*y - 54)**2)/2 - 27)**(1/3)/3 - 
1, -(-27*y/2 + sqrt((-27*y - 54)**2)/2 - 27)**(1/3)/3 - 1} 

回答

3

如果聲明xy是積極的,那麼就只有一個解決方案:

import sympy as sy 
x, y = sy.symbols("x y", positive=True) 
n = sy.Eq(y, (x+1)**3 - 2) 
s = sy.solve(n, x) 
print(s) 

產生

[(y + 2)**(1/3) - 1] 
+0

這有效(聽起來很奇怪,但解決方案應該適用於所有實數),但是當我嘗試將其擴展到另一個多項式方程,如n = Eq(y,(x + 1) ** 5)',我得到一個空集。你知道我能做些什麼來獲得我期待的x = y **(1/5)-1嗎? (我可以在另一個問題中詢問這個問題,如果我應該這樣做)。 – DragonautX

+0

@DragonautX:對不起,我沒有很好的回答你的一般問題。 – unutbu

+0

沒關係。最後,我總是可以手工做,並從那裏開展工作,或者我可以嘗試其他工具。 – DragonautX

4

Sympy給你正確的結果:你最後的結果等同於(Y + 2)**(1/3) - 1.

什麼你要找的是simplify

>>> from sympy import symbols, Eq, solve, simplify 
>>> x, y = symbols("x y") 
>>> n = Eq(y, (x+1)**3 - 2) 
>>> s = solve(n, x) 
>>> simplify(s[2]) 
(y + 2)**(1/3) - 1 

編輯:使用sympy 0.7.6.1,更新到1.0後,它不再工作。

+1

你是如何能夠將式()分配到n沒有做' x,y =符號('x y')'?此外,我仍然無法獲得您獲得的簡化版本。我得到-2 **(2/3)*( - y + sqrt((y + 2)** 2)-2)**(1/3)/ 2-1。 – DragonautX

+0

忘了複製它,對不起。那麼,嘗試'在s:print(簡化(sol))中解決'';我相信這個訂單是隨機的。 – L3viathan

+2

我得到了與@DragonautX相同的結果。在python 3.5.2上使用sympy版本1.0 –

相關問題