CMP++: Uncertainty Quantification & Bayesian Calibration
Loading...
Searching...
No Matches
mean++.h
Go to the documentation of this file.
1#ifndef MEANPP_H
2#define MEANPP_H
3
4#include "cmp_defines.h"
5#include <memory>
6
11namespace cmp::mean {
25class Mean {
26 public:
27 virtual ~Mean() = default;
28 virtual double eval(const Eigen::VectorXd &x, const Eigen::VectorXd &par) const = 0;
29 virtual double evalGradient(const Eigen::VectorXd &x, const Eigen::VectorXd &par, const size_t &i) const = 0;
30 virtual double evalHessian(const Eigen::VectorXd &x, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const = 0;
31};
32
42class Constant : public Mean {
43 private:
44 size_t index_;
45 public:
46
47 Constant(const Constant&) = default;
48 Constant(Constant&&) = default;
49 Constant& operator=(const Constant&) = default;
51
55 Constant(const size_t &c) : index_(c) {};
56
60 double eval(const Eigen::VectorXd& x, const Eigen::VectorXd &par) const {
61 return par(index_);
62 };
63
67 double evalGradient(const Eigen::VectorXd& x, const Eigen::VectorXd &log_par, const size_t &i) const {
68 if(i == index_) {
69 return 1.0;
70 } else {
71 return 0.0;
72 }
73 };
74
78 double evalHessian(const Eigen::VectorXd& x, const Eigen::VectorXd &log_par, const size_t &i, const size_t &j) const {
79 return 0;
80 };
81
85 static std::shared_ptr<Mean> make(const size_t &c) {
86 return std::make_shared<Constant>(c);
87 };
88
89};
90
100class Zero : public Mean {
101 public:
102
103 Zero() = default;
104 Zero(const Zero&) = default;
105 Zero(Zero&&) = default;
106 Zero& operator=(const Zero&) = default;
107 Zero& operator=(Zero&&) = default;
108
112 double eval(const Eigen::VectorXd& x, const Eigen::VectorXd &par) const {
113 return 0.0;
114 };
115
119 double evalGradient(const Eigen::VectorXd& x, const Eigen::VectorXd &log_par, const size_t &i) const {
120 return 0.0;
121 };
122
126 double evalHessian(const Eigen::VectorXd& x, const Eigen::VectorXd &log_par, const size_t &i, const size_t &j) const {
127 return 0.0;
128 };
129
133 static std::shared_ptr<Mean> make() {
134 return std::make_shared<Zero>();
135 };
136
137};
138
139}
140
143#endif
Represents a constant mean function.
Definition mean++.h:42
Constant & operator=(Constant &&)=default
static std::shared_ptr< Mean > make(const size_t &c)
Factory method for creating a Constant mean function.
Definition mean++.h:85
Constant & operator=(const Constant &)=default
double evalGradient(const Eigen::VectorXd &x, const Eigen::VectorXd &log_par, const size_t &i) const
Evaluates the partial derivative of the constant mean function.
Definition mean++.h:67
Constant(const Constant &)=default
double evalHessian(const Eigen::VectorXd &x, const Eigen::VectorXd &log_par, const size_t &i, const size_t &j) const
Evaluates the second-order partial derivative (Hessian) of the constant mean function.
Definition mean++.h:78
double eval(const Eigen::VectorXd &x, const Eigen::VectorXd &par) const
Evaluates the constant mean.
Definition mean++.h:60
Constant(const size_t &c)
Constructs a Constant mean function using the hyperparameter at index c.
Definition mean++.h:55
size_t index_
Hyperparameter index of the constant value.
Definition mean++.h:44
Constant(Constant &&)=default
Abstract base class for Gaussian Process prior mean functions.
Definition mean++.h:25
virtual double evalGradient(const Eigen::VectorXd &x, const Eigen::VectorXd &par, const size_t &i) const =0
virtual double eval(const Eigen::VectorXd &x, const Eigen::VectorXd &par) const =0
virtual double evalHessian(const Eigen::VectorXd &x, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const =0
virtual ~Mean()=default
Represents a constant zero mean function.
Definition mean++.h:100
double evalHessian(const Eigen::VectorXd &x, const Eigen::VectorXd &log_par, const size_t &i, const size_t &j) const
Evaluates the second-order partial derivative (Hessian) of the zero mean function.
Definition mean++.h:126
Zero & operator=(Zero &&)=default
Zero(Zero &&)=default
Zero(const Zero &)=default
static std::shared_ptr< Mean > make()
Factory method for creating a Zero mean function.
Definition mean++.h:133
Zero()=default
double evalGradient(const Eigen::VectorXd &x, const Eigen::VectorXd &log_par, const size_t &i) const
Evaluates the partial derivative of the zero mean function.
Definition mean++.h:119
Zero & operator=(const Zero &)=default
double eval(const Eigen::VectorXd &x, const Eigen::VectorXd &par) const
Evaluates the zero mean function.
Definition mean++.h:112
Definition mean++.h:11