C++实现共轭梯度法求解线性方程组
在科学计算中,求解线性方程组是一个重要的问题。而共轭梯度法(Conjugate Gradient Method)是一种高效的求解线性方程组的方法之一。本文将介绍如何使用C++实现共轭梯度法求解形如 A*x=b 的线性方程组。
共轭梯度法的优点在于,它可以快速收敛到精确解,并且能够处理大规模稀疏矩阵。该方法基于迭代求解,每次迭代都会使误差减小一定的倍数。其中,共轭指的是在每次迭代过程中,两个向量相互垂直。
下面是求解线性方程组的C++代码实现,其中主函数为CGSolver:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
//通过dot()函数计算两向量的内积
double dot(vector<double>& u, vector<double>& v) {
double res = 0;
for (int i = 0; i < u.size(); ++i)
res += u[i] * v[i];
return res;
}
//通过matVecMul()函数计算矩阵A与向量x的乘积
vector<double> matVecMul(vector<vector<doubl