在sage中,对未知函数进行泰勒扩展相当容易 f(x),
x = var('x')
h = var('h')
f = function('f',x)
g1 = taylor(f,x,h,2)
如何在同情中做到这一点?
更新
asmeurer指出,这是一项功能,很快就可以通过拉取请求http://github.com/sympy/sympy/pull/1888来提供。我使用pip安装了分支,
pip install -e git+git@github.com:renatocoutinho/sympy.git@897b#egg=sympy --upgrade
但是,当我尝试计算 f(x)系列时,
x, h = symbols("x,h")
f = Function("f")
series(f,x,x+h)
我收到以下错误,
TypeError:必须使用f实例调用未绑定方法series() 第一个参数(改为使用符号实例)
答案 0 :(得分:11)
正如@asmeurer所描述的,现在可以使用
from sympy import init_printing, symbols, Function
init_printing()
x, h = symbols("x,h")
f = Function("f")
pprint(f(x).series(x, x0=h, n=3))
或
from sympy import series
pprint(series(f(x), x, x0=h, n=3))
都返回
⎛ 2 ⎞│
2 ⎜ d ⎟│
(-h + x) ⋅⎜────(f(ξ₁))⎟│
⎜ 2 ⎟│
⎛ d ⎞│ ⎝dξ₁ ⎠│ξ₁=h ⎛ 3 ⎞
f(h) + (-h + x)⋅⎜───(f(ξ₁))⎟│ + ──────────────────────────── + O⎝(-h + x) ; x → h⎠
⎝dξ₁ ⎠│ξ₁=h 2
如果你想要有限差分近似,你可以写例如
FW = f(x+h).series(x+h, x0=x0, n=3)
FW = FW.subs(x-x0,0)
pprint(FW)
获得前向近似值,返回
⎛ 2 ⎞│
2 ⎜ d ⎟│
h ⋅⎜────(f(ξ₁))⎟│
⎜ 2 ⎟│
⎛ d ⎞│ ⎝dξ₁ ⎠│ξ₁=x₀ ⎛ 3 2 2 3 ⎞
f(x₀) + h⋅⎜───(f(ξ₁))⎟│ + ────────────────────── + O⎝h + h ⋅x + h⋅x + x ; (h, x) → (0, 0)⎠
⎝dξ₁ ⎠│ξ₁=x₀ 2
答案 1 :(得分:7)
在同情中没有这方面的功能,但是“手工”这样做很容易:
In [3]: from sympy import *
x, h = symbols('x, h')
f = Function('f')
sum(h**i/factorial(i) * f(x).diff(x, i) for i in range(4))
Out[3]: h**3*Derivative(f(x), x, x, x)/6 + h**2*Derivative(f(x), x, x)/2 + h*Derivative(f(x), x) + f(x)
请注意,sympy通常适用于表达式(如f(x)
),而不适用于裸函数(如f
)。