如何在C++中快速对角化矩阵

How do I diagonalize a matrix quickly in C++?

本文关键字:C++      更新时间:2023-10-16

我不知道选择哪个库(适用于Windows):LAPACK++,Armadillo,IT++,Eigen,或者其他什么?

我需要做的就是检查一个大的(大约 10,000*10,000)矩阵是否可对角化,如果是,则获得对角线和可逆矩阵,使得 D=(P^(-1))*A*P。这必须尽快完成。我不知道要使用哪个库。

另外,我很乐意大致了解这些库中每个库的优缺点。

这可能是一个相当模糊的答案,因为我不知道你面对的确切问题是什么,但通常情况下,你实际上并不需要所有这些信息,即你只关心矩阵的特征值和最多的能量; 至于其余的 - 如果你有 0.001 作为特征值(可对角化矩阵)还是 0.000(不可对角化)真的重要吗?对于许多现实世界(甚至理论)的应用程序,答案是"不是真的"。

因此,我的建议是,通过放弃所需信息的准确性或粒度来提高速度

你可能想对此持保留态度,但这里有一些由 Eigen 开发人员发布的基准测试。除了本征之外,我从未使用过任何其他线性代数库,但您的需求可能与我的不同。

就查找行列式而言,您可以使用许多不同的实现。一种是使用高斯消除来创建上/下三角矩阵 - 这是有益的,因为您只需在对角线上乘以得到行列式。如果任何行或任何列最终归零,则行列式将为 0,并且矩阵不会有逆函数。您实际上可以使用此方法并用单位矩阵增强矩阵并执行完整的高斯-乔丹消除并将原始矩阵转换为单位矩阵,如 http://www.mathportal.org/linear-algebra/matrices/gauss-jordan.php 所示。

相关文章:
  • 没有找到相关文章