我试图通过使用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结果的原因是什么?
答案 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.]])