2014-02-08 93 views
3

我想找到矩阵的最小(绝对值)非零特征值。我可以使用numpy使用浮点运算来做到这一点,但准确找到最小特征值

  • 有没有办法得到确切的答案?
  • 你必须为此使用sympy还是有其他方法?

矩阵将会很小(比如小于20乘以20)整数值。当我说出确切的答案时,我的意思是与the answer of John Habert中的那些例子类似。

+0

你能确定你的意思吗?我们在谈论什么类型的矩阵?什么尺寸? –

+0

我不认为你可以在所有情况下得到确切的答案,即使对于具有整数元素的矩阵。 – user2357112

回答

7

特征值是algebraic numbers,即一些多项式的根。该多项式的程度将是矩阵维数。对于多项式达到4级,原则上能够将这些数字写成嵌套根,但除此之外,通常无法准确表示特征值。即使在情况下,这将是可能的,你当然不希望看到的精确值,这里是一个傻傻的看着小矩阵的例子:

1

从您的文章,目前尚不清楚是否矩阵将是Hermitian。我不知道一般情况下的方法。

但是!如果矩阵是Hermitian(对称正定),则可以避免计算所有的特征值,如果你只需要最小的那个(这将是正的)。您可以使用反向迭代。 http://en.wikipedia.org/wiki/Inverse_iteration

你可以用mu = 0开始算法;然后使用瑞利商 http://en.wikipedia.org/wiki/Rayleigh_quotient_iteration这通常会给你非常快的收敛。该方法涉及方程的线性系统的解(或者,稍微等价地计算逆矩阵),但是如果矩阵又是厄米特矩阵,则可以为其生成Cholesky分解,然后使用得到的三角矩阵解决系统问题。

在某些情况下,该方法会收敛到不正确的特征值(比如,最小的旁边)。另外,有趣的观察结果是矩阵A的最大特征值等于该矩阵的范数(其元素的平方和的平方根)。 A的SMALLEST特征值等于1除以A的INVERSE的范数。因此,如果你的矩阵不是很大并且它的逆矩阵存在,那么你可以负反转它,然后执行它,然后计算1 /范数(INV(A))。这个值将是A的最小特征值。

+0

我不是数值分析师,但它看起来像逆迭代给出了特征值的数值近似值,而不是OP正在寻找的确切特征值。我不认为最后一段是真的:[[1 0] [0 2]]的规范是√5。也许规范限制了特征值? – Teepeemm

+0

是的,你是对的,它会给出一个近似值,也许不是OP可能想要的。 Matlab为我的矩阵提供了一个标准= 2。也许是因为它计算了L2规范。你可以参考sqrt(5)的Frobenius规范。当我说最大的特征值等于“矩阵元素平方和的平方根”时,我是不正确的。 其实有不同的规范: http://mathworld.wolfram.com/MatrixNorm.html http://mathworld.wolfram.com/FrobeniusNorm.html 感谢您指出这种模糊性。 – Lelik