C ++:使用Spectra计算特征值时的内存问题

时间:2017-11-01 23:45:11

标签: c++ memory segmentation-fault eigen

我使用名为Spectra的库来计算Eigen稀疏矩阵的特征值。包提供的sample code表示我们应该这样做:

// Construct matrix operation object using the wrapper class SparseGenMatProd
SparseGenMatProd<double> op(M);

// Construct eigen solver object, requesting the largest three eigenvalues
GenEigsSolver< double, LARGEST_MAGN, SparseGenMatProd<double> > eigs(&op, 3, 30);

// Initialize and compute
eigs.init();
int nconv = eigs.compute();

// Retrieve results
Eigen::VectorXcd evalues;
if(eigs.info() == SUCCESSFUL)
    evalues = eigs.eigenvalues();

在上面和下面的代码摘录中,MEigen::SparseMatrix<double>。但是,我的稀疏矩阵非常大,会占用大量内存。使用示例代码会导致分段错误。因此,我必须通过执行以下操作在堆上创建矩阵操作对象:

SparseGenMatProd<double>* op = new SparseGenMatProd<double>(M);

// Construct eigen solver object, requesting the smallest three eigenvalues
GenEigsSolver< double, SMALLEST_MAGN, SparseGenMatProd<double> >* eigs = new GenEigsSolver< double, SMALLEST_MAGN, SparseGenMatProd<double> >(op, 3, 30);

// Initialize and compute
eigs->init(); int nconv = eigs->compute();

遗憾的是,这并没有解决问题。我仍然看到分段错误。我不确定是否因为我的矩阵M太大而我应该通过引用传递它(如果我还没有这样做)。如果是这样,我该怎么做呢?

0 个答案:

没有答案