【问题标题】:scipy LU factorization permutation matrixscipy LU分解置换矩阵
【发布时间】:2014-06-06 04:21:12
【问题描述】:
据我了解 LU 分解,这意味着对于下三角矩阵 L 和上三角矩阵 U,矩阵 A 可以写为 A = LU。
但是,scipy 中与 LU 分解相关的函数(lu、lu_factor、lu_solve)似乎涉及第三个矩阵 P,使得 A = PLU 和 P 是置换矩阵(和 L、U和以前一样)。
这个置换矩阵的意义何在?如果“真正的”LU 分解总是可能的,为什么 P 不是单位矩阵?
【问题讨论】:
标签:
python
numpy
scipy
linear-algebra
【解决方案1】:
添加到@DomJack:
改变排列(又名重新排序)也会影响 L 和 U 因子中非零的数量。因此,重新排序可以在内存方面产生更有效的因式分解。
【解决方案2】:
考虑高斯消元过程。如果枢轴上有零,你会怎么做?你必须切换行,这会引入一个 P 矩阵。
此外,非常小的非零枢轴值会导致浮点环境中的数值不稳定。基本算法通过在枢轴列中搜索具有最大绝对值的条目并将对应的行与枢轴行切换来避免这种情况。
这个开关可能很昂贵,所以通常最大的绝对值条目必须比枢轴的绝对值大一些因素,例如10、切换发生。这减少了开关的数量,但保留了限制浮点错误所必需的开关。
搜索“带有部分旋转的 LU 分解”以获取有关该问题的任意数量的优质资源。
注意:由于 P 是一个置换矩阵,所以 P^T = P^(-1)。因此,Ax = b 与 LUx = P^T b 具有相同的解决方案(某些实现返回您所谓的 P,而其他实现返回您所谓的 P^T 并将其称为 P - 确保您知道它是哪一个是。这是 'PA = LU' 和 'A = PLU' 之间的区别——P 在每种情况下都不相同)。
【解决方案3】:
并非所有矩阵都有 LU 分解。但是每个方阵都至少有一个行置换,并进行了 LU 分解。