Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I solve y = (x+1)**3 -2 for x in sympy?

Tags:

python

sympy

I'd like to solve y = (x+1)**3 - 2 for x in sympy to find its inverse function.
I tried using solve, but I didn't get what I expected.

Here's what I wrote in IPython console in cmd (sympy 1.0 on Python 3.5.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]

I was looking at the last element in the list in Out [4], but it doesn't equal x = (y+2)**(1/3) - 1 (which I was expecting).
Why did sympy output the wrong result, and what can I do to make sympy output the solution I was looking for?

I tried using solveset, but I got the same results as using 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}
like image 509
DragonautX Avatar asked Sep 29 '16 00:09

DragonautX


People also ask

How do you solve equations with SymPy?

With the help of sympy. solve(expression) method, we can solve the mathematical equations easily and it will return the roots of the equation that is provided as parameter using sympy. solve() method. Return : Return the roots of the equation.

How do you evaluate a function in a SymPy?

To evaluate a numerical expression into a floating point number, use evalf . SymPy can evaluate floating point expressions to arbitrary precision. By default, 15 digits of precision are used, but you can pass any number as the argument to evalf .

How do you write an ex in SymPy?

Note that by default in SymPy the base of the natural logarithm is E (capital E ). That is, exp(x) is the same as E**x .


1 Answers

Sympy gave you the correct result: your last result is equivalent to (y+2)**(1/3) - 1.

What you're looking for is 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

edit: Worked with sympy 0.7.6.1, after updating to 1.0 it doesn't work anymore.

like image 199
L3viathan Avatar answered Oct 05 '22 15:10

L3viathan