2016-09-16 22 views
3

我需要以下對角線:如何在不考慮矩陣逆的情況下有效計算diag(X%*%solve(A)%*%t(X))?

diag(X %*% solve(A) %*% t(X)) 

其中A是滿秩方陣,X是一個長方形矩陣。 AX都很稀疏。

我知道找到一個矩陣的逆是壞的,除非你真的需要它。然而,我看不出如何重寫公式,例如solve(A)solve替換爲兩個參數,這樣線性系統就可以在不明確反轉的情況下求解。那可能嗎?

+0

@ZheyuanLi我會接受,但我從來沒有太早做 – Coolwater

回答

7

也許我真的開始之前,我需要一提的是,如果你這樣做

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分解中給出,以防萬一您發現它們有用。


overview

chol

lu


額外資源

如果你有興趣在轉動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

這些問題和答案都集中在數值矩陣計算上。下面給出了一些統計應用: