代码之家  ›  专栏  ›  技术社区  ›  tholy

极大值中抽象导数表达式的简化

  •  3
  • tholy  · 技术社区  · 8 年前

    我想得到 maxima 为了执行一些“抽象”的泰勒级数展开,我遇到了一个简化问题。问题的原型可能是梯度的有限差分模拟,

    g(x1,dx1) := (f(x1+dx1) - f(x1))/dx1;  /* dx1 is small */
    taylor(g(x1,dx1), [dx1], [0], 0);
    

    为此 极大值 收益率

    enter image description here

    到现在为止,一直都还不错。但现在试试二阶导数的有限差分模拟(Hessian)。

    h(x1,dx1) := (f(x1+dx1) - 2*f(x1) + f(x1-dx1))/dx1^2;
    taylor(h(x1,dx1), dx1, 0, 0);
    

    为此我得到了

    enter image description here

    这几乎没有帮助。

    我要解决的“真实”问题的原型是计算有限差分近似的低阶误差 ∂^2 f/(∂x1 ∂x2) ,

    (f(x1+dx1, x2+dx2) - f(x1+dx1, x2) - f(x1, x2+dx2) + f(x1, x2))/(dx1*dx2)
    

    并收集二阶以下的术语(包括 f )如果没有合理有效的简化,我想用手工做比用计算机代数更容易,所以我想知道怎样才能哄 极大值 为我做简化。

    1 回复  |  直到 8 年前
        1
  •  1
  •   slitvinov    8 年前

    考虑这个例子。它用巴顿威利斯的 pdiff 包裹。我 简化符号:移动中心到 [0, 0] 并介绍 偏导数符号。

    (%i1) load("pdiff") $
    (%i2) matchdeclare([n, m], integerp) $
    (%i3) tellsimpafter(f(0, 0), 'f00) $
    (%i4) tellsimpafter(pderivop(f,n,m)(0,0), concat('f, n, m)) $
    (%i5) e: (f(dx, dy) - f(dx, -dy) - f(-dx, dy) + f(-dx, -dy))/(4*dx*dy)$
    (%i6) taylor(e, [dx, dy], [0, 0], 3);
                                        2         2
                                  f31 dx  + f13 dy
    (%o6)/T/                f11 + ----------------- + . . .
                                          6
    
    推荐文章