VS版Eigen库求解大型稀疏线性方程组
2017-11-17 12:01
831 查看
众所周知,为了减小稀疏矩阵的存储内存,稀疏矩阵有专门的存储办法。但是怎么求解诸如 Ax=b(这里矩阵A为稀疏矩阵,假设x为列向量,b也为列向量)这样的方程组呢?求解这样的方程组分为两个步骤,一个是对稀疏矩阵A赋值,一个是用solve求解器求解方程组。
要是有帮助到亲的话,可不要忘了给皮皮点个赞呢
#include "stdafx.h" #include<Eigen\Sparse>//包含稀疏矩阵求解; #include<Eigen\Dense> #include<vector> #include<Windows.h>//调用sleep延迟函数; #include<iostream> typedef Eigen::SparseMatrix<double> SparseMatrixType; typedef Eigen::Triplet<double> T; typedef Eigen::SimplicialCholesky<SparseMatrixType> Solve; int _tmain(int argc, _TCHAR* argv[]) { int row_A, col_A,row_b; col_A = 100; row_A = 100; row_b = row_A; //声明方程组的变量; SparseMatrixType A(row_A,col_A); Eigen::VectorXd x; Eigen::VectorXd b; std::vector<T> tripletlist; //给向量b赋值; b.resize(row_b); for (int i = 0; i < row_b; i++) { b(i) = i + 1; } //给稀疏矩阵A赋值; for (int i = 0; i < row_A; i++) { for (int j = 0; j < col_A; j++) { tripletlist.push_back(T((i + 3) % row_A, j, i + j)); tripletlist.push_back(T(i, j, i + 1)); } } A.setFromTriplets(tripletlist.begin(), tripletlist.end()); A.makeCompressed(); //求解; Solve *p_A = new Solve(A); x = p_A->solve(b); for (int i = 0; i < x.size(); i++) { std::cout << x(i) << " "; } Sleep(20000); return 0; }运行结果如下:
要是有帮助到亲的话,可不要忘了给皮皮点个赞呢
相关文章推荐
- HYPRE并行库进行稀疏线性方程组求解
- Eigen教程5 - 求解稀疏线性方程组
- 求解线性方程组----Matlab
- Matlab线性方程组求解
- 算法总结之求解模线性方程组
- 工作规划(1) 基于LU分解的千万阶稀疏矩阵求解器
- 直接法(高斯)求解线性方程组
- 【刘庆源码共享】稀疏线性系统求解算法 之 高斯-塞德尔算法(Gauss_Seide)GS类声明(C++)
- 各种线性方程组求解算法的C++实现
- 线性方程组求解库
- 高斯消元法——求解线性方程组
- 有关线性方程组求解的理解
- 【刘庆源码共享】稀疏线性系统求解算法 之 高斯-塞德尔算法(Gauss_Seide)GS类定义(C++)
- 高斯列主元消元法求解线性方程组
- <转>线性方程组求解
- 稀疏矩阵求解的一点总结
- 用sparselib库解稀疏矩阵线性方程组
- 求解这个矩阵形式的HTML5线性方程组
- 主元高斯消去法求解线性方程组 C#源码
- 求解线性方程组--高斯消去法