SymPy泰勒功能符号扩展

时间:2016-11-18 23:07:30

标签: sympy symbolic-math maxima taylor-series

如何在SymPy中对函数符号执行泰勒扩展?

例如

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中做到这一点。在Maxima中,我可以定义一个像

这样的依赖项
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 + ...

这对线性化非线性微分方程或扰动理论非常有用。

1 个答案:

答案 0 :(得分:2)

您可以暂时用f(x)之类的符号替换y,对该符号执行扩展,然后替换回来。这是一个独立的例子:

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)