线性求解器C++API源码(含列选主元高斯消去法,共轭梯度法,Gmres法)

前言

本文集合了Gauss消去法, 共轭梯度法, Gmres方法的线性求解器的源码。同时集成了API方便调用,支持读取文本形式的矩阵数据。更进一步集成Matrix Market 的接口, 可以将在 Matrix Market 下载的数据直接读如测试。同时对共轭梯度法和 Gmres 方法都做了预条件矩阵。

部分源码

#ifndef Matrix_H
#define Matrix_H


#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <math.h>


using namespace std;

enum SolverType {GAUSS_SOLVER, CG_SOLVER, GMRES_SOLVER, UNKNOWN_METHOD};
static const string SolverTypeName[] = {"GAUSS_SOLVER", "CG_SOLVER", "GMRES_SOLVER", "UNKNOWN_METHOD"};

class Matrix
{
//......
}

//列压缩矩阵
class CSRMatrix : public Matrix
{
//.....
}

//预条件矩阵
class Preconditioner
{
//....
}

class GaussEliminationSolver
{
//.....
}

class ConjugateGradientSolver
{
//....
}

class GMRESSolver
{
//....
}


class LinearSolverAPI
{
	public:
	/*
	.......
	*/
	public:
    	void setSolverType(const SolverType& solverType) {_solverType = solverType;}
    	bool solve();
		bool checkSolution();
	private:
		bool cgSolverApi();
		bool gmresSolveApi();

	public:
		// all function is for test
		bool readMatrixFromMatrixMarket(const string& fileName);
		bool buildRightVector();
		bool readData(const string& fileName, bool isIndexFromZero);


  private:
    map<unsigned int, map<unsigned int, double> > _A;
    vector<double> _x;
    vector<double> _b;
    double _eps;
    double _norm2Error;
    SolverType _solverType;

};

源码

完整源码请到我的博客的资源页面下载使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值