我有一个简单(而且很小)的线性齐次系统,其中的条目矩阵是小整数。我不需要有效解决几乎奇异矩阵和处理舍入误差等的花哨的方法。但我需要知道系统是否是奇异的,以及欠定系统的通用解决方案。它必须坚如磐石。欢迎对这种算法的任何参考。我正在用 C 编码。SVD 是要走的路吗?
简单但可能奇异的线性系统的数值解
计算科学
线性求解器
2021-12-03 11:34:40
3个回答
整数矩阵库是一个 C 库,声称能够计算整数矩阵的零空间。另请参阅MathOverflow上对完全相同的问题的答案,它提供了库列表(包括PARI,它也可以从 C 中调用并且仍在更新中)。你也可以看看LinBox,即使它是用 C++ 编写的。
您的欠定系统的一般解决方案是是零空间的成员.
找到零空间,数值上最稳定的方法是使用 SVD。有关详细信息,请参阅矩形密集矩阵的零空间。
SVD 将 (1) 告诉您矩阵的零空间是什么 (2) 如果矩阵是奇异的,则为您提供矩阵的伪逆。一般来说,SVD 是一种非常方便的矩阵分解,对于您所说的目的,绝对应该可以完成工作。
如果您决定自己编写代码,Trefethen 和 Bau 的书中有足够的细节可以使用,要么实现找到 A*A 的特征分解的非常糟糕的方法,要么使用双对角化的正确方法。
但是,如果您只是碰巧在 C 中工作并且觉得不需要自己做,那么 SVD 的 Wikipedia 页面有一长串将为您实现它的库,其中最主要的是 GNU Scientific Library . 或者,谷歌搜索“SVD c 源代码”也会出现几个结果。
其它你可能感兴趣的问题