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

时间:2019-01-15 16:04:52

标签: matlab linear-algebra eigenvalue

在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中的变量时)

非常感谢!

1 个答案:

答案 0 :(得分:1)

解决方案

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

[~,p] = chol(A)
在我的情况下,

确定从正定到非正定的过渡(意思是先奇异然后不确定),并且在计算上也非常有效。在chol的文档中,检查正定性也比eigs更为可取。但是,如果矩阵仅是正的限定的,则结果可能会有些混乱,因此请小心。


替代解决方案

我想提出几种可能的解决方案:

行列式: 对于正定矩阵,行列式为正。但是,对于不确定的矩阵,它可能为负-这可能表示过渡。但是,通常不建议使用大的近似奇异矩阵的行列式。

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

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

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

D = eigs(A,1,0)

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

条件编号:Matlabs cond通过执行以下操作返回矩阵的条件编号

C = cond(A)

表示最大特征值与最小特征值之比。条件编号中符号的偏移由此说明了转换。但是,这对我不起作用,因为即使我的特征值是负数,我也只能得到正数的条件数。但是也许在其他情况下也可以。