大的近奇异矩阵的最小特征值
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
我在最后一个最低特征值的范围内查看。然而,特征值似乎表现得很奇怪,我不确定我是否真的找到了真正的最低值。
所以,关于如何
的任何想法
- 毫无疑问找到具有'eigs'或
的最小特征值
- 通过另一种方式确定 A 何时变为单数(当更改 A 中的变量时)
非常感谢!
解决方案
我似乎已经解决了我的特殊问题。 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)
表示最大特征值与最小特征值之比。条件数中符号的转变由此表示转变。然而,这对我不起作用,因为即使我有负特征值,我也只能得到正条件数。但也许它会在其他情况下起作用。
在 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
有可能 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)
表示最大特征值与最小特征值之比。条件数中符号的转变由此表示转变。然而,这对我不起作用,因为即使我有负特征值,我也只能得到正条件数。但也许它会在其他情况下起作用。