【问题标题】:Find smallest eigenvalue exactly准确地找到最小的特征值
【发布时间】:2014-03-05 20:09:04
【问题描述】:

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

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

矩阵将很小(比如小于 20 x 20),具有整数值。例如,当我说确切的答案时,我的意思是类似于 the answer of John Habert 中的答案。

【问题讨论】:

  • 你能准确定义你的意思吗?我们在谈论什么类型的矩阵?什么尺寸?
  • 我认为你不能在所有情况下都得到准确的答案,即使对于具有整数元素的矩阵也是如此。

标签: python math numpy scipy sympy


【解决方案1】:

特征值是algebraic numbers,即某个多项式的根。该多项式的次数将是矩阵维度。对于 4 次以下的多项式,您原则上可以将这些数字写为嵌套根,但除此之外,通常无法准确地表示特征值。即使在可能的情况下,您肯定也不想看到确切的值,这里是一个看似无辜的小矩阵的示例:

【讨论】:

    【解决方案2】:

    从您的帖子中,尚不清楚矩阵是否是 Hermitian。我不知道一般情况下的方法。

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

    你可以从 mu = 0 开始算法;然后使用瑞利商 http://en.wikipedia.org/wiki/Rayleigh_quotient_iteration 通常会给你非常快速的收敛。该方法涉及线性方程组的求解(或者,在某种程度上,逆矩阵的计算),但如果矩阵再次是 Hermitian,您可以为其生成 Cholesky 分解,然后使用生成的三角矩阵解决系统问题。

    在某些情况下,该方法会收敛到不正确的特征值(例如,靠近最小值)。

    另外,一个有趣的观察是矩阵 A 的最大特征值等于该矩阵的范数(其元素的平方和的平方根)。 A 的 SMALLEST 特征值等于 1 除以 A 的 INVERSE 的范数。所以,如果你的矩阵不是很大并且它的逆存在,你可以把它倒置,然后做它,然后计算 1/norm (inv(A))。该值将是 A 的 SMALLEST 特征值。

    【讨论】:

    • 我不是数值分析师,但看起来逆迭代给出了特征值的数值近似值,而不是 OP 正在寻找的确切特征值。而且我不认为最后一段是真的:[[1 0] [0 2]] 有范数√5。也许范数限制了特征值?
    • 是的,你是对的,它会给出一个近似值,可能不是 OP 可能想要的。 Matlab 为您的矩阵提供了一个 norm = 2。也许是因为它计算了 L2 范数。您指的是 Frobenius 范数,即 sqrt(5)。当我说最大特征值等于“矩阵元素平方和的平方根”时,我是不正确的。实际上有不同的规范:mathworld.wolfram.com/MatrixNorm.htmlmathworld.wolfram.com/FrobeniusNorm.html 感谢您指出这种歧义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多