据我了解LU分解,这意味着对于下三角矩阵L和上三角矩阵U,矩阵A可写为A = LU。
然而,与LU分解相关的scipy函数(lu
,lu_factor
,lu_solve
)似乎涉及第三个矩阵P,这样A = PLU和P是一个排列矩阵(和L,U一样)。
这个排列矩阵有什么意义?如果总是可以进行“真正的”LU分解,为什么P必须是单位矩阵以外的东西?
答案 0 :(得分:8)
考虑高斯消除过程。如果枢轴上有零,你会怎么做?你必须切换行,这会引入一个P矩阵。
此外,非常小的非零枢轴值会导致浮点环境中的数值不稳定。基本算法通过在pivot列中搜索具有最大绝对值的条目并使用pivot行切换相应的行来避免这种情况。这个开关可能很昂贵,所以通常最大绝对值输入必须大于枢轴的绝对值一些因素,例如: 10,用于切换发生。这减少了交换机的数量,但保留了限制浮点错误所需的那些。
使用部分旋转搜索" LU分解"关于这个问题的任何数量的好资源。
注意:由于P是置换矩阵,P ^ T = P ^( - 1)。因此,Ax = b与LUx = P ^ T b具有相同的解决方案(一些实现返回您称为P的内容,而其他实现返回您称之为P ^ T并将其称为P - 确保您知道它是哪一个。它的区别在于PA = LU'和' A = PLU' - P在每种情况下都不相同)。
答案 1 :(得分:3)
并非所有矩阵都有LU分解。但是每个方阵都至少有一行排列和LU分解。
答案 2 :(得分:1)
要添加到@DomJack: 更改排列(也称为重新排序)也会影响L和U因子中的非零数。因此,重新排序可以在内存方面实现更有效的分解。