使用Gram-Schmidtand方法编写QR分解的R码时出现两个错误,想知道为什么出错

使用Gram-Schmidtand方法编写QR分解的R码时出现两个错误,想知道为什么出错,r,R,我使用Gram-Schmidt正交化手动编写QR分解代码: A<-cbind(c(2,-2,18),c(2,1,0),c(1,2,0),c(2,3,4)) gsm<-function(X){ m<-ncol(X) n<-nrow(X) # initialize Q and R q<-matrix(0,m,n) r<-matrix(0,n,n) v<-matrix(0,m,n) # initialize V v[,1]<-X[,1] q[,1]<

我使用Gram-Schmidt正交化手动编写QR分解代码:

A<-cbind(c(2,-2,18),c(2,1,0),c(1,2,0),c(2,3,4))
gsm<-function(X){
m<-ncol(X)
n<-nrow(X)
# initialize Q and R
q<-matrix(0,m,n)
r<-matrix(0,n,n)
v<-matrix(0,m,n)
# initialize V
v[,1]<-X[,1]
q[,1]<-v[,1]/sqrt(sum(v[,1]^2))  
r[1,1]<-t(X[,1])%*%q[,1]
for (i in 2:n){
dv<-0
for (j in 1:(i-1)) {
r[j,i]<-t(X[,i])%*%q[,j]
dv<-dv+r[j,i]*q[,j]
}
v[,i]<-X[,i]-dv
q[,i]<-v[,i]/sqrt(t(v[,i])%*%v[,i])  
r[i,i]<-t(X[,i])%*%q[,i]
}
qrreport<-list("Q"=q,"R"=r)
return(qrreport)
}
gsm(A)

我很困惑我在哪里出错,希望有人能帮我调试。

你的
A
矩阵有3行4列,所以在
gsm()中,m
是4,
n
是3。这意味着
v
有4行和3列,而
X
,实际上是
A
,只有3行。当
v[,1]
Recycling array of length 1 in vector-array arithmetic is deprecated.
  Use c() or as.vector() instead.
Recycling array of length 1 in vector-array arithmetic is deprecated.
  Use c() or as.vector() instead.
$ Q
           [,1]        [,2]       [,3]
[1,]  0.1097643  0.89011215 -0.4423259
[2,] -0.1097643  0.45314800  0.8846517
[3,]  0.9878783 -0.04855157  0.1474420

$R
         [,1]      [,2]       [,3]
[1,] 18.22087 0.1097643 -0.1097643
[2,]  0.00000 2.2333723  1.7964082
[3,]  0.00000 0.0000000  1.3269776