1 #ifndef EIGENLINEAROPERATOR_H
2 #define EIGENLINEAROPERATOR_H
6 #include <Eigen/SparseCore>
20 template<
typename EigenType>
21 class EigenLinearOperator :
public LinearOperator {
24 EigenLinearOperator(EigenType
const& Ain) :
LinearOperator(Ain.rows(), Ain.cols()), A(Ain){}
26 virtual ~EigenLinearOperator(){};
29 virtual Eigen::MatrixXd
Apply(Eigen::Ref<const Eigen::MatrixXd>
const& x)
override {
return A*x;};
32 virtual Eigen::MatrixXd
ApplyTranspose(Eigen::Ref<const Eigen::MatrixXd>
const& x)
override {
return A.transpose()*x;};
34 virtual Eigen::MatrixXd GetMatrix()
override{
return Eigen::MatrixXd(A);};
47 template<
typename ScalarType>
48 struct LinearOperatorFactory<Eigen::Matrix<ScalarType, Eigen::Dynamic, Eigen::Dynamic>> {
50 static std::shared_ptr<LinearOperator>
Create(Eigen::Matrix<ScalarType, Eigen::Dynamic, Eigen::Dynamic>
const& A)
52 return std::make_shared<muq::Modeling::EigenLinearOperator<Eigen::Matrix<ScalarType, Eigen::Dynamic, Eigen::Dynamic>>>(A);
56 template<
typename ScalarType>
57 struct LinearOperatorFactory<Eigen::SparseMatrix<ScalarType>> {
59 static std::shared_ptr<LinearOperator>
Create(Eigen::SparseMatrix<ScalarType>
const& A)
61 return std::make_shared<muq::Modeling::EigenLinearOperator<Eigen::SparseMatrix<ScalarType>>>(A);
LinearOperator(int rowsIn, int colsIn, int numInputCols=1)
virtual Eigen::MatrixXd Apply(Eigen::Ref< const Eigen::MatrixXd > const &x)=0
virtual Eigen::MatrixXd ApplyTranspose(Eigen::Ref< const Eigen::MatrixXd > const &x)=0
static std::shared_ptr< LinearOperator > Create(MatrixType const &A)