使用Gram-Schmidtand方法编写QR分解的R码时出现两个错误,想知道为什么出错
我使用Gram-Schmidt正交化手动编写QR分解代码:使用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]<
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