R中的广义逆问题

时间:2013-05-26 18:46:43

标签: r

gi<-function(A){
  p<-nrow(A)
  q<-ncol(A)
  rA<-qr(A)$rank

  if(p==q){
    if(det(A)!=0){
      return(solve(A))
    }}

  G<-matrix(0,p,q)
  P<-combn(p,rA)
  Q<-combn(q,rA)


  for(i in 1:(factorial(p)/factorial(rA)/factorial(p-rA))){
    for(j in 1:(factorial(q)/factorial(rA)/factorial(q-rA))){

      if(det(matrix(A[P[,i],Q[,j]],rA,rA))!=0){
        G[P[,j],Q[,i]]<-t(solve(A[P[,i],Q[,j]]))
      }

      return(G)
    }}

}

我发现函数可以找到A的广义逆,但是如果我像

那样输入矩阵
b<-matrix(c(1,0,-1,0,2,4,-1,2,5,1,2,3),3,4)

出现错误

1 个答案:

答案 0 :(得分:0)

可以使用ginv包中的函数MASS计算矩阵的广义逆:

b <- matrix(c(1,0,-1,0,2,4,-1,2,5,1,2,3),3,4)

library(MASS)
ginv(b)

结果:

            [,1]        [,2]          [,3]
[1,]  0.27777778  0.11111111 -5.555556e-02
[2,]  0.05555556  0.05555556  5.555556e-02
[3,] -0.22222222 -0.05555556  1.111111e-01
[4,]  0.33333333  0.16666667  2.775558e-17