VS版Eigen库求解大型稀疏线性方程组

来源:互联网 发布:灰度共生矩阵14个特征 编辑:程序博客网 时间:2024/05/21 19:36

       众所周知,为了减小稀疏矩阵的存储内存,稀疏矩阵有专门的存储办法。但是怎么求解诸如 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;}
运行结果如下:

要是有帮助到亲的话,可不要忘了给皮皮点个赞呢吐舌头

原创粉丝点击