我有一个非常大的大约 100000 阶的方阵,我想知道该矩阵的行列式值是否为零。
知道这一点的最快方法是什么?
我必须在 C++ 中实现它
我有一个非常大的大约 100000 阶的方阵,我想知道该矩阵的行列式值是否为零。
知道这一点的最快方法是什么?
我必须在 C++ 中实现它
假设您正在尝试确定矩阵是否为非奇异矩阵,您可能需要查看此处:
正如评论中提到的那样,最好使用某种 BLAS 库来为您执行此操作,例如Boost::uBLAS
.
通常,这种大小的矩阵非常稀疏。使用行和列重新排序算法将条目集中在对角线附近,然后使用 QR 分解或 LU 分解。第二个因素的对角线项的乘积 - 直到 QR 情况下的一个符号 - 行列式。这可能仍然过于病态,通过执行奇异值分解获得排名的最佳结果。但是,SVD 更昂贵。
据我所知,您的应用程序不需要计算行列式,但矩阵的秩足以检查方程组是否具有非平凡解:-
有一个属性,如果任何两行相等或一行是另一行的常数倍,我们可以说该矩阵的行列式为零。它也适用于列。