Python 汉克尔函数的二阶导数

Python 汉克尔函数的二阶导数,python,sympy,symbolic-math,derivative,bessel-functions,Python,Sympy,Symbolic Math,Derivative,Bessel Functions,我想用Simpy绘制Hankel函数的二阶导数。在这种情况下,很容易做到: 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回溯(最近的调用

我想用Simpy绘制Hankel函数的二阶导数。在这种情况下,很容易做到:

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回溯(最近的调用 最后)在() 1作为sp导入Symphy 2 x=sp.Symbol('x') ---->3 dh2=sp.diff(λx:hankel2(1,x),x)

/usr/lib/python2.7/dist-packages/sympy/core/function.pyc中的diff(f, *符号,**kwargs)1639”“”1640 kwargs.setdefault('evaluate',True) ->1641返回导数(f,*符号,**kwargs)1642 1643

/中的usr/lib/python2.7/dist-packages/sympy/core/function.pyc 新的(cls、expr、*变量、**假设) 985 def新的(cls、expr、*变量、**假设): 986 -->987 expr=同情(expr) 988 989#没有变量,我们区分所有自由符号

/sympify中的usr/lib/python2.7/dist-packages/sympy/core/sympify.pyc(a, 局部变量,转换(异或,严格,有理,求值) 313 expr=parse_expr(a,local_dict=locals,transformations=transformations,evaluate=evaluate) 314作为exc的(令牌错误、语法错误)除外: -->315 raise SYMBIFYERROR('无法分析%r'%a,exc) 316 317返回表达式

SympifyError:表达式“无法在0x7fdf3eca9e60>处分析u”的Sympify失败,原因是正在处理异常 引发:语法错误:无效语法(,第1行)

知道我的错在哪里吗


提前感谢。

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

您需要做的是从Symphy导入
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 with将其转换为数值函数

l = lambdify(x, diff(hankel2(1, x), x), {'hankel2': scipy.special.hankel2})
并将其与绘图库一起使用,如
maptlotlib
(看起来hankel2是一个复杂的函数,我认为Symphy的
plot
现在处理得不太好,因此您可能更喜欢此选项)