不能用衍生物表达同情表达

时间:2018-03-24 12:28:37

标签: python sympy

我不能lambdify包含衍生物的表达式。以下是解释问题的最低代码:

import sympy
x = sympy.symbols('x', real=True)
a = sympy.Function('a')(x)
b = a**2
r = sympy.diff(b, x)
sympy.lambdify((a), b)  # works
r.evalf(subs={diff(a, x): 1, a: 2})  # works 
b_x = sympy.lambdify((diff(a, x), a), r)  # throws an error

最后一行代码会引发以下错误:

Traceback (most recent call last):   File "C:\Anaconda2\lib\site-packages\IPython\core\interactiveshell.py", line 2882, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)   File "<ipython-input-29-a0069a059795>", line 2, in <module>
    gx = sympy.lambdify((diff(a, x), a), r)  # gives an error   File "C:\Anaconda2\lib\site-packages\sympy\utilities\lambdify.py", line 434, in lambdify
    func = eval(lstr, namespace)   File "<string>", line 1
    lambda Derivative(a(x), x),_Dummy_29: (2*Derivative(_Dummy_29, x)*_Dummy_29)
                     ^ SyntaxError: invalid syntax

1 个答案:

答案 0 :(得分:4)

lambdify尝试用数字等价物替换符号函数 返回一个可以接受数值或数组并返回数字或数组的函数。

错误消息

lambda Derivative(a(x), x),_Dummy_29: (2*Derivative(_Dummy_29, x)*_Dummy_29)
                     ^ SyntaxError: invalid syntax

表明lambdify正在尝试构建一个lambda函数,其第一个参数是Derivative(a(x), x)。显然,这不起作用。我们需要一个裸变量名而不是符号表达式Derivative(a(x), x)

因此,请使用空符号Derivative(a(x), x)替换da

import sympy
x = sympy.symbols('x', real=True)
a = sympy.Function('a')(x)
b = a**2
r = sympy.diff(b, x)
da = sympy.symbols('da')
b_x = sympy.lambdify((da, a), r.subs([(sympy.diff(a, x), da)]))
assert b_x(1, 2) == r.evalf(subs={sympy.diff(a, x): 1, a: 2})
# 4