Hankel函数的二阶导数uning sympy

时间:2016-01-29 13:14:07

标签: python sympy symbolic-math derivative bessel-functions

我想用Simpy绘制Hankel函数的二阶导数。在Mathematica中,它就像:

一样简单
D[HankelH2[1,z],z]

这可以通过使用属性

进行分析

The first derivative of the Hankel function of the second kind and first order is equal to the difference between two Hankel functions of the second kind of order zero and two, respectively, all these divided by two.

但我想学习如何使用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(最近一次调用   最后)in()         1导入同情为sp         2 x = sp.Symbol(' x')   ----> 3 dh2 = sp.diff(lambda x:hankel2(1,x),x)

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

     

/usr/lib/python2.7/dist-packages/sympy/core/function.pyc in   (cls,expr,*变量,**假设)       985 def new (cls,expr,*变量,**假设):       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 = locals,transformations = transformations,evaluate = evaluate)       314除了(TokenError,SyntaxError)为exc:    - > 315引发SympifyError('无法解析%r'%a,exc)       316       317 return expr

     

SympifyError:表达式的Sympify'无法解析u'在0x7fdf3eca9e60>''失败,因为例外   raise:SyntaxError:语法无效(,第1行)

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

您无法在SymPy中使用SciPy功能。 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 with

将其转换为数字函数
l = lambdify(x, diff(hankel2(1, x), x), {'hankel2': scipy.special.hankel2})

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