我注意到 arpack 带有一个驱动程序 dsdrv1,它利用了实值矩阵的对称性。
有没有办法通过 z--- 驱动程序以某种方式类似地利用 Hermitian 矩阵?
该手册在第 3.2.1 节中讨论了 Hermitian 矩阵,但我不确定此分析和建议是否已经存在于 ARPACK 套件中。
我注意到 arpack 带有一个驱动程序 dsdrv1,它利用了实值矩阵的对称性。
有没有办法通过 z--- 驱动程序以某种方式类似地利用 Hermitian 矩阵?
该手册在第 3.2.1 节中讨论了 Hermitian 矩阵,但我不确定此分析和建议是否已经存在于 ARPACK 套件中。
不,对于复杂的 Hermitian 矩阵,没有专门的 ARPACK 例程。
ARPACK 作者建议对 Hermitian 和非 Hermitian 问题znaupd使用该例程:
https://www.caam.rice.edu/software/ARPACK/UG/node43.html#SECTION00790000000000000000
推理(直接引用自 ARPACK 手册):
有时,在
znaupd复杂的 Hermitian 问题上使用时,由于不可避免的舍入误差,特征值将返回具有小但非零的虚部。这些应该被忽略,除非它们对于已计算的最大幅度特征值是显着的。在这种情况下,使用非厄米例程几乎没有计算损失。唯一的额外成本是计算 Hessenberg 的特征值而不是三对角矩阵。
对于该软件旨在解决的问题配置,这些矩阵的大小足够小,与主要的计算成本相比,计算成本的差异可以忽略不计所需的工作。
相关的驱动程序zndrvX是.
另一个似乎实现稀疏 Hermitian eigensolvers 的库是 PRIMME,http://www.cs.wm.edu/~andreas/software/
另一个更大的野兽是SLEPc(建立在 petsc 之上)。它们也提供对稀疏 Hermitian eigensolvers 的支持(用户手册)。
如果没有专门针对稀疏 Hermitian 矩阵的算法,一种实用的替代方法是将问题转换为双倍大小的实矩阵。
例如,在您的问题中写出复杂的矩阵向量乘积, 实部虚部,然后转换为实对称矩阵产品,如
这将使矩阵的存储量增加一倍,并将解决方案成本乘以在哪里是一个小整数(通常为 2 或 3),但它应该始终有效。
在 Hermitian 特征问题的一些应用中,结果是明显比稀疏,并且这种方法可以利用稀疏矩阵算法来利用这种情况。