簡體   English   中英

為什么 cholesky 分解沒有給我與簡單地反轉矩陣相同的結果?

[英]Why is cholesky decomposition not giving me the same result as simply inverting the matrix?

設置重現我的最小工作示例

我有以下矩陣

K <- matrix(c(1.250000e+00, 3.366892e-07, 4.641930e-10, 1.455736e-08, 1.049863e-06, 
              3.366892e-07, 1.250000e+00, 5.482775e-01, 8.606555e-01, 9.776887e-01,
              4.641930e-10, 5.482775e-01, 1.250000e+00, 8.603413e-01, 4.246732e-01,
              1.455736e-08, 8.606555e-01, 8.603413e-01, 1.250000e+00, 7.490100e-01,
              1.049863e-06, 9.776887e-01, 4.246732e-01, 7.490100e-01, 1.250000e+00), nrow=5)

和以下向量

y <- matrix(c(39.13892, 12.34428, 12.38426, 14.71951, 10.52160), nrow=5)

問題

我想計算K的倒數和向量y之間的乘積。

天真的方法 - 它有效

天真的方法有效(我有一種檢查方法,但在這里無關緊要)

solve(K) %*% y
           [,1]
[1,] 31.3111308
[2,]  3.0620869
[3,]  3.7383357
[4,]  6.6257060
[5,]  0.7820081

Cholesky 分解 - 失敗

然而,“聰明”的方法失敗了。 我使用 cholesky 分解,它給了我一個上三角矩陣。 然后我通過后向替換求解系統L z = y通過前向替換求解系統L^T x = L^{-1} y

L <- chol(K)  ## upper triangular
forwardsolve(t(L), backsolve(L, y))
          [,1]
[1,]  31.31112
[2,] -14.16259
[3,]   9.84534
[4,]  39.67900
[5,]  33.54842

怎么了? 這個矩陣K和這個向量 'y' 只是一個例子。 它發生在許多其他類似的向量和矩陣中。 為什么?

關鍵在於,在取乘積的倒數時,必須反轉倒數的乘積:

solve(A %*% B) = solve(B) %*% solve(A)

在問題中,順序沒有顛倒。

如果R = chol(K)其中我們使用R來強調它是右上三角形,那么:

solve(K, y)
= solve(t(R) %*% R, y)   since K = t(R) %*% R
= solve(t(R) %*% R) %*% y
= solve(R) %*% solve(t(R)) %*% y  note that we have reversed the order
= solve(R) %*% solve(t(R), y)
= backsolve(R, forwardsolve(t(R), y))

在最后一行中,我們使用了這樣一個事實,即 R 的轉置是左下三角矩陣,而forwardsolve適用於此類矩陣,而backsolve適用於右上三角矩陣。

我們可以檢查這是否與使用solve direclty 給出了相同的答案:

R = chol(K)
all.equal(backsolve(R, forwardsolve(t(R), y)), solve(K, y))
# [1] TRUE

這只是部分答案,但總比沒有好。 基本上找到 K^{-1}y 相當於解決以下系統

系統

使用我們有的 cholesky 分解來寫這個

喬爾斯基

基本上我們現在首先考慮Lz是我們的變量,稱之為x

代換

因為L是上三角,所以它的轉置是下三角,所以我們可以使用forwardsolve來找到x

forwardsolve(t(L), y)

一旦我們找到x ,我們就可以記住它的含義,即

最終系統

這樣我們就可以使用 'backsolve to find z`

backsolve(L, forwardsolve(t(L), y))

這給出了正確的答案。 不知道為什么反過來也行不通。

暫無
暫無

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

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