1

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

知道这一点的最快方法是什么?

我必须在 C++ 中实现它

4

4 回答 4

1

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

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

正如评论中提到的那样,最好使用某种 BLAS 库来为您执行此操作,例如Boost::uBLAS.

于 2013-12-11T05:34:37.467 回答
1

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

于 2013-12-11T14:07:54.003 回答
0

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

矩阵的秩

于 2013-12-11T09:12:38.020 回答
0

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

于 2013-12-11T05:32:57.007 回答