与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误



我是堆栈溢出的新手,因此第一次发布问题。我的目的是使用不完整的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)的汇编(-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 开发 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是我通往上面指定的特征库的路径。

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

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

最新更新