C++ 超大矩阵的行列式值

C++ 超大矩阵的行列式值,c++,algorithm,matrix,determinants,C++,Algorithm,Matrix,Determinants,我有一个大约100000阶的非常大的平方矩阵,我想知道这个矩阵的行列式值是否为零 知道这一点最快的方法是什么 我必须在C++中实现这一点。有一个属性,如果任意两行相等或一行是另一行的常数倍数,我们可以说该矩阵的行列式为零。它也适用于列。假设您试图确定矩阵是否为非奇异矩阵,您可能希望查看以下内容: 如评论中所述,最好使用某种BLAS库来为您实现这一点,如Boost::uBLAS据我所知,您的应用程序不需要计算行列式,但矩阵的秩足以检查方程组是否有非平凡解:- 通常,这种大小的矩阵非常稀疏。使用行

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

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


我必须在C++中实现这一点。

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

假设您试图确定矩阵是否为非奇异矩阵,您可能希望查看以下内容:


如评论中所述,最好使用某种BLAS库来为您实现这一点,如
Boost::uBLAS

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


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

为自己找到一个好的BLAS实现,并调用它提供的函数。存储该矩阵大约需要80GB,您可能需要重新考虑您的方法。最好使用现有的数学库来完成此类任务,因为它已经过测试。因此,不要为它实现自己的洗涤剂功能!而且,对于如此大的矩阵,计算洗涤剂是一个非常困难的问题。你确定你真的需要它吗?@Ilya嗯,OP不需要计算它。他想知道是不是零。这是完全不同的问题。计算它是一种解决方案。最有可能不是最好的。不过,无论如何,使用现有的库是非常好的建议。这只是一个声明,实际上并不能回答原始海报的问题。我建议您仔细阅读并重新编写您的答案。@r3mus谢谢您,如果您实现了上述语句,难度小于o(n!),如[math.stack]中的链接所述()