matlab对pythonlu分解不同
matlab to python lu decomposition different
我正在将一些 MATLAB 代码转换为 Python,我观察到 \
运算符和 scipy.linalg.lstsq
之间存在很大的数值差异,这显然是可以互换的。
在我的代码中,我计算了一些矩阵的 LU
分解,但是 Python 和 Matlab 对 'L' 给出的答案略有不同。
给定这个输入矩阵,B:
B = [7.6822 0 -1.0000 0;
0 0.2896 -1.0000 0;
-6.4018 0 0 -1.0000;
0 -0.9350 0 -1.0000]
在Python中,使用P,L,U = scipy.linalg.lu(B)
:
L = [ 1. 0. 0. 0. ]
[ 0. 1. 0. 0. ]
[ 0. -0.30972791 1. 0. ]
[-0.83333333 -0. 0.83333333 1. ]
使用 Matlab [L,U] = lu(B)
:
L = 1.0000 0 0 0
0 -0.3097 1.0000 0
-0.8333 0 0.8333 1.0000
0 1.0000 0 0
在这两种情况下 U
是这样的:
U = [ 7.6822128 0. -1. 0. ]
[ 0. -0.93502772 0. -1. ]
[ 0. 0. -1. -0.30972791]
[ 0. 0. 0. -0.74189341]
所以我想通了...在 MATLAB 中,[L,U] = lu(A)
returns L
已经预乘了置换矩阵 P
。
请注意 scipy.linalg.lu() 的可选参数 permute_l 设置为 False。您可以将其设置为 True,例如
(L,U) = scipy.linalg.lu(A,permute_l=True)
或者之后自己执行排列,例如,
(P,L,U) = scipy.linalg.lu(A)
L = P@L
我正在将一些 MATLAB 代码转换为 Python,我观察到 \
运算符和 scipy.linalg.lstsq
之间存在很大的数值差异,这显然是可以互换的。
在我的代码中,我计算了一些矩阵的 LU
分解,但是 Python 和 Matlab 对 'L' 给出的答案略有不同。
给定这个输入矩阵,B:
B = [7.6822 0 -1.0000 0;
0 0.2896 -1.0000 0;
-6.4018 0 0 -1.0000;
0 -0.9350 0 -1.0000]
在Python中,使用P,L,U = scipy.linalg.lu(B)
:
L = [ 1. 0. 0. 0. ]
[ 0. 1. 0. 0. ]
[ 0. -0.30972791 1. 0. ]
[-0.83333333 -0. 0.83333333 1. ]
使用 Matlab [L,U] = lu(B)
:
L = 1.0000 0 0 0
0 -0.3097 1.0000 0
-0.8333 0 0.8333 1.0000
0 1.0000 0 0
在这两种情况下 U
是这样的:
U = [ 7.6822128 0. -1. 0. ]
[ 0. -0.93502772 0. -1. ]
[ 0. 0. -1. -0.30972791]
[ 0. 0. 0. -0.74189341]
所以我想通了...在 MATLAB 中,[L,U] = lu(A)
returns L
已经预乘了置换矩阵 P
。
请注意 scipy.linalg.lu() 的可选参数 permute_l 设置为 False。您可以将其设置为 True,例如
(L,U) = scipy.linalg.lu(A,permute_l=True)
或者之后自己执行排列,例如,
(P,L,U) = scipy.linalg.lu(A)
L = P@L