当矩阵没有 LU 分解时,如何在 C++ 中求解方阵的线性系统?
How to solve a linear system of a square matrix in C++ when the matrix has no LU-Decomposition?
我一直在尝试开发一个程序来使用 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。实际上维基百科有一个完整的书面方案。
当且仅当矩阵的所有前导主辅子都不为零时,LU 分解才存在。
根据你的实际问题,你正在解决:
A^TAx=A^T
A^TA
是一个对称方阵。我们可以将矩阵对角化为:A = R^-1 D R
并且您始终可以重新排列它以找到 x
。您需要非零特征值才能工作。
一个(方)矩阵是可逆的当且仅当它没有零特征值。
我认为通过高斯消去反转它可能是最好的解决方案。
我一直在尝试开发一个程序来使用 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。实际上维基百科有一个完整的书面方案。
当且仅当矩阵的所有前导主辅子都不为零时,LU 分解才存在。
根据你的实际问题,你正在解决:
A^TAx=A^T
A^TA
是一个对称方阵。我们可以将矩阵对角化为:A = R^-1 D R
并且您始终可以重新排列它以找到 x
。您需要非零特征值才能工作。
一个(方)矩阵是可逆的当且仅当它没有零特征值。
我认为通过高斯消去反转它可能是最好的解决方案。