2016-12-27 3 views
3

は、なぜこのコードなぜ私のimplemented_function()はNameErrorになります:グローバル名 'Derivative'は定義されていませんか?

user_f = lambda a, b: a + b 
user_x = lambda u: 2 * u 

import sympy 
from sympy.abc import t 
from sympy.utilities.lambdify import implemented_function 
x = implemented_function(sympy.Function('x'), user_x) 
f = implemented_function(sympy.Function('f'), user_f) 
dx = sympy.diff(f(x(t), t), t, 1) 
print(dx) 
fl = sympy.lambdify((x(t), t), dx) 
print(fl(x(t), t)) 

は私に次の出力を与えるのでしょうか? (デリバティブを完全に評価するのに十分な情報はありませんか?)

このエラーを解決するにはどうすればよいですか?入力としてuser_fuser_xが与えられたとします。 sympy.lambdify()modules引数を提供

Derivative(x(t), t)*Subs(Derivative(f(_xi_1, t), _xi_1), (_xi_1,), (x(t),)) + Subs(Derivative(f(x(t), _xi_2), _xi_2), (_xi_2,), (t,)) 

Traceback (most recent call last): 
    File <path>, line 12, in <module> 
    print(fl(x(t), t)) 
    File "<string>", line 1, in <lambda> 
NameError: global name 'Derivative' is not defined 
+0

これは役立つかもしれない:https://github.com/sympy/sympy/issues/10250 – cdarke

+0

@cdarke:私は実際にそれを見ましたすでに、数値評価について話していますか?私はすべてのことを象徴的にやっているし、私はどんな方程式も解くつもりはない。 – Mehrdad

+0

'sympy.lambdify'の' modules'引数を使ってみましたか?:fl = sympy.lambdify((x(t)、t)、dx、modules = sympy) '? – Leon

答えて

2

は、問題を解消:

>>> fl = sympy.lambdify((x(t), t), dx, modules=sympy) 
>>> print(fl(x(t), t)) 
Derivative(x(t), t)*Subs(Derivative(_xi_1 + t, _xi_1), (_xi_1,), (x(t),)) + Subs(Derivative(_xi_2 + x(t), _xi_2), (_xi_2,), (t,)) 
関連する問題