0

「行列 b が非特異行列の場合、b の逆行列を見つけます。それ以外の場合は、b の一般化された逆行列を見つけます」

だから私はこの声明を出した。しかし、うまくいきませんでした。

a<-c(1:9)
a
b<-matrix(a,3,3)
b
library(MASS)
ifelse(ncol(b)==nrow(b),(ifelse(det(b)==0,ginv(b),solve(b)),ginv(b))

次に、このようにステートメントを変更しました

a<-c(1:9)
a
b<-matrix(a,3,3)
b
library(MASS)
d<-ifelse(det(b)==0,ginv(b),solve(b))
e<-ginv(b)
ifelse(ncol(b)==nrow(b),d,e)

しかし、答えは単なるrow=1 col=1 bの一般化反転の値です。

私を助けてください....

4

2 に答える 2

0

あなたには迷いがあります(

ifelse(ncol(b)==nrow(b),ifelse(det(b)==0,ginv(b),solve(b)),ginv(b))
## [1] -0.6388889

これは必要ないことに注意してくださいifelsencol(b)==nrow(b)はベクトルを返しませんし、 も返しませんdet(b)==0

于 2013-05-12T02:38:57.597 に答える
0

質問に答えるには、単純なifandelseステートメントを使用して値を返します。交換

d <- ifelse(det(b)==0,ginv(b),solve(b))
e <- ginv(b)
ifelse(ncol(b)==nrow(b),d,e)

これで:

d <- if(det(b)==0) ginv(b) else solve(b)
e <- ginv(b)
if(ncol(b)==nrow(b)) d else e

##            [,1]          [,2]       [,3]
## [1,] -0.6388889 -5.555556e-02  0.5277778
## [2,] -0.1666667 -9.234353e-17  0.1666667
## [3,]  0.3055556  5.555556e-02 -0.1944444
于 2013-05-12T02:41:13.277 に答える