Eigen SparseLU 分解问题

Eigen SparseLU factorize issue

我正在使用 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 &)': 试图引用已删除的函数 和 [ 派生=本征::矩阵 ] c:\users\user\source\repos\cartel\cartel\include\eigen\src\core\block.h(143): 注意:编译器在这里生成了 'Eigen::Block::operator =' 和 [ 派生=本征::矩阵 ] c:\users\user\source\repos\cartel\cartel\include\eigen\src\core\block.h(143): 注意:'Eigen::Block &Eigen::Block::operator =(const Eigen::Block &)':函数被隐式删除,因为基数 class 调用已删除或不可访问的函数 'Eigen::BlockImpl::StorageKind> &Eigen::BlockImpl::StorageKind>::operator =(const Eigen::BlockImpl::StorageKind> &)' 和 [ 派生=本征::矩阵 ] 和 [ XprType=本征::矩阵, 派生=本征::矩阵 ]

Eigen::COLAMDOrdering 需要与 SparseMatrix 具有相同的索引类型。尝试 Eigen::COLAMDOrdering<int>Eigen::SparseMatrix<double, Eigen::ColMajor, Eigen::DenseIndex>.

如果您 typedef 编辑了稀疏矩阵类型,则可以使用 Eigen::COLAMDOrdering<SparseType::StorageIndex>(如果 SparseType 取决于模板参数:typename SparseType::StorageIndex)。