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

Coo*_*ter 5 algorithm r matrix matrix-inverse

我需要以下对角线:

diag(X %*% solve(A) %*% t(X))
Run Code Online (Sandbox Code Playgroud)

其中A是满秩矩阵,X是矩形矩阵.这两个AX稀疏.

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

李哲源*_*李哲源 10

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

diag(X %*% solve(A, t(X)))
Run Code Online (Sandbox Code Playgroud)

避免了矩阵逆.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.
Run Code Online (Sandbox Code Playgroud)

solve(A, t(X))和之间的区别solve(A) %*% t(X)是效率问题.%*%后者的一般矩阵乘法比solve它本身贵得多.

然而,即使你使用solve(A, t(X)),你也不是最快的轨道,因为你有另一个%*%.

此外,由于您只需要对角元素,因此在首次获得完整矩阵时会浪费大量时间.我在下面的回答将让你走上最快的轨道.

我在LaTeX中重写了所有内容,内容也大大扩展,包括对R实现的引用.如果您发现它们有用,最后会给出QR分解,奇异值分解和Pivoted Cholesky分解的额外资源.


概观

CHOL

鲁


额外资源

如果您对旋转Cholesky分解感兴趣,可以参考通过QR分解,SVD(和Cholesky分解?)计算投影/帽子矩阵.在那里我还讨论了QR分解和奇异值分解.

上述链接在普通最小二乘回归上下文中设置.对于加权最小二乘,您可以参考从QR分解得到的帽子矩阵,用于加权最小二乘回归.

QR分解也采用紧凑的形式.如果您想了解有关QR分解如何完成和存储的更多信息,您可以参考QR分解返回的什么是"qraux".

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


归档时间:

查看次数:

664 次

最近记录:

9 年,2 月 前