5


1

行ピボットを使用したLU分解

次の関数は、LU分解に行ピボットを使用しません。 _rowピボット_でLU分解を行う既存の関数がRにありますか?

> require(Matrix)
> expand(lu(matrix(rnorm(16),4,4)))
$L
4 x 4 Matrix of class "dtrMatrix"
     [,1]        [,2]        [,3]        [,4]
[1,]  1.00000000           .           .           .
[2,]  0.13812836  1.00000000           .           .
[3,]  0.27704442  0.39877260  1.00000000           .
[4,] -0.08512341 -0.24699820  0.04347201  1.00000000

$U
4 x 4 Matrix of class "dtrMatrix"
     [,1]       [,2]       [,3]       [,4]
[1,]  1.5759031 -0.2074224 -1.5334082 -0.5959756
[2,]          . -1.3096874 -0.6301727  1.1953838
[3,]          .          .  1.6316292  0.6256619
[4,]          .          .          .  0.8078140

$P
4 x 4 sparse Matrix of class "pMatrix"

[1,] | . . .
[2,] . | . .
[3,] . . . |
[4,] . . | .

2 Answer


4


Rの `lu`関数は部分(行)ピボットを使用しています。 あなたはあなたの例で元のマトリックスを与えなかったので、私は実証するために新しい例を作成します。

Rの関数 `lu`は_A = PLU_を計算します。これは、行が置換行列_P ^ -1 ^ で置換された行列_A_のLU分解を計算することと同等です:_P ^ -1 ^ A = LU。 詳細については、http://cran.r-project.org/web/packages/Matrix/Matrix.pdf [`Matrix`パッケージドキュメント]を参照してください。

> A <- matrix(c(1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1), 4)
> A
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    1    1   -1   -1
[3,]    1   -1   -1    1
[4,]    1   -1    1   -1

以下が `L`ファクターです。

> luDec <- lu(A)
> L <- expand(luDec)$L
> L
4 x 4 Matrix of class "dtrMatrix" (unitriangular)
     [,1] [,2] [,3] [,4]
[1,]    1    .    .    .
[2,]    1    1    .    .
[3,]    1    0    1    .
[4,]    1    1   -1    1

「U」要素は次のとおりです。

> U <- expand(luDec)$U
> U
4 x 4 Matrix of class "dtrMatrix"
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    .   -2   -2    0
[3,]    .    .   -2   -2
[4,]    .    .    .   -4

置換行列は次のとおりです。

> P <- expand(luDec)$P
> P
4 x 4 sparse Matrix of class "pMatrix"

[1,] | . . .
[2,] . . | .
[3,] . | . .
[4,] . . . |

「LU」は「A」の行置換バージョンであることがわかります。

> L %*% U
4 x 4 Matrix of class "dgeMatrix"
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    1   -1   -1    1
[3,]    1    1   -1   -1
[4,]    1   -1    1   -1

元のアイデンティティ_A = PLU_に戻ると、「A」を復元できます(上記の「A」と比較してください)。

> P %*% L %*% U
4 x 4 Matrix of class "dgeMatrix"
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    1    1   -1   -1
[3,]    1   -1   -1    1
[4,]    1   -1    1   -1


1


おそらくhttp://finzi.psych.upenn.edu/R/library/magma/html/lu.html[this]が仕事をします。 ただし、Windowsバイナリは存在しないため、試すことはできません。