2017-09-03 14 views
3

doit()の関数sympyは可能な限り、式を評価します。例えば:symPyでsymPyのdoit()関数を式の外側部分にのみ適用する

from sympy import * 
u = IndexedBase('u') 
i = symbols('i') 
test = Sum(u[i],(i,1,3)) 
test.doit() 

enter image description here

また戻ります:

from sympy import * 
u,x = symbols('u, x') 
test = Derivative(u,x) 
test.doit() 

はシンボリック差分を作成し、それを評価します。評価は、この場合にはゼロにすることが判明:私はSumの内部Derivativeを望んでいた

enter image description here

enter image description here

しかし、どのような場合には? doit()関数はステップを遠すぎます:

from sympy import * 
u = IndexedBase('u') 
x = IndexedBase('x') 
i = symbols('i') 
test = Sum(Derivative(u[i],x[i]),(i,1,3)) 
test.doit() 

これは再びゼロに戻ります。私は合計を拡大したいが、実際にはデリバティブを評価しない。

私は出力としてこれを取得できますか

enter image description here

を次のようにこれは、発現をもたらすでしょうか? doit()コマンドは外部機能(Sum())でのみ動作し、内部機能(Derivative())では動作しませんか?私はこれを間違っているのですか?

答えて

1

私はそれを行う方法を見つけました。

doit()コマンド引数を注意深く調べると、オプションdeep = Falseを設定すると、評価が式に深く入り込まないように見えます。さらに、いくつかの徴候は、これをより完全に制御することが可能であることを示している。コマンドドキュメントには次の情報が表示されます。

デフォルトで評価されないオブジェクト、つまり の積分、合計、積を評価します。 'hints' で除外された種もあれば、 'deep'ヒントが 'False'でない場合はとなります。この種のオブジェクトはすべて と評価されます。

私にとっては、「ヒント」がどのように活用できるか非常に興味があります。誰かが「ヒント」の仕組みがどのように優れているかについてのさらなる洞察を提供できる場合。ありがとう。