有人能帮我加速r中的Woodbury矩阵求逆代码吗?

有人能帮我加速r中的Woodbury矩阵求逆代码吗?,r,matrix,invert,R,Matrix,Invert,我有反大型矩阵的代码,并在R中找到对数行列式。我真的希望这段代码运行得更快,但我正在为更多的想法而奋斗。我使用了Cholesky分解,并删除了内存中不需要的变量 请有人能帮助改进此代码吗 Woodbury_det1 <- function(A,B,C){ Ua2 <- chol(A) # A=t(U)xU, take U from this Ub2 <- chol(B) A_inv <- chol2inv(Ua2)# A^-1 B_inv <- chol2inv(U

我有反大型矩阵的代码,并在R中找到对数行列式。我真的希望这段代码运行得更快,但我正在为更多的想法而奋斗。我使用了Cholesky分解,并删除了内存中不需要的变量

请有人能帮助改进此代码吗

Woodbury_det1 <- function(A,B,C){
Ua2 <- chol(A) # A=t(U)xU, take U from this
Ub2 <- chol(B)
A_inv <- chol2inv(Ua2)# A^-1
B_inv <- chol2inv(Ub2) # B^-1
Ua2 <- chol(A_inv) # A^-1=U^tU
UC <- Ua2 %*% C # UxC
CA <- crossprod(UC,Ua2) # t(UxC)xU = t(C)xt(U)xU = t(C)xA^-1
BpCAC <- B_inv + crossprod(UC) # C^TxA^-1xC
BpCAC_ch = chol(BpCAC)
BpCAC_inv <- chol2inv(BpCAC_ch) # (B^-1 + t(C)xAxC)^-1
logdetA <- -2*sum(log(diag(Ua2)))
logdetB <- -2*sum(log(diag(Ub2)))
logdetbr <- 2*sum(log(diag(BpCAC_ch)))
logdetin <- logdetbr+logdetB+logdetA # final determinant calculation
V <- chol(BpCAC_inv)
VCA <- V %*% CA
ACYCA <- crossprod(VCA)
ACYCA <- as(ACYCA, "dspMatrix")
X <-  A_inv- ACYCA
list(X,logdetin)}

Woodbury_det1取出
rm
gc
语句-函数中不需要这些语句,并且肯定会减慢它的速度(除非您非常缺乏内存)。是的,我忘了提到我在代码中注释了这些语句。如果您正在使用它,可能值得通过Rstudio中的配置文件运行代码,因为这通常可以确定在哪里花费的时间最多。