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 ]