非常大矩阵的行列式值

时间:2013-12-11 05:17:29

标签: c++ algorithm matrix determinants

我有一个非常大的方阵矩阵,大约100000,我想知道该矩阵的行列式值是否为零。

最快的方法是什么?

我必须在C ++中实现它

4 个答案:

答案 0 :(得分:1)

假设您正在尝试确定矩阵是否为非单数,您可能需要查看此处:

https://math.stackexchange.com/questions/595/what-is-the-most-efficient-way-to-determine-if-a-matrix-is-invertible

正如评论中所提到的,最好使用某种BLAS库来为你做这件事,例如Boost::uBLAS

答案 1 :(得分:1)

通常,这种大小的矩阵极其稀疏。使用行和列重新排序算法将条目集中在对角线附近,然后使用QR分解或LU分解。第二个因子的对角线条目的乘积是 - 直到QR情况下的符号 - 行列式。这可能仍然过于恶劣,通过执行奇异值分解获得秩的最佳结果。但是,SVD更贵。

答案 2 :(得分:0)

有一个属性,如果任何两行相等或一行是另一行的常数倍,我们可以说该矩阵的行列式为零。它也适用于列。

答案 3 :(得分:0)

据我所知,你的应用程序不需要计算行列式,但矩阵的等级足以检查方程组是否具有非平凡的解: -

Rank of Matrix