【问题标题】:R Derivatives of an InverseR 逆导数
【发布时间】:2021-03-27 04:22:09
【问题描述】:

我有一个包含几个部分的表达式。但是,为简单起见,仅将以下部分视为 MWE:

假设我们有一个矩阵Y 的逆矩阵,我想将它与 w.r.t 区分开来。 x.

YI - (x * b * t(b)) 形式给出,其中I 是单位矩阵,x 是标量,b 是向量。

根据The Matrix Cookbook Equ. 59,逆的偏导数是:

通常我会使用stats 包中的函数D 来计算导数。但在这种情况下这是不可能的,因为例如solve 指定 Y 为逆,t() 不在导数表中。

规避此问题的最佳解决方法是什么?有没有其他推荐的包可以处理这样的输入?

不起作用的示例:

f0 <- expression(solve(I - (x * b %*% t(b))))
D(f0, "x")

有效的例子:

f0 <- expression(x^3)
D(f0, "x")
3 * x^2

【问题讨论】:

    标签: r derivative


    【解决方案1】:

    我假设问题是如何获得 Y 的倒数关于 x 的导数的显式表达式。在第一部分我们计算它,在第二部分我们通过数值计算来仔细检查它,并表明这两种方法给出了相同的结果。

    b 和 b 的零空间都是 Y 的特征空间,我们可以很容易地通过注意 Yb = (1-(b'b)x)b 来验证,如果 z 属于 b 的零空间,则 Yz = z。这也表明对应的特征值是 1 - x(b'b),重数为 1 和 1,重数为 n-1(因为 b 的零空间具有该维度)。

    由于我们可以将这样的矩阵扩展为每个特征值的总和乘以在其特征空间上的投影,我们可以将 Y 表示为以下,其中 bb'/b'b 是在跨越的特征空间上的投影b 和预乘它的部分是特征值。其余项不涉及 x,因为它们涉及独立于 x 的特征值 1,并且 b 的零空间也独立于 x。

    Y = (1-x(b'b))(bb')/(b'b) + terms not involving x
    

    Y 的倒数是通过取特征值的倒数来形成的:

    Yinv = 1/(1-x(b'b)) * (bb')/(b'b) + terms not involving x
    

    那个 wrt x 的导数是:

    (b'b) / (1 - x(b'b))^2 * (bb')/(b'b)
    

    取消b'b并用R代码编写导数:

    1/(1 - x*sum(b*b))^2*outer(b, b)
    

    双重检查

    使用 b 和 x 的特定值,我们可以根据数值导数对其进行验证,如下所示:

    library(numDeriv)
    
    x <- 1
    b <- 1:3
    
    # Y inverse as a function of x
    Yinv <- function(x) solve(diag(3) - x * outer(b, b))
    
    all.equal(matrix(jacobian(Yinv, x = 1), 3), 
              1/(1 - x*sum(b*b))^2*outer(b, b))
    ## [1] TRUE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2012-08-13
      • 1970-01-01
      • 2018-03-23
      相关资源
      最近更新 更多