2016-11-18 144 views
3

如何对SymPy中的函数符号执行泰勒展开?SymPy Taylor扩展功能符号

例如

from sympy import * 
ode = f(x).diff(x, 2) - sin(f(x)) 

我们想通过做这样

ode.series(f, 0, 1) 

的东西来获得类似

f(x).diff(x, 2) - f(x) 

来线性微分方程,但我想不出它了解如何在SymPy中执行此操作。在千里马,我可以这样定义

depends(y, x); 
ode: diff(y, x, 2) - sin(y); 
taylor(ode, y, 0, 8); 

的依赖,它会导致

'diff(y,x,2) - y + y^3/6 - y^5/120 + y^7/5040 + ... 

这可能是线性化非线性微分方程或微扰理论中非常有用。

回答

2

您可以暂时用y等符号代替f(x),对该符号进行扩展,然后替换回来。这里是一个自包含例如:

from sympy import * 
var('x y') 
f = Function('f') 
ode = f(x).diff(x, 2) - sin(f(x)) 
ode_linear = series(ode.subs(f(x), y), y, 0, 2).removeO().subs(y, f(x)) 
ode_cubic = series(ode.subs(f(x), y), y, 0, 4).removeO().subs(y, f(x)) 

结果,ode_linear-f(x) + Derivative(f(x), x, x)ode_cubicf(x)**3/6 - f(x) + Derivative(f(x), x, x)