Eigen SparseLU вопрос факторизации - PullRequest
0 голосов
/ 03 декабря 2018

Я использую библиотеку Eigen, но следующий код не может быть скомпилирован:

Eigen::SparseMatrix<double, Eigen::ColMajor> test(100, 100);
Eigen::SparseLU<Eigen::SparseMatrix<double, Eigen::ColMajor>, Eigen::COLAMDOrdering<Eigen::DenseIndex>> test_slv;
test_slv.analyzePattern(test);
test_slv.factorize(test);

Я получаю следующий вывод:

c: \ users \ user \ source \ repos \cartel \ cartel \ include \ eigen \ src \ core \ solvetriangular.h (247): ошибка C2280: 'Eigen :: Block & Eigen :: Block :: operator = (const Eigen :: Block &)': попытка обратиться к удаленномуфункция с [Derived = Eigen :: Matrix] c: \ users \ user \ source \ repos \ cartel \ cartel \ include \ eigen \ src \ core \ block.h (143): примечание: компилятор сгенерировал 'Eigen :: Block:: operator = 'здесь с [Derived = Eigen :: Matrix] c: \ users \ user \ source \ repos \ cartel \ cartel \ include \ eigen \ src \ core \ block.h (143): примечание:' Eigen:: Block & Eigen :: Block :: operator = (const Eigen :: Block &) ': функция была неявно удалена, поскольку базовый класс вызывает удаленную или недоступную функцию' Eigen :: BlockImpl :: StorageKind> & Eigen :: BlockImpl :: StorageKind> :: operator = (const Eigen :: BlockImpl :: StorageKind> &) 'с [Derived = Eigen :: Matrix] и [XprType = Eigen :: Matrix, Derived = Eigen :: Matrix]

1 Ответ

0 голосов
/ 03 декабря 2018

Eigen::COLAMDOrdering должен иметь тот же тип индекса, что и SparseMatrix.Попробуйте либо Eigen::COLAMDOrdering<int>, либо Eigen::SparseMatrix<double, Eigen::ColMajor, Eigen::DenseIndex>.

Если вы typedef редактировали свой тип разреженной матрицы, вы можете использовать Eigen::COLAMDOrdering<SparseType::StorageIndex> (если SparseType зависит от параметра шаблона: typename SparseType::StorageIndex).

...