根据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的乘法。我错过了什么,或者这实际上没有实现?
答案 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。