gpt4 book ai didi

c++ - 共轭梯度与不完整的 cholesky 预调节器返回 Eigen 库的意外错误

转载 作者:行者123 更新时间:2023-11-30 02:26:32 24 4
gpt4 key购买 nike

我是堆栈溢出的新手,所以第一次发布问题。我的目标是使用具有不完全 cholesky 预条件子的共轭梯度技术,利用 Eigen 库来求解线性方程 Ax =b。所以我主要关注的是 ICCG 算法。据我所知,Eigen 库允许将预处理器集成到共轭梯度求解器中。我有一个无法执行的简单虚拟代码。

#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;
}

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

../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 是我上面指定的特征库的路径。

最佳答案

IncompleteCholesky 是一个带有 3 个模板参数的模板类。最后两个是可选的,但是你需要指定第一个,也就是标量类型:

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

关于c++ - 共轭梯度与不完整的 cholesky 预调节器返回 Eigen 库的意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42744281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com