非常大矩阵的行列式值
Posted
技术标签:
【中文标题】非常大矩阵的行列式值【英文标题】:Determinant Value For Very Large Matrix 【发布时间】:2013-12-11 05:17:29 【问题描述】:我有一个大约 100000 阶的非常大的方阵,我想知道该矩阵的行列式值是否为零。
知道这一点的最快方法是什么?
我必须在 C++ 中实现它
【问题讨论】:
给自己找一个好的 BLAS 实现,然后调用它给你的函数。 大约 80GB 来存储该矩阵,您可能需要重新考虑您的方法。 最好使用现有的数学库来完成此类任务,因为它已经过测试。所以不要为它实现你自己的威慑功能!此外,计算这么大的矩阵的行列式是非常困难的问题。你确定,你真的需要它吗? @Ilya 好吧,OP 不需要计算它。他想知道它是否为零。这是完全不同的问题。计算它是一种解决方案。很可能不是最好的。 无论如何,使用现有的库是非常好的建议。 【参考方案1】:假设您正在尝试确定矩阵是否为非奇异矩阵,您可能需要查看此处:
https://math.stackexchange.com/questions/595/what-is-the-most-efficient-way-to-determine-if-a-matrix-is-invertible
正如 cmets 中提到的,最好使用某种 BLAS 库来为您执行此操作,例如 Boost::uBLAS
。
【讨论】:
【参考方案2】:通常,这种大小的矩阵非常稀疏。使用行和列重新排序算法将条目集中在对角线附近,然后使用 QR 分解或 LU 分解。第二个因素的对角线项的乘积 - 直到 QR 情况下的一个符号 - 行列式。这可能仍然过于病态,通过执行奇异值分解获得排名的最佳结果。但是,SVD 更昂贵。
【讨论】:
【参考方案3】:有一个性质,如果任何两行相等或一行是另一行的常数倍,我们可以说该矩阵的行列式为零。它也适用于列。
【讨论】:
这只是一个声明,实际上并不能回答原始发布者的问题。我建议您阅读 how to answer 并重新制定您的答案。 @r3mus 谢谢你,如果你实现了上面的语句难度小于 o(n!) 如这个链接中提到的 [math.stack] (math.stackexchange.com/questions/595/…)【参考方案4】:据我所知,您的应用程序不需要计算行列式,但矩阵的秩足以检查方程组是否具有非平凡解:-
Rank of Matrix
【讨论】:
以上是关于非常大矩阵的行列式值的主要内容,如果未能解决你的问题,请参考以下文章