arney
arney

Reputation: 845

Complex numbers: convert SymPy to numeric (I to 1j)

using symbolic calculation in Python I have

import sympy
from cmath import *
from mpmath import arg, cplot

z = sympy.symbols('z')

fhandle='z**2'
g = lambda w: sympy.sympify(fhandle).evalf(subs={z: w})
g(1+2j)

# Returns: -3.0 + 4.0*I
# hence the next command fails, because I is expected to be 1j

cplot(g, [-3,3], [-3,3])

Crawling the web I only found this which will fix the matter for the print command, but will not work with cplot.

Any suggestions?

Upvotes: 1

Views: 2881

Answers (1)

DSM
DSM

Reputation: 352959

One option is to wrap the result by calling complex:

>>> def g(w):
...     return complex(sympy.sympify(fhandle).evalf(subs={z: w}))
... 
>>> g(1+2j)
(-3+4j)

After which mpmath.cplot(g, [-3, 3], [-3, 3]) produces

cplot example

Note that I've used a named function here. There's not much point to using a lambda if you're going to immediately give it a name anyhow.

Upvotes: 6

Related Questions