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



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

非常感谢!

解决方案

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

[~,p] = chol(A)

在我的例子中,确定了从正定到非正定(意思是先奇异后不定)的转换,并且在计算上也是非常有效的。在chol的文档中,检查正定性也优于eigs。然而,如果矩阵只是正的半的-确定的,那么结果似乎有一些混乱,所以如果是这种情况,请小心。


替代解决方案

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

行列式:对于正定矩阵,行列式是正的。然而,对于不定矩阵,它可能是负的——这可能表明转换。不过,一般不建议使用大的近似奇异矩阵的行列式。

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

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

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

D = eigs(A,1,0)

然而,这只找到最接近于零的特征值。即使你做了一个循环,就像我在上面的原始问题中指出的那样,你也不能保证真的找到最低的。在某些情况下,近似奇异矩阵的特征值的精度似乎很低。

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

C = cond(A)

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

相关内容

  • 没有找到相关文章

最新更新