当矩阵没有LU分解时,如何用C ++求解方阵的线性系统?

问题描述 投票:0回答:2

我一直在尝试使用LU-Decomposition开发一个程序来解决方程矩阵A的系统Ax = b。但是,我意识到这种分解并不总是存在(一种方法是告诉我是否需要行交换操作,然后存在)。但是,我从许多来源看到,这是计算Ax = b的解决方案的一种很好的方法。

我的问题是:有多少人遇到没有LU分解的矩阵?如果有人遇到这样的矩阵,他应该如何处理呢?为了以防万一,他应该创建一个单独的方法,如高斯消除吗?

请给我一些见解。提前致谢。

注意:我正在尝试使用此信息来解决A ^ TAx = A ^ Tb,即使用最小二乘法找到数学模型。

c++ matrix linear-algebra equation equation-solving
2个回答
1
投票

取自维基百科最简洁的形式

任何方阵$ A $都允许LUP分解。如果$ A $是可逆的,那么当且仅当其所有主要主要未成年人都非零时,它才允许LU(或LDU)因子分解。如果$ A $是$ k $等级的奇异矩阵,那么如果第一个$ k $领先的主要未成年人非零,则它允许LU分解,尽管反之亦然。

我没有完全编写的实现,但这看起来很复杂。我认为,根据你的矩阵,存在更简单的数值方案,可以减少你的解决方案。

至于经常如何碰到这样的?好吧,没有人知道你做了什么,所以这是不可能回答的。如果遇到这种情况,请切换到另一个方案。

我在实践中经常使用的是Gauss-Seidel。实际上维基百科有一个完全书面的方案。


0
投票

当且仅当矩阵的所有主要主要未成年人都是非零时,LU分解才存在。

根据您的实际问题,您正在解决:

A^TAx=A^T

A^TA是一个方形对称矩阵。我们可以将矩阵对角化为:A = R^-1 D R,你可以随时重新排列它以找到x。您需要非零的特征值才能工作。

当(并且仅当)矩阵不具有零特征值时,(正方形)矩阵是可逆的。

我认为通过高斯消除反转它可能是最好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.