问题描述
以下函数不使用行透视进行LU分解. R中是否存在使用行透视分解LU的现有函数?
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,] . . | .
推荐答案
R中的lu
函数正在使用部分(行)旋转.您没有在示例中提供原始矩阵,所以我将创建一个新示例进行演示.
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.
函数lu
正在计算 A = PLU ,这等效于计算矩阵 A 的LU分解,其行由置换矩阵 P : P A = LU .有关更多信息,请参见 Matrix
软件包文档. /p>
示例
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: PA = LU. See the Matrix
package documentation for more information.
> 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
的行排列版本:
We can see that LU
is a row-permuted 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
回到原始身份 A = PLU ,我们可以恢复A
(与上面的A
比较):
Going back to the original identity A = PLU we can recover 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
这篇关于行分解的LU分解的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!