matSwp_JPH {lazy.symbolic}R Documentation

スイープ演算子

Description

英語のヘルプファイルは: matSwp

Arguments

A

スイープする行列

loc

ピボット位置のベクトル

eps

ピボットが 0 かどうかを判定する小さい値

nopermute

=1 の場合、A の逆行列計算時に行・列の置換を行わない

chkginv

= 1 の場合、結果として得られる g-逆行列が正しいか確認

debug

= 1 の場合、中間結果を出力

history

= 1 の場合、置換行列 RR と CC を返す

Details

デフォルトでは、ゼロピボットを回避するために 行列 A の行と列を置換して inv(A) を計算します。
この場合、RR と CC が置換行列であれば
inv(A) = CC %*% inv(RR %*% A %*% CC) %*% RR
history=1 の場合、A=matSwp(A) と RR, CC を含むリストが返されます。


文字行列の場合は lazy.symbolic パッケージの matSweep を使用してください。

Value

スイープ済みの行列
または、行列 A と置換行列を含むリスト

References

Beaton, A.E. (1964) The use of special matrix operators in statistical calculus. Ed. D thesis, Harvard University. Reprinted as Educational Testing Service Research Bulletin 64-51. Princeton, N.J.
Goodnight, J.H. (1979) Tutorial on the SWEEP operator. The American Statistician, 33, 3, 149-158.
Dempster,A.P. (1969) Elements of Continuous Multivariate Analysis. Addison-Wesley Publishing Co., Inc.

Examples

M <- matrix(c(1,2,3,3,2,1,4,5,2),3,3)
Minv <- matSwp(M)
Minv - matSwp(M,1:3)
Minv - matSwp(M,c(3,1,2))
M - matSwp(matSwp(M,1), 1)

#' # 対角にゼロがある場合
M <- pmat(4,1,3) %*% pmat(4,2,3)

# 誤った結果
Minv0  <- matSwp(M, nopermute=1)
M %*% Minv0
Minv0 %*% M

# 正しい結果
res <- matSwp(M, history=1)
res
Minv <- res$inv
M %*% Minv
Minv %*% M

# 正しい結果 2
M1 <- res$RR %*% M %*% res$CC
Minv1 <- res$CC %*% matSwp(M1, 1:4) %*% res$RR
M %*% Minv1
Minv1 %*% M

# g2 逆行列
M <- matrix(c(1,2,3,3,2,1,4,5,2),3,3)
M[1,] <- 0
matSwp(M, chkginv=1)

# 長方行列の g2 逆行列(0 を追加して拡張)
G <- matrix(c(1,2,3,3,2,1),3,2)
ginvG <- matSwp(cbind(G,0))[1:2,1:3]
chkginv(G, ginvG, print=1)


[Package lazy.symbolic version 1.0.0.20250830 ]