错误:没有匹配函数来调用" conjugate_gradient'在特根图书馆

时间:2018-04-25 19:02:05

标签: c++ sparse-matrix eigen

在编译具有Eigen库的c ++编码时,我遇到了以下错误

  

错误:没有匹配函数来调用" conjugate_gradient'在   特征图书馆

以下是代码:

SparseMatrix<double> A(truncatedSize,truncatedSize);
for(int i=0;i<truncatedSize;i++)
{
    for(int j=0;j<truncatedSize;j++)
    {
        A.insert(i,j)=TruncatedGlMatrix[i][j];
    }
}

VectorXf V(truncatedSize);
for(int i=0;i<truncatedSize;i++)
{       
    V(i)=TruncatedForce[i][1];
}

// solve Ax = b
ConjugateGradient<SparseMatrix<double>, Lower|Upper> cg;
cg.compute(A);

VectorXf xa(truncatedSize);
xa = cg.solve(V);

1 个答案:

答案 0 :(得分:2)

您确实需要将其显示为MCVE。如果你嘲笑了一下,可能是你的结果:

#include <Eigen/Core>
#include <Eigen/Sparse>

using namespace Eigen;

int main()
{
    int truncatedSize = 50;
    SparseMatrix<double> A(truncatedSize, truncatedSize);

//  We have no idea what TruncatedGlMatrix or TruncatedForce are...
//  for (int i = 0; i < truncatedSize; i++)
//  {
//      for (int j = 0; j < truncatedSize; j++)
//      {
//          A.insert(i, j) = TruncatedGlMatrix[i][j];
//      }
//  }

    VectorXf V(truncatedSize);
//  for (int i = 0; i < truncatedSize; i++)
//  {
//      V(i) = TruncatedForce[i][1];
//  }

    // solve Ax = b
    ConjugateGradient<SparseMatrix<double>, Lower | Upper> cg;
    cg.compute(A);

    VectorXf xa(truncatedSize);
    xa = cg.solve(V);
    return 0;
}

我从你那里得到了一个不同的错误,但这可能是因为我不得不添加一些关于你实际看到的东西的猜测。在上面的代码中,问题是您混合了doublefloat标量类型。即,

xa = cg.solve(V);

xaVfloat s的向量,而cgAdouble作为标量类型。您必须在这些之间明确转换,因此用

替换该行
xa = cg.solve(V.cast<double>()).cast<float>();

会解决我的MCVE所带来的问题(也可能是你的问题,我不知道该怎么说)。