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

2019-08-13 22:42发布

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?

1条回答
Luminary・发光体
2楼-- · 2019-08-13 23:18

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.

查看更多
登录 后发表回答