我一直在尝试开发一个程序来使用 LU 分解求解方阵 A 的系统 Ax=b。但是,我意识到这种分解并不总是存在(一种判断方法是如果不需要行交换操作,则存在)。但是,我从许多资料中看到,这是计算 Ax=b 的解的一种极好的方法。
我的问题是:人们遇到没有 LU 分解的矩阵的频率是多少?如果真的遇到这样的矩阵,应该怎么处理呢?为了以防万一,他是否应该创建一个单独的方法,例如高斯消除法?
请提供一些关于此的见解。提前致谢。
注意:我正在尝试使用此信息来解决 A^TAx=A^Tb,即使用最小二乘法找到数学模型。
最佳答案
以最简洁的形式摘自维基百科
Any square matrix $A$ admits an LUP factorization. If $A$ is invertible, then it admits an LU (or LDU) factorization if and only if all its leading principal minors are non-zero. If $A$ is a singular matrix of rank $k$, then it admits an LU factorization if the first $k$ leading principal minors are non-zero, although the converse is not true.
我没有完整地编写实现,但这看起来很复杂。我认为根据您的矩阵,存在更简单的数值方案可以减少您的解决方案。
至于怎么经常遇到这样的?好吧,没有人知道你在做什么,所以这是不可能回答的。如果遇到这种情况,请切换到其他方案。
我在实践中经常使用的一个是 Gauss-Seidel。实际上维基百科有一个完整的书面方案。
关于c++ - 当矩阵没有 LU 分解时,如何在 C++ 中求解方阵的线性系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55112620/