本征SparseLU分解问题

时间:2018-12-03 01:04:10

标签: c++ eigen

我正在使用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 :(得分:2)

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

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