【发布时间】:2019-04-09 12:09:46
【问题描述】:
我实际上是在尝试使用 C++ lib Eigen 解决大型稀疏线性系统。
稀疏矩阵取自 page。每个系统都具有这种结构:Ax = b 其中A 是稀疏矩阵(n x n),b 计算为A*xe,xe 维数为 n 的向量仅包含零。在计算x 之后,我需要计算xe 和x 之间的相对误差。我已经编写了一些代码,但我不明白为什么在计算结束时相对误差如此之高(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可以从这个page下载。它是一个对称的正定矩阵。谁能帮我解决这个问题?提前感谢您的帮助。
【问题讨论】:
-
你有没有在一个更简单的矩阵上测试过这个,结果是已知的,预期的结果?
-
嗨 Scott,ex15 矩阵是一个非常简单的稀疏矩阵。我使用 Matlab 对同一系统的解决方案作为基准。
标签: c++ sparse-matrix linear-algebra eigen