LU分解的矩阵乘法问题?

时间:2017-02-26 10:21:34

标签: python numpy scipy linear-algebra matrix-multiplication

我试图通过使用LU分解来解决Ax = b,但不知怎的,我不能通过乘以L * U得到A.这是代码和结果;

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结果的原因是什么?

2 个答案:

答案 0 :(得分:4)

好像我完全忘记了排列矩阵P.将P的逆与L * U相乘解决了问题;

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

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

答案 1 :(得分: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.]])