繁体   English   中英

matlab到python lu分解不同

[英]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)返回已经预先乘以置换矩阵P L

注意,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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM