2017-02-26 174 views
2

我試圖通過使用LU分解來解決Ax = b,但不知何故,我無法通過乘以L * U來獲得A。這是代碼和結果;LU分解的矩陣乘法問題?

A = array([2,3,5,4]).reshape(2,2) 
b = array([4,3]) 
P,L, U = lu(A) 

而結果對於L和U

L: 

array([[ 1. , 0. ], 

     [ 0.4, 1. ]]) 

U: 

array([[ 5. , 4. ], 

     [ 0. , 1.4]]) 

結果對於L * U

dot(L,U): 

array([[ 5., 4.], 

     [ 2., 3.]]) 

所以代替((2,3),(5,4)), ((5.,4。),(2.,3.))。結果,我無法解決Ax = b。獲得這種L * U結果的原因是什麼?

回答

4

哦,好像我完全忘記了置換矩陣P.乘以P的逆與L * U解決了這個問題;

dot(inv(P),dot(P,A)): 

array([[ 2., 3.], 
     [ 5., 4.]]) 
+1

或者你可以使用,而不是'L,U = scipy.linalg.lu(A,permute_l = TRUE)' 。然後'L.dot(U)'是預期的。 –

1

根據WikiPedia:PA = LU。

所以,如果你想A = LU,您可以添加到permute_l=True功能lu

(ins)>>> a = np.array([2,3,5,4]).reshape(2,2) 
(ins)>>> l,u = scipy.linalg.lu(a, permute_l=True) 
(ins)>>> l.dot(u) 
array([[ 2., 3.], 
     [ 5., 4.]])