Lanczos 对大矩阵元素有问题吗?

计算科学 本征系统 收敛
2021-11-28 01:15:57

我有一个大但非常稀疏的矩阵,我想对角化。不过,我自己的 Lanczos 实现和 scipy 内置的 ARPACK 都无法正确收敛。我知道我的 Lanczos 代码本身是正确的,ARPACK 实现也应该是正确的。

我注意到我的矩阵的一件事是n-th 行长得像O(n2). 这会导致问题吗?特别是因为 - 由于物理原因 - 我预计与最小(代数)特征值相关的特征向量在这些指数上的权重很小。

编辑:如果我从一个完全非随机的起始向量开始,该向量在第一个元素中的权重为 1,并且在其他任何地方都为零,那么我自己的 Lanczos 和 ARPACK 都会收敛到正确的(LAPACK 密集矩阵对角化)解决方案。在我还没有一些物理直觉的一般环境中,我正在寻找什么特征向量,可以做些什么来对抗大型矩阵元素(对角线和非对角线)?

1个回答

听起来对于您的一般情况,您应该进行某种列和行缩放,有效地使用对角缩放矩阵进行左右预处理。您将计算这些缩放矩阵以尝试使所有矩阵元素处于同一数量级。

示例 让我们使用一个示例2×2矩阵

[2110102×1010]
它有特征向量(大约)[5×1011,1]T[2,1]T. 假设我们将其缩放为
[100105][2110102×1010][100105]
显然特征值不会改变,但特征向量现在是请注意,第一个特征向量的元素彼此相差 6 个数量级,而不是 11 个。当然,第二个特征向量的缩放比例更差,但并不比第一个差。由于特征向量的小元素的准确性取决于它们相对于最大元素的大小,因此这种缩放应该会总体上有所改善。[5×106,1]T[200000,1]

编辑对称 如果是对称的,那么原始特征值问题是如果我们在两边应用对称缩放矩阵,那么 for这以必须解决广义特征值问题为代价来保持对称性(但矩阵只是对角线,所以这可能还不错)。AAx=λxSA

SASy=λS2y
y=S1xB

请注意,以具有良好的舍入元素,例如 2 的精确幂。这使得而不会出现舍入误差,并且只要在浮点范围内,就可以准确存储.SSS2