MUQ  0.4.3
ProductOperator.cpp
Go to the documentation of this file.
2 
4 
5 using namespace muq::Modeling;
6 
7 ProductOperator::ProductOperator(std::shared_ptr<LinearOperator> Ain,
8  std::shared_ptr<LinearOperator> Bin) : LinearOperator(Ain->rows(), Bin->cols()), A(Ain), B(Bin)
9 {
10 
11  if(A->cols() != B->rows())
12  throw muq::WrongSizeError("In ProductOperator: The number of columns in A (" + std::to_string(A->cols()) + ") must match the number of rows in B (" + std::to_string(B->rows()) + ")");
13 }
14 
16 Eigen::MatrixXd ProductOperator::Apply(Eigen::Ref<const Eigen::MatrixXd> const& x)
17 {
18  return A->Apply(B->Apply(x));
19 }
20 
22 Eigen::MatrixXd ProductOperator::ApplyTranspose(Eigen::Ref<const Eigen::MatrixXd> const& x)
23 {
24  return B->ApplyTranspose(A->ApplyTranspose(x));
25 }
26 
27 Eigen::MatrixXd ProductOperator::GetMatrix()
28 {
29  return A->GetMatrix()*B->GetMatrix();
30 }
Generic linear operator base class.
virtual Eigen::MatrixXd GetMatrix() override
std::shared_ptr< LinearOperator > A
virtual Eigen::MatrixXd ApplyTranspose(Eigen::Ref< const Eigen::MatrixXd > const &x) override
std::shared_ptr< LinearOperator > B
ProductOperator(std::shared_ptr< LinearOperator > Ain, std::shared_ptr< LinearOperator > Bin)
virtual Eigen::MatrixXd Apply(Eigen::Ref< const Eigen::MatrixXd > const &x) override
Exception to throw when matrices, vectors, or arrays are the wrong size.
Definition: Exceptions.h:58
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
Definition: json.h:25172