LU 分解的矩阵乘法问题?

Matrix multiplication issue for LU decomposition?

我试图通过使用 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结果?

哦,我好像完全忘记了置换矩阵P。P的逆乘以L*U解决了问题;

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

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

根据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.]])