如何有效地计算诊断(X%*%求解(A)%*%t(X))而不采用矩阵逆?

时间:2016-09-16 14:18:15

标签: r algorithm matrix matrix-inverse

我需要以下对角线:

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

其中A是满秩矩阵,X是矩形矩阵。 AX都很稀疏。

我知道发现矩阵的逆是坏的,除非你真的需要它。但是,我无法看到如何重写公式,使solve(A)solve替换为两个参数,这样线性系统就可以在没有显式反转的情况下得到解决。这可能吗?

1 个答案:

答案 0 :(得分:8)

也许在我真正开始之前,我需要提一下,如果你这样做

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分解,奇异值分解和Pivoted Cholesky分解,最后会给出额外的资源。

overview

chol

lu

额外资源

如果您对旋转Cholesky分解感兴趣,可以参考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

这些问题和答案都集中在数值矩阵计算上。以下给出了一些统计应用: