MUQ  0.4.3
MonotoneExpansion.h
Go to the documentation of this file.
1 #ifndef MONOTONEEXPANSION_H
2 #define MONOTONEEXPANSION_H
3 
5 #include <boost/property_tree/ptree.hpp>
6 
7 namespace muq{
8  namespace Approximation{
9 
24  class MonotoneExpansion : public muq::Modeling::ModPiece{
25 
26  public:
27  //MonotoneExpansion(boost::property_tree::ptree & params);
28 
29  MonotoneExpansion(std::shared_ptr<BasisExpansion> monotonePartsIn,
30  bool coeffInput=false);
31 
32  MonotoneExpansion(std::vector<std::shared_ptr<BasisExpansion>> const& generalPartsIn,
33  std::vector<std::shared_ptr<BasisExpansion>> const& monotonePartsIn,
34  bool coeffInput=false);
35 
39  unsigned NumTerms() const;
40 
46  std::shared_ptr<MonotoneExpansion> Head(int numRows) const;
47 
49  Eigen::VectorXd EvaluateInverse(Eigen::VectorXd const& refPt) const;
50  Eigen::VectorXd EvaluateInverse(Eigen::VectorXd const& refPt,
51  Eigen::VectorXd const& tgtPt0) const;
52 
53  Eigen::VectorXd EvaluateForward(Eigen::VectorXd const& x) const;
54 
60  virtual Eigen::VectorXd GetCoeffs() const;
61 
62  virtual void SetCoeffs(Eigen::VectorXd const& allCoeffs);
63 
65  virtual double LogDeterminant(Eigen::VectorXd const& evalPt);
66  virtual double LogDeterminant(Eigen::VectorXd const& evalPt,
67  Eigen::VectorXd const& coeffs);
68 
70  virtual Eigen::VectorXd GradLogDeterminant(Eigen::VectorXd const& evalPt);
71  virtual Eigen::VectorXd GradLogDeterminant(Eigen::VectorXd const& evalPt,
72  Eigen::VectorXd const& coeffs);
73 
74  protected:
75 
76  virtual void EvaluateImpl(muq::Modeling::ref_vector<Eigen::VectorXd> const& inputs) override;
77 
78  virtual void JacobianImpl(unsigned int const wrtOut,
79  unsigned int const wrtIn,
80  muq::Modeling::ref_vector<Eigen::VectorXd> const& inputs) override;
81 
82  Eigen::MatrixXd JacobianWrtX(Eigen::VectorXd const& x) const;
83 
84  std::vector<std::shared_ptr<BasisExpansion>> generalParts;
85  std::vector<std::shared_ptr<BasisExpansion>> monotoneParts;
86 
87  Eigen::VectorXd quadWeights;
88  Eigen::VectorXd quadPts; // quadrature points on [0,1]
89 
90  private:
91  static Eigen::VectorXi GetInputSizes(std::vector<std::shared_ptr<BasisExpansion>> const& generalPartsIn,
92  std::vector<std::shared_ptr<BasisExpansion>> const& monotonePartsIn,
93  bool coeffInput);
94 
95  }; // class MonotoneExpansion
96 
97  } // namespace Approximation
98 } // namespace muq
99 
100 
101 #endif
Provides an abstract interface for defining vector-valued model components.
Definition: ModPiece.h:148
std::vector< std::reference_wrapper< const T > > ref_vector
A vector of references to something ...
Definition: WorkPiece.h:37