2014-09-19 143 views
4

我該如何手動重建一個矩陣A,該因素被分解爲lu_factor? ( = PLU如何理解scipy.linalg.lu_factor的樞紐矩陣?

我的當前的嘗試都失敗了由於矩陣P的設置。以下是我迄今爲止:

A = np.random.rand(3,3) 
lu, piv = lu_factor(A) 

U = np.triu(lu) 
L = np.tril(lu, -1) 
L[np.diag_indices_from(L)] = 1.0 

我要找的矩陣P這使得該行打印

print np.allclose(A, np.dot(P, np.dot(L, U))) 

任何暗示/鏈接/建議表示讚賞!

+1

從'lu'和'piv'重構P,L和U的另一種方法是調用'scipy.linalg.lu'(http://docs.scipy.org/doc/scipy/reference/generated/scipy .linalg.lu.html)。 – 2014-09-19 14:22:46

回答

4

置換矢量需要按順序解釋。如果在順序進行piv=[1,2,2]然後將下面的需要(與基於零索引):

  1. 行0的變化以行1
  2. 新行1度的變化與第2行和
  3. 新行2保持不變。

在這個代碼會做的伎倆:

P = np.eye(3) 
for i, p in enumerate(piv): 
    Q = np.eye(3,3) 
    q = Q[i,:].copy() 
    Q[i,:] = Q[p,:] 
    Q[p,:] = q 
    P = np.dot(P, Q) 

對於piv=[1,2,2]P

[[ 0. 0. 1.] 
[ 1. 0. 0.] 
[ 0. 1. 0.]] 

這可能不是計算P的一個非常快速的方式,但它確實訣竅並回答問題。

+0

+1很好的答案! – 2014-09-19 09:01:09

+1

除了交換Q行並設置P = P.dot(Q),您可以按照與行描述相同的順序就地交換P的*列*。 – 2014-09-19 14:06:10