我目前正在尝试将我的代码移植到 Trilinos,因为我正在处理的问题对于 LAPACK/ARPACK 来说太大了。具体来说,我正在计算广义特征值/特征向量:
两者都在哪里和大而稀疏。我主要对使用移位反转方法定位特定的内部特征值感兴趣:
这映射了接近的特征值向以便通过迭代方法很容易找到它们。为了避免在前面的表达式中计算逆,我们改为在每次迭代时求解线性系统:
以前我使用 LU 分解来解决这个系统,但是随着矩阵变大,这种方法很笨拙。相反,我正在尝试使用 Belos 来解决 Anasazi eigensolver 包的线性系统。需要注意的重要一点是我的矩阵是复值的,所以 Epetra 不是一个理想的解决方案,我宁愿让 Tpetra 工作。
我一直在看这个Epetra 例子,它定义了一个Anasazi::EpetraGenOp广义算子来解决线性系统。这个广义算子基本上计算换班.
Anasazi::EpetraGenOp在 Anasazi 的 Epetra 适配器中定义,但 Tpetra 适配器似乎没有等效的广义运算符。
我的问题:
使用 Tpetra/Belos/Anasazi 解决移位反转广义特征值问题的正确方法是什么?