2017-02-08 8 views
1

sympys diff를 사용하여 x에 f (y (x)) w.r.t의 더 높은 파생어를 계산하려고합니다.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를 이해하지 못합니다.

답변

0

버그를 발견 한 것처럼 보입니다. 어느 것이 was just fixed a few weeks ago입니다.

당신은 (코드에 추가)는 각각 어떤 기능이나 값 f, yx을 대체하여이를 테스트 할 수 있습니다

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 단순히 분명히 잘못이의 요인은, 추가합니다.