【发布时间】: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 的观点,cond或rcond可能是更健壮的路径。 -
我不太确定条件编号和“条件”命令。即使我处于“eigs”给我负特征值的范围内,我也只能得到一个正条件数......?
标签: matlab linear-algebra eigenvalue