我正在使用 Choleski 分解来计算半正定矩阵的逆矩阵。但是,当我的矩阵变得非常大并且其中有零时,我的矩阵不再(从计算机的角度来看)是正定的。因此,为了解决这个问题,我使用pivot = TRUE
了 .choleski 命令中的选项R
。但是,(正如您将在下面看到的)两者返回相同的输出,但行和列或矩阵重新排列。我试图弄清楚是否有办法(或转换)使它们相同。这是我的代码:
X = matrix(rnorm(9),nrow=3)
A = X%*%t(X)
inv1 = function(A){
Q = chol(A)
L = t(Q)
inverse = solve(Q)%*%solve(L)
return(inverse)
}
inv2 = function(A){
Q = chol(A,pivot=TRUE)
L = t(Q)
inverse = solve(Q)%*%solve(L)
return(inverse)
}
运行时会导致:
> inv1(A)
[,1] [,2] [,3]
[1,] 9.956119 -8.187262 -4.320911
[2,] -8.187262 7.469862 3.756087
[3,] -4.320911 3.756087 3.813175
>
> inv2(A)
[,1] [,2] [,3]
[1,] 7.469862 3.756087 -8.187262
[2,] 3.756087 3.813175 -4.320911
[3,] -8.187262 -4.320911 9.956119
有没有办法让两个答案匹配?我想inv2()
从返回答案inv1()
。