【问题标题】:Smallest eigenvalue for large nearly singular matrix大型近奇异矩阵的最小特征值
【发布时间】:2019-06-09 16:26:11
【问题描述】:

在 Matlab 中,我有一个实数且对称的 n x n 矩阵 A,其中 n > 6000。即使 A 是正定的,它也接近奇异矩阵。对于改变的特定变量,A 从正定变为奇异再到不定。我要确定 A 何时变为单数。我不相信行列式,所以我正在查看特征值,但我没有内存(或时间)来计算所有 n 个特征值,而且我只对最小的感兴趣 - 特别是当它从正转负。我试过了

D = eigs(A,1,'smallestabs')

通过它我失去了特征值的符号,并且通过

D = eigs(A,1,'smallestreal')

Matlab 无法获得收敛的最低特征值。然后我尝试定义一个移位值,例如

for i = 1:10 
   if i == 1
      D(i) = eigs(A,1,0) 
   else
      D(i) = eigs(A,1,D(i-1))
   end
end

我在最后一个最低特征值的范围内查找。但是,特征值似乎表现得很奇怪,我不确定我是否真的找到了真正的最低值。

所以,关于如何做的任何想法

  • 毫无疑问,用“eigs”找到最小的特征值,或者
  • 通过另一种方式确定 A 何时变为单数(更改 A 中的变量时)

非常感谢!

【问题讨论】:

  • 不应该用条件数,而不是最小特征值,来评估矩阵是否接近奇异吗?见cond
  • 嗯,关键是我知道它接近单数,但需要建立一个标准,以确定它何时从正定超过单数变为不定。我可以通过条件号来做到这一点吗?
  • 当然。它是最大和最小特征值之间的比率。所以总比只观察最小的特征值要好
  • 嗯,随着矩阵变得奇异,最小特征值趋近于零,条件数爆炸。由于条件数爆炸,矩阵的数值好转变成了彻底的数值粗略,特征值方法可能会受到A 的频谱的影响。不知道更多关于A 的信息限制了我认为可以给出的建议。但我同意@Luis 的观点,condrcond 可能是更健壮的路径。
  • 我不太确定条件编号和“条件”命令。即使我处于“eigs”给我负特征值的范围内,我也只能得到一个正条件数......?

标签: matlab linear-algebra eigenvalue


【解决方案1】:

解决方案

我似乎已经解决了我的特殊问题。 Matlabs 命令chol 有可能返回一个值p,如果矩阵是正定的,则​​该值为零。因此,执行

[~,p] = chol(A)

在我的例子中,它决定了从正定到非正定的转换(意味着先单数然后不定),并且在计算上也非常有效。在chol 的文档中,它也优于eigs 来检查正定性。但是,如果矩阵只是-正定矩阵,则结果似乎有些混乱,因此在这种情况下要小心。


替代解决方案

我遇到了几种可能的解决方案,我想说明一下:

行列式: 对于正定矩阵,行列式是正的。但是,对于不定矩阵,它可能是负数 - 这可能表明转换。不过,通常不建议使用大型近奇异矩阵的行列式。

特征值:对于正定矩阵,所有特征值的实部都是正的。如果至少一个特征值为零,则矩阵是奇异的,如果一个为负而其余为正,则矩阵是不确定的。检测最低特征值的符号偏移指示矩阵变为奇异的点。在matlab中,可以找到最低特征值

D = eigs(A,1,'smallestreal')

但是,在我的情况下,Matlab 无法执行此操作。或者,您可以尝试在零附近搜索:

D = eigs(A,1,0)

然而,这只会找到最接近零的特征值。即使您像我上面的原始问题中指出的那样进行循环,也不能保证您实际上找到了最低的。在某些情况下,几乎奇异矩阵的特征值的精度似乎很低。

条件数:Matlabscond通过执行返回矩阵的条件数

C = cond(A)

它表示最大特征值与最低特征值的比率。条件编号中的符号偏移由此表明了转移。然而,这对我不起作用,因为即使我有负特征值,我也只能得到正条件数。但也许它会在其他情况下起作用。

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 2023-04-11
    • 2017-04-10
    • 1970-01-01
    • 2019-08-18
    • 2015-11-28
    • 2011-03-08
    • 2019-04-29
    相关资源
    最近更新 更多