Eigen:使用SparseMatrix的selfAdjointView

时间:2012-10-21 08:54:44

标签: c++ sparse-matrix eigen

根据Eigen documentation,我希望以下方法有效:

#include "Eigen/Dense"
#include "Eigen/Sparse"
SparseMatrix<double> mymatrix = SomeFunctionReturningASparseMatrix();

SparseMatrix<double> test = mymatrix.selfadjointView<Lower>();

但是,我得到了编译时错误

conversion from 'Eigen::SparseSelfAdjointView<Eigen::SparseMatrix<double>, 2u>' to 
non-scalar type 'Eigen::SparseMatrix<double>' requested

我做错了什么?缺少包括?

第二个问题:据我所知,Eigen还不支持SparseSelfadjointViews与SparseMatrices的乘法。我错过了什么,或者这实际上没有实现?

2 个答案:

答案 0 :(得分:2)

您的函数mymatrix.selfadjointView<Lower>()会返回SparseSelfAdjointView<SparseMatrix<double>, 2u>类型的对象,并且您尝试将其作为SparseMatrix<double>投射到此行中:

SparseMatrix<double> test = mymatrix.selfadjointView<Lower>();

你也应该

#include <SelfAdjointView.h>

答案 1 :(得分:1)

Eigen论坛的成员ggael能够回答我的问题。为了完整起见,我将在此引用他的答案:


对于第一个问题,以下应该完成这项工作:

 SparseMatrix<double> test; 
 test = mymatrix.selfadjointView<Lower>();

对于te秒,你是对的,不支持这样的产品。


原始问题已发布并已回复here