Python LU分解的矩阵乘法问题?
我试图用LU分解来解Ax=b,但不知何故,我无法通过乘以L*U得到APython LU分解的矩阵乘法问题?,python,numpy,scipy,linear-algebra,matrix-multiplication,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.],
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.]])
根据:PA=LU
因此,如果需要A=LU,可以将permute\u 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.]])
或者您可以使用
L,U=scipy.linalg.lu(A,permute\U L=True)
。然后L.dot(U)
与预期一致。