我的目标是使用 sympy 编写多维泰勒近似,其中

  • 使用尽可能多的内置代码,
  • 计算两个变量的给定函数的截断泰勒近似值
  • 返回没有 Big-O-remainder 项的结果,例如在 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)
    

    但是,如果我知道在 xy 中进行链式调用,则 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/

    10-12 21:54