如何在同意的情况下解决y =(x + 1)**3 -2?

Dra*_*utX 8 python sympy

我想,解决y = (x+1)**3 - 2x在sympy找到它的反函数.
我尝试过使用solve,但是没有得到我的预期.

这是我在cmd中的IPython控制台中编写的内容(Python 3.5.2上的sympy 1.0):

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]
Run Code Online (Sandbox Code Playgroud)

我正在查看列表中的最后一个元素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}
Run Code Online (Sandbox Code Playgroud)

L3v*_*han 5

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
Run Code Online (Sandbox Code Playgroud)

编辑:使用 sympy 0.7.6.1,更新到 1.0 后不再工作。

  • @DragonautX 我刚刚更新到 sympy 1.0,它不再工作了。我会尝试一些事情.. (3认同)
  • 我得到与@DragonautX 相同的结果。在 python 3.5.2 上使用 sympy 版本 1.0 (2认同)

unu*_*tbu 4

如果你声明x并且y是肯定的,那么只有一种解决方案:

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)
Run Code Online (Sandbox Code Playgroud)

产量

[(y + 2)**(1/3) - 1]
Run Code Online (Sandbox Code Playgroud)