invGE_JPH {lazy.symbolic} | R Documentation |
ガウス消去法による行列の逆行列
Description
英語のヘルプファイルは: invGE
Arguments
A |
入力行列(数値または文字行列) |
loc |
ピボット位置のベクトル |
nopermute |
= 0 の場合、数値行列のとき最適ピボットを探索 |
eps |
ゼロ判定の閾値 |
simplify |
= 0 の場合、文字行列の結果を簡略化しない |
print |
= 1 の場合、中間結果を出力 |
Details
この関数は A
行列に対してガウス消去法を行います。
loc=1:nrow(A)
の場合、消去は列 1 から列 n=ncol(A)
まで順に行われます:
B0 <- cbind( A, I ) B1 <- T1 B2 <- T2 : : Bk <- Tk : : Bn <- Tn
ここで Tk は Bk の k 列を単位ベクトルにする行列です。
ピボットは B[i,i]
が使用されます。
反復終了時には
Bn = cbind( I, inv(A) )
すなわち
inv(A) = Tn
loc != 1:nrow(A)
の場合、各ステップで B[loc[i],loc[i]]
がピボットとして使用されます。
length(loc) < nrow(A)
の場合、中間結果が返されます。
Value
cbind(I, inv(A))
行列 A
の逆行列は cbind(I,inv(A))[,-c(1:nrow(A))]
で得られます。
Examples
# 文字行列 A
n <- 2
Aa <- demomat(n,n,root="a")
set.seed(1701)
An <- matrix(rnorm(n*n),n,n)
res <- invGE(Aa, print=1)
II <- res[,c(1:n)]
invAa <- res[,-c(1:n)]
# 数値確認
Eval(II, Aa=An)
Eval(matTimes(Aa,invAa), Aa=An)
# 数値行列 A
set.seed(1702)
n <- 4
A <- matrix( sample(0:9,n*n,replace=1), n,n )
res <- invGE(A, print=1)
invA <- res[,-(1:n)]
printm(A, invA, A%*%invA, fmt=".2")
# ピボット順序の例
set.seed(1701)
n=4
A=matrix( sample(0:9,n*n,replace=1), n,n )
# 間違った結果
invA=invGE(A, print=1)[,c(1:n)]
printm( A%*%invA )
# nopermute=0 で正しい結果
invA=invGE(A, print=1, nopermute=0)[,-c(1:n)]
printm( A%*%invA, fmt="7.3" )
# loc を指定して正しい結果
invA=invGE(A, print=1, loc=c(1,4,3,2))[,-c(1:n)]
printm( A%*%invA, fmt="6.3" )
# フルランクでない行列 A
set.seed(1701)
n <- 4
A <- matrix( sample(0:9,n*n,replace=1), n,n )
A[,4] <- A[,1]+A[,2]
res <- invGE(A, print=1, nopermute=0)
invA <- res[,-c(1:n)]
round( A%*%invA ,6 )
chkginv(A,invA)
[Package lazy.symbolic version 1.0.0.20250830 ]