2

我在 sympy 网站上找到了 lambdify 的文档:http: //docs.sympy.org/dev/modules/utilities/lambdify.html

尝试使用复数的示例似乎分崩离析:

SympyExpression = sympy.parsing.sympy_parser.parse_expr('0.2*exp(1.6*I*pi*x)*log(x - 1.5)')
print "\nSympyExpression.subs(sympy.Symbol('x'), 0.0):"
print SympyExpression.subs(sympy.Symbol('x'), 0.0)

PythonFunction = sympy.lambdify((sympy.Symbol('x')), SympyExpression, "numpy")
print "\nPythonFunction(0.0):"
print PythonFunction(0.0)

>>>> SympyExpression.subs(sympy.Symbol('x'), 0.0):
>>>> 0.0810930216216329 + 0.2*I*pi

>>>> PythonFunction(0.0):
>>>> /usr/lib/python2.7/dist-packages/numpy/__init__.py:1: RuntimeWarning: invalid value encountered in log
>>>>   """
>>>> (nan+nan*j)

我做了什么愚蠢的事情还是这是一个错误?

4

1 回答 1

3

NumPy 的 log 函数需要复杂的 dtype 用于负实数值,否则它返回 nan。从文档中:

对于实值输入数据类型,log 始终返回实数输出。对于每个不能表示为实数或无穷大的值,它会产生 nan 并设置无效浮点错误标志。

要得到你想要的,要么传入一个 numpy 数组dtype=complex,要么传入0j,即显式complex键入的 0。对于其他实值,例如传入,1.0+0j而不是1.0.

In [36]: lambdify(x, 0.2*exp(1.6*I*pi*x)*log(x - 1.5), 'numpy')(0.0j)
Out[36]: (0.081093021621632885+0.62831853071795862j)
于 2016-06-02T22:23:57.630 回答