Я новичок в переполнении стека, поэтому задаю вопрос впервые. Я стремлюсь решить линейное уравнение Ax = b, используя метод сопряженного градиента с неполным предобуславливателем холецкого, используя библиотеку Eigen. Так что я в основном смотрю на алгоритм 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;
}
При компиляции с помощью 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 — мой путь к собственной библиотеке, как указано выше.
#include
и команду g++? Это облегчило бы нам воспроизведение ошибки. - person maij   schedule 12.03.2017