Search code examples
sympycomplex-numbersrational-number

sympy solve() and complex rational numbers


The following code:

from sympy import *

a, b = symbols("a b")
eqs = [ a + b - 3j, a - b - 2 ]
print(solve(eqs, [a, b]))

prints:

{a: 1.0 + 1.5*I, b: -1.0 + 1.5*I}

I'd like the results to be returned as complex rational numbers not floating point numbers, e.g.:

{a: 1 + 3/2*I, b: -1 + 3/2*I }

Is there a way to do that?


Solution

  • a + 3j becomse a + 3.0*I when parsed by SymPy; to keep it Rational, use SymPy's I:

    >>> from sympy import I
    >>> eqs = [ a + b - 3*I, a - b - 2 ]
    >>> solve(eqs, [a, b])
    {a: 1 + 3*I/2, b: -1 + 3*I/2}