MUQ  0.4.3
LinearKernel.h
Go to the documentation of this file.
1 #ifndef LINEARKERNEL_H
2 #define LINEARKERNEL_H
3 
5 
6 
7 namespace muq
8 {
9 namespace Approximation
10 {
11 
24 class ConstantKernel : public KernelImpl<ConstantKernel>
25 {
26 
27 public:
28 
29  ConstantKernel(unsigned dim,
30  const double sigma2In,
31  const Eigen::Vector2d sigmaBounds = {0.0, std::numeric_limits<double>::infinity()}) : ConstantKernel(dim, sigma2In*Eigen::MatrixXd::Ones(1,1), sigmaBounds){};
32 
33  ConstantKernel(unsigned dim,
34  std::vector<unsigned> dimInds,
35  const double sigma2In,
36  const Eigen::Vector2d sigmaBounds = {0.0, std::numeric_limits<double>::infinity()}) : ConstantKernel(dim, dimInds, sigma2In*Eigen::MatrixXd::Ones(1,1), sigmaBounds){};
37 
38 
39  ConstantKernel(unsigned dim,
40  Eigen::MatrixXd const& sigma2In,
41  const Eigen::Vector2d sigmaBounds = {0.0, std::numeric_limits<double>::infinity()}) : KernelImpl<ConstantKernel>(dim, sigma2In.rows(), GetNumParams(sigma2In))
42  {
43  paramBounds.resize(2,1);
44  paramBounds(0,0) = sigmaBounds(0);
45  paramBounds(1,0) = sigmaBounds(1);
46 
47  cachedParams.resize(numParams);
48  int ind = 0;
49  for(int i=0; i<sigma2In.rows(); ++i){
50  for(int j=0; j<=i; ++j){
51  cachedParams(ind) = sigma2In(i,j);
52  ind++;
53  }
54  }
55  };
56 
57  ConstantKernel(unsigned dim,
58  std::vector<unsigned> dimInds,
59  Eigen::MatrixXd const& sigma2In,
60  const Eigen::Vector2d sigmaBounds = {0.0, std::numeric_limits<double>::infinity()}) : KernelImpl<ConstantKernel>(dim, dimInds, sigma2In.rows(), GetNumParams(sigma2In))
61  {
62  paramBounds.resize(2,1);
63  paramBounds(0,0) = sigmaBounds(0);
64  paramBounds(1,0) = sigmaBounds(1);
65 
66  cachedParams.resize(numParams);
67  int ind = 0;
68  for(int i=0; i<sigma2In.rows(); ++i){
69  for(int j=0; j<=i; ++j){
70  cachedParams(ind) = sigma2In(i,j);
71  ind++;
72  }
73  }
74  };
75 
76  virtual ~ConstantKernel(){};
77 
78  template<typename ScalarType1, typename ScalarType2, typename ScalarType3>
79  void FillBlockImpl(Eigen::Ref<const Eigen::Matrix<ScalarType1, Eigen::Dynamic, 1>> const& x1,
80  Eigen::Ref<const Eigen::Matrix<ScalarType1, Eigen::Dynamic, 1>> const& x2,
81  Eigen::Ref<const Eigen::Matrix<ScalarType2, Eigen::Dynamic, 1>> const& params,
82  Eigen::Ref<Eigen::Matrix<ScalarType3,Eigen::Dynamic, Eigen::Dynamic>> block) const
83  {
84  int ind = 0;
85  for(int i=0; i<coDim; ++i){
86  for(int j=0; j<=i; ++j){
87  block(i,j) = params(ind) + params(ind+1);
88  block(j,i) = block(i,j);
89  ind++;
90  }
91  }
92  }
93 
94 private:
95 
96  static unsigned GetNumParams(Eigen::MatrixXd const& cov)
97  {
98  return 0.5*cov.rows()*(cov.rows()+1);
99  }
100 };
101 
102 }
103 }
104 
105 
106 #endif
ConstantKernel(unsigned dim, const double sigma2In, const Eigen::Vector2d sigmaBounds={0.0, std::numeric_limits< double >::infinity()})
Definition: LinearKernel.h:29
ConstantKernel(unsigned dim, Eigen::MatrixXd const &sigma2In, const Eigen::Vector2d sigmaBounds={0.0, std::numeric_limits< double >::infinity()})
Definition: LinearKernel.h:39
void FillBlockImpl(Eigen::Ref< const Eigen::Matrix< ScalarType1, Eigen::Dynamic, 1 >> const &x1, Eigen::Ref< const Eigen::Matrix< ScalarType1, Eigen::Dynamic, 1 >> const &x2, Eigen::Ref< const Eigen::Matrix< ScalarType2, Eigen::Dynamic, 1 >> const &params, Eigen::Ref< Eigen::Matrix< ScalarType3, Eigen::Dynamic, Eigen::Dynamic >> block) const
Definition: LinearKernel.h:79
ConstantKernel(unsigned dim, std::vector< unsigned > dimInds, Eigen::MatrixXd const &sigma2In, const Eigen::Vector2d sigmaBounds={0.0, std::numeric_limits< double >::infinity()})
Definition: LinearKernel.h:57
ConstantKernel(unsigned dim, const double sigma2In, const Eigen::Vector2d sigmaBounds={0.0, std::numeric_limits< double >::infinity()})
ConstantKernel(unsigned dim, std::vector< unsigned > dimInds, const double sigma2In, const Eigen::Vector2d sigmaBounds={0.0, std::numeric_limits< double >::infinity()})
Definition: LinearKernel.h:33
static unsigned GetNumParams(Eigen::MatrixXd const &cov)
const unsigned int coDim
Definition: KernelBase.h:133
const unsigned int numParams
Definition: KernelBase.h:134
Eigen::VectorXd cachedParams
Definition: KernelBase.h:156
const std::vector< unsigned int > dimInds
Definition: KernelBase.h:126