簡體   English   中英

R 逆導數

[英]R Derivatives of an Inverse

我有一個包含幾個部分的表達式。 但是,為簡單起見,僅將以下部分視為 MWE:

假設我們有一個矩陣Y的逆矩陣,我想要區分 w.r.t。 x

YI - (x * b * t(b))的形式給出,其中I是單位矩陣, x是標量, b是向量。

根據Matrix Cookbook Equ。 59,逆的偏導數是: 在此處輸入圖像描述

通常我會使用 package stats中的 function D來計算導數。 但在這種情況下這是不可能的,因為例如solveY指定為逆,並且t()不在導數表中。

規避此問題的最佳解決方法是什么? 是否有任何其他推薦的軟件包可以處理此類輸入?

不起作用的示例:

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

有效的例子:

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

我假設問題是如何獲得 Y 的倒數關於 x 的導數的顯式表達式。 在第一部分我們計算它,在第二部分我們通過數值計算來仔細檢查它,並表明這兩種方法給出了相同的結果。

b 和 b 的 null 空間都是 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM