3

我想使用 Simpy 绘制 Hankel 函数的二阶导数。在Mathematica中,它很简单:

D[HankelH2[1,z],z]

这可以通过使用属性进行分析,

二阶和一阶汉克尔函数的一阶导数分别等于二阶零阶和二阶的两个汉克尔函数之差,所有这些都除以二。

但我想学习如何使用 Sympy 直接推导它。到目前为止,我已经尝试过:

from scipy.special import hankel2
import sympy as sp
x = sp.Symbol('x')
dh2 = sp.diff(lambda x: hankel2(1,x),x)

错误消息对我来说似乎难以辨认:

SympifyError Traceback (last last call last) in () 1 import sympy as sp 2 x = sp.Symbol('x') ----> 3 dh2 = sp.diff(lambda x: hankel2(1,x),x )

/usr/lib/python2.7/dist-packages/sympy/core/function.pyc in diff(f, *symbols, **kwargs) 1639 """ 1640 kwargs.setdefault('evaluate', True) -> 1641返回导数(f, *symbols, **kwargs) 1642 1643

/usr/lib/python2.7/dist-packages/sympy/core/function.pyc in new (cls, expr, *variables, **assumptions) 985 def new (cls, expr, *variables, **assumptions): 986 --> 987 expr = sympify(expr) 988 989 # 没有变量,我们区分所有的自由符号

/usr/lib/python2.7/dist-packages/sympy/core/sympify.pyc in sympify(a, locals, convert_xor, strict,rational, evaluate) 313 expr = parse_expr(a, local_dict=locals, transformations=transformations, evaluate=evaluate) 314 except (TokenError, SyntaxError) as exc: --> 315 raise SympifyError('could not parse %r' % a, exc) 316 317 return expr

SympifyError: Sympify of expression 'could not parse u' at 0x7fdf3eca9e60>'' 失败,因为引发了异常:SyntaxError: invalid syntax (, line 1)

任何线索我的错误在哪里?

提前致谢。

4

1 回答 1

3

您不能将 SciPy 函数与 SymPy 一起使用。SciPy 函数是数字函数,而 SymPy 仅适用于符号函数(即 SymPy 本身内部的函数)。将其包装在 alambda中不会改变这一点。

您需要做的是hankel2从 SymPy 导入并使用它。

>>> from sympy import hankel2, symbols, diff
>>> x = symbols('x')
>>> diff(hankel2(1, x), x)
hankel2(0, x)/2 - hankel2(2, x)/2

如果你想绘制这个,你可以使用这个sympy.plot函数。或者,您可以使用 scipy 将其转换为数值函数

l = lambdify(x, diff(hankel2(1, x), x), {'hankel2': scipy.special.hankel2})

并将其与类似的绘图库一起使用maptlotlib(看起来 hankel2 是一个复杂的函数,我认为 SymPy 现在不能plot很好地处理它,所以你可能更喜欢这个选项)。

于 2016-01-29T21:00:58.690 回答