使用 arpack 迭代获得 m 个特征向量:如果我有一个好的初始猜测,我该如何使用它?

计算科学 特征值
2021-11-29 00:04:44

我正在尝试 arpack 驱动程序dsdrv1,它用于从特征值问题中迭代地获取前 m 个特征向量。

A^x=λx

由于它是一个迭代过程,一个好的初始猜测将减少收敛所需的迭代次数。最好的初始猜测之一可能是正确的特征向量(例如,从之前的运行中获得)。

使用 arpack 的 dsdrv1 驱动程序,您可以通过传递给 dsaupd 的 NxN残差数组提供初始猜测,如果您只计算一个特征向量,这很好。但是,我正在计算我的特征向量。

即假设我有 m 个从 dsdrv1 的先前运行中获得的正确特征向量。我将如何利用这些向量来最小化对 dsdrv1 的新调用中的迭代次数。

我尝试通过将最低收敛特征向量分配给残差数组并将 info 设置为 1 来将最低收敛特征向量反馈回过程。如果我只计算第一个特征向量,则只需要几次迭代。但是当我计算更多时,初始猜测比随机初始向量差。我还尝试将所有特征向量的平均值作为初始猜测,但也没有运气。

简而言之,如果我有来自成功 dsdrv1 计算的所有数据,我可以使用它来最小化第二次 dsdrv1 运行中应用于相同特征值问题的迭代次数吗?

1个回答

由于没有其他人对此做出回应,因此我将对其进行尝试。

我怀疑您是否会在 Arpack 中找到您正在寻找的选项。这就是我这么认为的原因。Arpack 中的算法基于构造一个称为 Krylov 序列的向量子空间,如下所示

K={x,Ax,A2x,A3x...Anx}

在哪里x是您可以根据需要指定的单个向量。如果您可以设置多个向量,则子空间不一定是算法所需的 Krylov 序列。

你说你选择起点的经验很差x作为先前分析的第一个特征向量。当您想要计算多个特征值时,这是一个特别糟糕的选择,这是有充分理由的。如果你仔细观察 Krylov 序列,你会发现它只是实现了计算 A 的最大特征值对应的特征向量的幂方法。x是对具有最大特征值的特征向量的相对较好的近似,所有剩余向量也越来越好地近似于第一个特征向量。完整的子空间几乎没有您要计算的其他特征向量的分量。

如果您愿意考虑替代特征值求解器和算法,则子空间迭代算法在您的特定情况下可能更有效。它与基于 Krylov 的求解器(如 Arpack)有一些相似之处,但通常效率较低。但是,它允许您指定任意向量子空间,就像您之前的一组特征向量一样,这可以显着提高其效率。软件包SLEPc在其众多选项中包括一个子空间迭代算法。