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