![](/img/trans.png)
[英]Why is 'scipy.sparse.linalg.spilu' less efficient than 'scipy.linalg.lu' for sparse matrix?
[英]Is the upper triangular matrix in function scipy.linalg.lu always in row echelon form?
我有axn矩陣A,其中n> m,並且我試圖通過它的行梯形形式識別獨立的行。 函數scipy.linalg.lu返回矩陣的PLU分解,但是U因子似乎不是梯形形式,即,樞軸不是階梯形。 據我所知,U因子應始終呈階梯狀。
考慮以下示例:
from numpy import array
from scipy.linalg import lu
A = array([[1, 1, 1, 1, 0, 1, 1, 1, 1, 0],
[1, 1, 0, 0, 1, 0, 1, 0, 1, 1],
[1, 1, 0, 0, 0, 1, 1, 0, 0, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 0, 1],
[1, 1, 0, 0, 1, 1, 1, 1, 1, 1]])
P, L, U = lu(A)
U因子不是行梯形形式。 對於每行k,樞軸應始終位於行k-1中樞軸的右側。 看到第五行的樞軸不在第四行的樞軸的右側:
array([[ 1., 1., 1., 1., 0., 1., 1., 1., 1., 0.],
[ 0., 1., 0., 1., 1., 0., 1., 0., 0., 1.],
[ 0., 0., -1., -1., 0., 0., 0., -1., -1., 0.],
[ 0., 0., 0., 0., 1., -1., 0., 0., 1., 1.],
[ 0., 0., 0., 0., 1., 0., 0., 1., 1., 1.]])
我以前從未見過LUP分解,但我懷疑它並沒有完全按照您的想法進行。 我在Matlab中所做的分解與您在Python中所做的分解相同,並且得到的結果完全相同。 因此,我不認為Python LU函數有問題。
更新:我也用R(下面的代碼)實現了這一點,並且U矩陣給出的結果與Matlab和Python相同。 與其他不同,它給出以下警告:
Warning message:
In .local(x, ...) :
Exact singularity detected during LU decomposition: U[i,i]=0, i=4.
Matlab:
碼:
A = ([[1, 1, 1, 1, 0, 1, 1, 1, 1, 0],
[1, 1, 0, 0, 1, 0, 1, 0, 1, 1],
[1, 1, 0, 0, 0, 1, 1, 0, 0, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 0, 1],
[1, 1, 0, 0, 1, 1, 1, 1, 1, 1]]);
[L,U,P] = lu(A);
U
Matlab結果:
U =
1 1 1 1 0 1 1 1 1 0
0 1 0 1 1 0 1 0 0 1
0 0 -1 -1 0 0 0 -1 -1 0
0 0 0 0 1 -1 0 0 1 1
0 0 0 0 1 0 0 1 1 1
Python結果(來自您的代碼):
U =
array([[ 1., 1., 1., 1., 0., 1., 1., 1., 1., 0.],
[ 0., 1., 0., 1., 1., 0., 1., 0., 0., 1.],
[ 0., 0., -1., -1., 0., 0., 0., -1., -1., 0.],
[ 0., 0., 0., 0., 1., -1., 0., 0., 1., 1.],
[ 0., 0., 0., 0., 1., 0., 0., 1., 1., 1.]])
R:
碼:
library(Matrix)
A <- Matrix( c( 1, 1, 1, 1, 0, 1, 1, 1, 1, 0 , 1, 1, 0, 0, 1, 0, 1, 0, 1, 1 , 1, 1, 0, 0, 0, 1, 1, 0, 0, 0 , 0, 1, 0, 1, 1, 0, 1, 0, 0, 1 , 1, 1, 0, 0, 1, 1, 1, 1, 1, 1 ),nrow=5,ncol=10,byrow=TRUE )
expand(mylu <-lu(A))
結果:
class "dtrMatrix" (unitriangular)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 . . . .
[2,] 0 1 . . .
[3,] 1 0 1 . .
[4,] 1 0 1 1 .
[5,] 1 0 1 0 1
$U
5 x 10 Matrix of class "dgeMatrix"
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 0 1 1 1 1 0
[2,] 0 1 0 1 1 0 1 0 0 1
[3,] 0 0 -1 -1 0 0 0 -1 -1 0
[4,] 0 0 0 0 1 -1 0 0 1 1
[5,] 0 0 0 0 1 0 0 1 1 1
$P
5 x 5 sparse Matrix of class "pMatrix"
[1,] | . . . .
[2,] . . . | .
[3,] . . | . .
[4,] . | . . .
[5,] . . . . |
不能保證LU分解將導致形成行梯形形式的U矩陣。 在這種情況下失敗的原因可能是因為矩陣是奇異的。 我強烈懷疑這是原因,因為奇異矩陣的特征之一是缺少一整套樞軸。
有關詳細信息,請參見https://en.wikipedia.org/wiki/LU_decomposition上有關“通用矩陣”的部分以及其中提供的參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.