2017-09-20 2 views
2

sympyのexpを嘆くには、sympy.Symbolで関数を評価しようとすると面白い問題に遭遇します。このnative sympy関数を使って式をlambdify

import sympy 

t = sympy.Symbol('t') 
f = sympy.lambdify(t, t**2) 
f(t) # no problem 

正常に動作しますが、この

t = sympy.Symbol('t') 
f = sympy.lambdify(t, sympy.exp(t)) 
f(t) 

が同じで、logsin(私が試した他のすべてのネイティブsympy機能のために行く

AttributeError: 'Symbol' object has no attribute 'exp' 

を与えます等。)。

何が起こっているのでしょうか?

f = sympy.lambdify(t, sympy.exp(t), modules=["sympy"]) 

答えて

1

あなたはlambdify機能のmodules引数で使用するモジュールを指定する必要があります。 これは、抽象的および遅いSymPy関数(sympy.expなど)を、数字用のより高速なもの(math.expまたはnumpy.expなど)に置き換えることによって実現されます。 これらは、(tのような)SymPyシンボルを引数として扱うことができません。これはとにかくlambdifyが意図されていません。

あなたは追加の引数としてdummify=Falselambdifyを呼び出す場合f(t)を呼び出すとき、あなたはすなわち、より意味のあるエラーが発生します。

TypeError: can't convert expression to float 

ここでは変換できない表現があなたの引数tです。

何らかの理由で記号を引数として使用して暗黙の関数を使用する場合は、追加の引数としてmodules=["sympy"]lambdifyに渡す必要があります。 この引数は、lambdifyがsymPy関数(sympy.expなど)を置き換えるために使用するモジュールを指定します - この場合はsympyです。実際には何も起こりません。

1

lambdifyの主な用途は、式の高速な数値評価を可能にすることである。

関連する問題