LU decomposition with row string

The following function does not use line rotation to decompose LU. Is there an existing function in R that does LU decomposition using the pivot string?

> 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,] . . | . 
+4
source share
2 answers

The lu function in R uses a partial (in-line) rotation. You did not provide the original matrix with your example, so I will create a new example for demonstration.

The function lu in R computes A = PLU, which is equivalent to calculating the LU decomposition of the matrix A with its own rows swapped by the permutation matrix P -1 : P - 1 A = LU. See the Matrix documentation for more information.

Example

 > 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 

Here is the coefficient 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 

Here is the coefficient 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 

Here is the permutation matrix:

 > P <- expand(luDec)$P > P 4 x 4 sparse Matrix of class "pMatrix" [1,] | . . . [2,] . . | . [3,] . | . . [4,] . . . | 

We can see that lu is a string-permutation version of 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 

Returning to the original identifier A = PLU, we can restore A (compare with A above):

 > 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 
+3
source

Perhaps this does the job. However, there is no Windows binary, and I cannot try it.

+1
source

All Articles