The following function does not use row pivoting for LU decomposition. Is there an existing function in R that does LU decomposition with row pivot?
> 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,] . . | .
Perhaps this does the job. However, there is not a windows binary and I can't try it.
The
lu
function in R is using partial (row) pivoting. You did not give the original matrix with your example, so I will create a new example to demonstrate.Function
lu
in R is computing A = PLU, which is equivalent to computing the LU decomposition of matrix A with its rows permuted by the permutation matrix P-1: P-1A = LU. See theMatrix
package documentation for more information.Example
Here's the
L
factor:Here's the
U
factor:Here's the permutation matrix:
We can see that
LU
is a row-permuted version ofA
:Going back to the original identity A = PLU we can recover
A
(compare withA
above):