C++实现共轭梯度(CG)算法
1.原理
对多元函数极值求解
2.针对A取正定矩阵
3.代码
#include<iostream>
#include<vector>
using namespace std;
double C = 0;
vector<double> B = {
-4,0 };
vector<double> X_0;
vector<vector<double>> A = {
{
2.0,-2.0},{
-2.0,4.0} };
vector<double> mat_vect(const vector<double>& vect)
{
vector<double> ans;
int m = A.size(), n = A[0].size();//矩阵的行数 m 列数 n
for (int i = 0; i < m; ++i)
{
//for (int j = 0; j < 1; ++j)
// {
double tmp = 0;
for (int j = 0; j < n; ++j) tmp += A[i][j] * vect[j];// A*x
ans.push_back(tmp);
// }
}
return ans;
}
vector<double> get_grad(