在编译具有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);
答案 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;
}
我从你那里得到了一个不同的错误,但这可能是因为我不得不添加一些关于你实际看到的东西的猜测。在上面的代码中,问题是您混合了double
和float
标量类型。即,
xa = cg.solve(V);
xa
和V
是float
s的向量,而cg
和A
有double
作为标量类型。您必须在这些之间明确转换,因此用
xa = cg.solve(V.cast<double>()).cast<float>();
会解决我的MCVE所带来的问题(也可能是你的问题,我不知道该怎么说)。