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.]])
我试图通过使用 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.]])