据我理解,LU分解是指一个矩阵A可以被写成L和U两个矩阵的乘积,其中L为下三角矩阵,U为上三角矩阵。然而,scipy中与LU分解相关的函数(lu, lu_factor, lu_solve)似乎涉及到第三个矩阵P,使得A=PLU,其中P为置换矩阵(而L、U如前所述)。这个置换矩阵的意义是什么?如果“真正”的LU分解总是可能的,为什么P会是除单位矩阵以外的其他矩阵呢?
考虑高斯消元过程。如果主元上有一个零怎么办?你需要交换行,这就引入了一个 P 矩阵。此外,在浮点环境中,非常小的非零主元值会导致数值不稳定。基本算法通过在主元列中搜索绝对值最大的条目并将相应的行与主元行进行交换来避免这种情况。这种交换可能很昂贵,因此通常最大的绝对值条目必须比主元的绝对值大一些倍数,例如 10,才会发生交换。这减少了交换次数,但保持了必要的交换以限制浮点误差。搜索“带部分主元的LU分解”可获得有关该问题的许多良好资源。注意:由于 P 是置换矩阵,P^T = P^(-1)。因此,Ax = b 具有与 LUx = P^T b 相同的解(某些实现返回你所称的 P,而另一些返回你所称的 P^T 并将其称为 P - 确保你知道它是哪一个。这是“PA = LU”和“A = PLU”之间的区别-每种情况下的 P 不同)。