正如我所理解的LU因子分解,它意味着矩阵a可以写为下三角矩阵L和上三角矩阵U的a=LU。
然而,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^Tb相同的解决方案(有些实现返回您所称的P,而另一些实现返回您称之为P^T并称之为P-确保您知道它是哪一个。这是"PA=LU"one_answers"A=PLU"之间的区别-在每种情况下,P都不相同)。
并非所有矩阵都有LU分解。但每个方阵都至少有一个LU分解的行排列。
要添加到@DomJack:改变排列(又称重新排序)也会影响L和U因子中非零的数量。因此,重新排序可以导致更有效的因子分解,在内存方面。