用SimplicialCholesky Eigen求解大型稀疏线性系统



我实际上是在尝试使用C++lib Eigen来解决大型稀疏线性系统。稀疏矩阵取自此页面。每个系统作为这个结构: Ax = b其中A是稀疏矩阵(n x n(,b计算为A*xe xe维向量n仅包含零。计算x后,我需要计算xex之间的相对误差。我已经编写了一些代码,但我不明白为什么计算结束时相对误差如此之高(1.49853e+08(。

#include <iostream>
#include <Eigen/Dense>
#include <unsupported/Eigen/SparseExtra>
#include<Eigen/SparseCholesky>
#include <sys/time.h>
#include <sys/resource.h>
using namespace std;
using namespace Eigen;
int main()
{
    SparseMatrix<double> mat;
    loadMarket(mat, "/Users/anto/Downloads/ex15/ex15.mtx");
	VectorXd xe = VectorXd::Constant(mat.rows(), 1);
	VectorXd b = mat*xe;
    
    SimplicialCholesky<Eigen::SparseMatrix<double> > chol(mat);
    VectorXd x = chol.solve(b); 
    double relative_error = (x-xe).norm()/(xe).norm(); 
    cout << relative_error << endl;
    
}

矩阵ex15可以从此页面下载。它是一个对称的、正定矩阵。谁能帮我解决问题?提前感谢您的帮助。

根据

此页面,ex15不是完整的排名。您应该检查每个步骤是否顺利:

SimplicialLDLT<Eigen::SparseMatrix<double> > chol(mat);
if(chol.info()!=Eigen::Success)
  return;
VectorXd x = chol.solve(b); 
if(chol.info()!=Eigen::Success)
  return;

然后检查你是否得到了一个解决方案(如果它不是完整的排名并且至少存在一个解决方案,则存在解决方案的整个子空间(:

cout << (mat*x-b).norm()/b.norm() << "n";

相关内容

  • 没有找到相关文章

最新更新