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)
出现错误
答案 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