如何在 R 代码中正确实现改进的 Gram-Schmidt 算法?

问题描述 投票:0回答:0

对于上下文,这是我试图在 R 中复制的算法:

这是我实现的代码。

X = matrix(c(1, 2, 0, 3, -1, 4), nrow = 3, ncol = 2, byrow = T)

txtMGS <- function(A){
  Q <- matrix(0, nrow = nrow(A), ncol = ncol(A))
  R <- matrix(0, nrow = ncol(A), ncol = ncol(A))
  for(i in 1:ncol(A)){
    v <- A[,i, drop = F]
  }
  for(i in 1:ncol(A)){
    R[i,i] <- sqrt(sum(v^2))
    Q[,i] <- v / R[i,i]
    for(j in i + 1:ncol(A)){
      R[i,j] <- sum(Q[,i] * v)
      v <- v - R[i, j] * Q[,i]
    }
  }
  QR <- list(Q = Q, R = R)
  
  return(QR)
}

txtMGS(X)

但是,我一直收到这个错误:

Error in `[<-`(`*tmp*`, i, j, value = sum(Q[, i] * v)) : 
  subscript out of bounds

有谁知道我该如何解决这个问题?提前谢谢你。

r math matrix rstudio linear-algebra
© www.soinside.com 2019 - 2024. All rights reserved.