我想用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(最近一次调用 最后)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行)
任何线索我的错误在哪里?
提前致谢。
答案 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
现在处理得很好,所以你可能更喜欢这个选项)。