scipy LU分解置换矩阵

时间:2014-04-22 01:06:57

标签: python numpy scipy linear-algebra

据我了解LU分解,这意味着对于下三角矩阵L和上三角矩阵U,矩阵A可写为A = LU。

然而,与LU分解相关的scipy函数(lulu_factorlu_solve)似乎涉及第三个矩阵P,这样A = PLU和P是一个排列矩阵(和L,U一样)。

这个排列矩阵有什么意义?如果总是可以进行“真正的”LU分解,为什么P必须是单位矩阵以外的东西?

3 个答案:

答案 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因子中的非零数。因此,重新排序可以在内存方面实现更有效的分解。