我的目标是使用 sympy
编写多维泰勒近似,其中
sin(x)=x - x**3/6 + O(x**4)
中。 这是我到目前为止尝试过的:
方法 1
天真地,一个人可以为每个变量组合两次
series
命令,不幸的是这不起作用,正如这个例子显示的函数 sin(x*cos(y))
:sp.sin(x*sp.cos(y)).series(x,x0=0,n=3).series(y,x0=0,n=3)
>>> NotImplementedError: not sure of order of O(y**3) + O(x**3)
方法 2
基于 this post 我首先写了一个一维泰勒近似:
def taylor_approximation(expr, x, max_order):
taylor_series = expr.series(x=x, n=None)
return sum([next(taylor_series) for i in range(max_order)])
用一维示例检查它工作正常
mport sympy as sp
x=sp.Symbol('x')
y=sp.Symbol('y')
taylor_approximation(sp.sin(x*sp.cos(y)),x,3)
>>> x**5*cos(y)**5/120 - x**3*cos(y)**3/6 + x*cos(y)
但是,如果我知道在
x
和 y
中进行链式调用,则 sympy 挂断# this does not work
taylor_approximation(taylor_approximation(sp.sin(x*sp.cos(y)),x,3),y,3)
有人知道如何解决这个问题或以其他方式实现它吗?
最佳答案
您可以使用expr.removeO()
从表达式中删除大O。
Oneliner:expr.series(x, 0, 3).removeO().series(y, 0, 3).removeO()
关于python - sympy 中的多元泰勒近似,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22857162/