2017-02-08 7 views
1

私は、sympys diffを使ってf(y(x))w.r.tをxに高次の導関数を計算しようとしています。sympysのdoit()はデリバティブで何をしますか?

from sympy import * 
from IPython.display import display 
init_printing(use_latex=True) 

x = symbols('x') 
f, y = symbols('f, y', cls=Function) 

d2 = diff(f(y(x)),x,2) 
print(d2) 
print(d2.doit()) 

Sympyを返し:

Derivative(y(x), x)**2*Derivative(f(y(x)), y(x), y(x)) + Derivative(y(x), x, x)*Subs(Derivative(f(_xi_1), _xi_1), (_xi_1,), (y(x),)) 

Derivative(f(y(x)), y(x))*Derivative(y(x), x, x) + 2*Derivative(y(x), x)**2*Derivative(f(y(x)), y(x), y(x)) 

ラテックス画像を:Sympy result

最初の結果は正しいと思われますが、doit()操作後の2番目の式の第2因子はわかりません。

答えて

0

あなたはバグに遭遇したようです。それはwas just fixed a few weeks agoです。

あなたは(あなたのコードに追加)、それぞれいくつかの機能または値でfy、およびxを代入することで、これをテストすることができます。

f_ex = Lambda(x, x**2) 
y_ex = Lambda(x, sin(x)) 
x_ex = 2 

substitutions = [ (f,f_ex), (y,y_ex), (x,x_ex) ] 

print(d2.subs(substitutions).doit().n())  #-1.30728724172722 
print(d2.doit().subs(substitutions).doit().n()) #-0.960930862590836 

印刷の値が同じでなければなりません。

問題がにさらに単離することができます:ここで

print((Derivative(f(y(x)), x, x))) 
print((Derivative(f(y(x)), y(x), y(x))).doit()) 

、平野doitは単に、明らかに間違っている2の要因は、追加されます。

関連する問題