我需要以下對角線:如何在不考慮矩陣逆的情況下有效計算diag(X%*%solve(A)%*%t(X))?
diag(X %*% solve(A) %*% t(X))
其中A
是滿秩方陣,X
是一個長方形矩陣。 A
和X
都很稀疏。
我知道找到一個矩陣的逆是壞的,除非你真的需要它。然而,我看不出如何重寫公式,例如solve(A)
被solve
替換爲兩個參數,這樣線性系統就可以在不明確反轉的情況下求解。那可能嗎?
我需要以下對角線:如何在不考慮矩陣逆的情況下有效計算diag(X%*%solve(A)%*%t(X))?
diag(X %*% solve(A) %*% t(X))
其中A
是滿秩方陣,X
是一個長方形矩陣。 A
和X
都很稀疏。
我知道找到一個矩陣的逆是壞的,除非你真的需要它。然而,我看不出如何重寫公式,例如solve(A)
被solve
替換爲兩個參數,這樣線性系統就可以在不明確反轉的情況下求解。那可能嗎?
也許我真的開始之前,我需要一提的是,如果你這樣做
diag(X %*% solve(A, t(X)))
避免矩陣求逆。 solve(A, B)
執行LU分解並使用得到的三角矩陣因子來求解線性系統A x = B
。如果未指定B
,則默認爲對角矩陣,因此您將明確計算A
的矩陣求逆。
您應該仔細閱讀?solve
,並可能多次提示。它表示它基於LAPACK
例程DGESV
,在那裏你可以找到場景後面的數值線性代數。
DGESV computes the solution to a real system of linear equations
A * X = B,
where A is an N-by-N matrix and X and B are N-by-N RHS matrices.
The LU decomposition with partial pivoting and row interchanges is
used to factor A as
A = P * L * U,
where P is a permutation matrix, L is unit lower triangular, and U is
upper triangular. The factored form of A is then used to solve the
system of equations A * X = B.
solve(A, t(X))
和solve(A) %*% t(X)
之間的差異是效率的問題。後者的一般矩陣乘法%*%
比solve
本身昂貴得多。
但是,即使您使用的是solve(A, t(X))
,也不是最快的,因爲您有另一個%*%
。
此外,由於您只需要對角元素,因此在首次獲取完整矩陣時會浪費相當多的時間。 我在下面的答案會讓你走上最快的軌道。
我已經重寫了LaTeX中的所有內容,內容也大大擴展了,包括對R實現的引用。額外的資源在QR分解,奇異值分解和最終轉換Cholesky分解中給出,以防萬一您發現它們有用。
額外資源
如果你有興趣在轉動Choles ky分解,可以參考Compute projection/hat matrix via QR factorization, SVD (and Cholesky factorization?)。在那裏我還討論了QR分解和奇異值分解。
上述鏈接設置在普通最小二乘迴歸上下文中。對於加權最小二乘,您可以參考Get hat matrix from QR decomposition for weighted least square regression。
QR分解也採用緊湊的形式。如果您想了解QR分解如何完成和存儲的更多信息,請參閱What is "qraux" returned by QR decomposition。
這些問題和答案都集中在數值矩陣計算上。下面給出了一些統計應用:
@ZheyuanLi我會接受,但我從來沒有太早做 – Coolwater