贡献者: addis
1要求解对称正定矩阵(symmetric and positively defined, SPD)
要找现成的程序,Eigen 提供 Eigen::ConjugateGradient,适用于对称或者厄米矩阵。密矩阵和稀疏矩阵都可以。
梯度法可以拓展为双共轭梯度法,以适用于任意方矩阵的线性方程组。该方法的优势在于用户只需要向解算器提供矩阵乘矢量的函数,而不需要提供矩阵本身。这样,矩阵可以具有任意的数据结构,例如各种稀疏矩阵。
当矩阵
PBCG 的 C++ 代码见 [1] 的 linbcg.h
。另外 C++ 的 Eigen 库也提供 Eigen::BiCGSTAB
算法。Matlab
也有 x = bicgstab(A,b)
函数(支持复数)。其中 STAB
意思是 stablized
,单纯的 BiCG
据说并不稳定,见 Wikipedia 相关页面(Matlab 的 bicgstab
函数和这里给出的伪代码非常相似)。
[1] ^ W. H. Press, et al. Numerical Recipes 3rd edition.