大的近奇异矩阵的最小特征值

Smallest eigenvalue for large nearly singular matrix

在 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

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

所以,关于如何

的任何想法

非常感谢!

解决方案

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

[~,p] = chol(A)

在我的例子中确定了从正定到非正定的过渡(意味着首先是单数然后是不确定),并且在计算上也非常有效。在 chol 的文档中,它也优于 eigs 检查正定性。但是,如果矩阵只是正 semi-definite,结果似乎有些混乱,所以如果是这种情况,请小心。


替代解决方案

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

行列式: 对于正定矩阵,行列式为正。但是,对于不定矩阵,它可能为负 - 这可能表示过渡。但是,通常不推荐大型近奇异矩阵的行列式。

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

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

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

D = eigs(A,1,0)

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

条件数: Matlabs cond returns矩阵的条件数通过执行

C = cond(A)

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