如何快速准确地获得特征值和特征向量?

Ell*_*ski 2 c++ matlab linear-algebra eigenvalue eigenvector

我需要计算一个大矩阵的特征值和特征向量(大约1000 * 1000甚至更多)。Matlab的工作速度非常快,但不能保证准确性。我需要它是非常准确的(大约1e-06错误是可以的)并且在合理的时间内(一两个小时可以)。

我的矩阵对称且稀疏。确切的值是:对角线,主对角线下方,对角线上方和对角线上的值。例:

范例矩阵

我怎样才能做到这一点?C ++对我来说最方便。

Eit*_*n T 5

MATLAB不保证准确性

我认为这种说法是不合理的。您说基于什么理由,您可以找到(比)MATLAB高度精炼的计算算法更准确的实现?

AND ...使用MATLAB的eig,不到半秒即可计算出以下内容:

%// Generate the input matrix
X = ones(1000);
A = triu(X, -1) + tril(X, 1) - X;

%// Compute eigenvalues
v = eig(A);
Run Code Online (Sandbox Code Playgroud)

很快就好!

我需要它非常准确(大约1e-06错误是可以的)

请记住,准确求解特征值与找到特征多项式的根有关。这个特定的1000x1000矩阵病态 严重

>> cond(A)

ans =
    1.6551e+003
Run Code Online (Sandbox Code Playgroud)

一般的经验法则是,对于10 k的条件数,您可能会损失多达k位的精度(最重要的是,由于算术方法的精度下降,数值方法会损失精度)。

因此,在您的情况下,我希望结果的准确度可以达到10 -3的近似误差。

  • @TylerJandreau 问题是关于准确计算特征值,我推断如果 MATLAB 足够准确,就足够了。似乎不可能以要求的精度为此类矩阵以数字方式计算特征值,因此没有理由对 MATLAB 的答案不满意。你为什么对我的回答投反对票? (2认同)