具有不完全cholesky预处理器的共轭梯度返回特征库的意外错误

时间:2017-03-12 05:56:52

标签: c++ eigen eigenvalue eigenvector eigen3

我是堆叠溢出的新手,所以第一次发布一个问题。 我的目标是利用共轭梯度技术和不完全的cholesky预处理器,利用特征库来求解线性方程Ax = b。所以我基本上看的是ICCG算法。据我所知,本征库允许将预处理器集成到共轭梯度求解器中。我有一个简单的虚拟代码,无法执行。

#include <iostream>
#include <Eigen>
using namespace std;
int main()
{
    int n = 10;
    SparseMatrix<double> A = MatrixXd::Random(n,n).sparseView(0.5,1);
    VectorXd b(n),x(n);
    /* Eigen::ConjugateGradient<SparseMatrix<double>, Eigen::Lower|Eigen::Upper, IdentityPreconditioner> cg;  */
    Eigen::ConjugateGradient<SparseMatrix<double>, Eigen::Lower, IncompleteCholesky> cg;
    cg.compute(A);
    x = cg.solve(b);
    x = cg.solve(b);
    return 0;
}

使用g ++进行最大优化(-O3)编译时,会抛出以下错误:

../PracTemplates.cpp:62:94: error: type/value mismatch at argument 3 in template parameter list for 'template<class _MatrixType, int _UpLo, class _Preconditioner> class Eigen::ConjugateGradient'

我也遇到与.compute()和.solve()相关的错误,但我认为这些与上述错误的问题有关。

然而,共轭梯度技术与身份预处理器一起使用。

从错误判断我明显遗漏了对象声明中的某些内容。任何帮助将不胜感激。谢谢。

PS:我正在使用Eclipse IDE,所以我所做的就是在“路径和符号”选项卡中包含我的特征库“D:\ C ++ Development \ Eigen”的路径。

编译命令:

g++ -I$PATH -O3 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"PracTemplates.d" -MT"PracTemplates.o" -o "PracTemplates.o" "../PracTemplates.cpp"

其中“PracTemplates.cpp是我文件的名称,$ PATH是我上面指定的特征库的路径。

1 个答案:

答案 0 :(得分:2)

IncompleteCholesky是一个包含3个模板参数的模板类。最后两个是选项,但您需要指定第一个,即标量类型:

typedef ConjugateGradient<SparseMatrix<double>,Lower, IncompleteCholesky<double> > ICCG;