汉克尔函数的二阶导数解唱符号



我想用 Simpy 绘制汉克尔函数的二阶导数。在 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(最近一次调用) 最后) 在 () 中 1 个导入符号作为 SP 2 x = sp。符号("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, *符号, **kwargs) 1642 1643

/

usr/lib/python2.7/dist-packages/sympy/core/function.pyc in new(CLS, EXPR, *变量, **假设) 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, 本地人,convert_xor,严格,理性,评价) 313 expr = parse_expr(a, local_dict=局部变量, 转换=转换, 评估=评估) 314 除了 (TokenError, SyntaxError) 作为 exc: --> 315 提高 SympifyError('无法解析 %r' % a, exc) 316 317 返回 expr

SympifyError:表达式"无法解析 u' at 0x7fdf3eca9e60>"的 Sympify 失败,因为异常是 已提出:语法错误:语法无效(,第 1 行)

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

提前谢谢。

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

你需要做的是从SymPy导入hankel2,然后使用它。

>>> 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现在处理得不是很好,所以你可能更喜欢这个选项)。

相关内容

  • 没有找到相关文章

最新更新