我正在利用 SLEPc 库求解大小为 200,000 的矩阵的第一个(其中或)特征值及其对应的向量。该矩阵是稀疏且对称的。我打算在不使用 MPI 的情况下计算特征值,因此整个计算需要 2 分钟以上。我已经尝试过许多特征求解器,例如 Krylov-Schur、Jacobi-Davidson 和 Rayleigh Quotient CG,但完成它们每个的计算都需要大量时间。
相反,Lanczos/Krylov-Schur 非常快地返回频谱的极端特征值。如果我可以为光谱的内部值复制这种行为,那就太棒了。但到目前为止,我还没有遇到任何成功。
有什么方法可以使用单个 MPI 进程加速收敛?调整容差和最大迭代次数并没有帮助。
到目前为止,这些是我尝试过的大小为 51309 x 51309 的稀疏对称矩阵:
./RunPart -eps_type gd -st_type precond -st_pc_type ilu -eps_target 0.01 -eps_tol 1e-6 -eps_conv_abs -eps_nev 5
这需要 42.76 秒来产生 4 个特征值。
./RunPart -st_type sinvert -eps_target 0.001 -st_pc_type ilu -eps_tol 1e-5 -eps_conv_abs -eps_nev 4
这大约需要 13.49 秒,但特征值包含大量错误。
k ||Ax-kx||/||kx||
-------------- ----------------
0.087226 0.0797854
0.088502 0.0947138
0.089405 0.0702111
0.091540 0.0483211
有人可以就这个问题提供一些指导吗?