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

标签 c++ matrix linear-algebra equation equation-solving

我一直在尝试开发一个程序来使用 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/

相关文章:

Python - 矩阵中相同列/行的列表

r - 在R中,获取矩阵的前10个值并将行名称输出到向量

Python - NumPy - 元组作为数组的元素

c - 我应该与 mkl_malloc 对齐什么值?

c++ - echo在Boost中输入命令行参数

c++ - 如何只保留 opencv android 库的一个模块(Canny Edge Detection)?

c++ - 如何使用 CMake 在 C++ 代码中运行 gtest? (未见测试)

python - 如何将列表转换为数据框矩阵

python - 使用 numpy reshape 执行三阶张量展开操作

C++抽象基类集合