如何在C ++中快速对齐矩阵?

时间:2013-10-25 20:54:30

标签: c++ linear-algebra eigen armadillo diagonal

我不知道选择哪个库(对于Windows):LAPACK ++,Armadillo,IT ++,Eigen,还是其他什么?

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

另外,我很高兴知道每个库的优缺点是什么。

3 个答案:

答案 0 :(得分:4)

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

因此,我的建议是,通过放弃您正在寻找的信息的准确性粒度来获得速度

答案 1 :(得分:1)

你可能想要考虑到这一点,但是here是Eigen开发者发布的一些基准测试。除了Eigen之外,我从未使用任何其他线性代数库,但您的需求可能与我的不同。

答案 2 :(得分:-3)

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