5#include <boost/math/special_functions/gamma.hpp>
6#include <boost/math/special_functions/beta.hpp>
7#include <boost/math/special_functions/bessel.hpp>
33 virtual double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const = 0;
34 virtual double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const = 0;
35 virtual double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const = 0;
67 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
74 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
81 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
88 static std::shared_ptr<Covariance>
make(std::shared_ptr<Covariance> k1, std::shared_ptr<Covariance> k2) {
89 return std::make_shared<Sum>(k1, k2);
122 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
129 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
133 if(std::abs(d1) <
TOL) {
140 if(std::abs(d2) <
TOL) {
152 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
156 if(std::abs(d1) <
TOL) {
163 if(std::abs(d2) <
TOL) {
175 static std::shared_ptr<Covariance>
make(std::shared_ptr<Covariance> k1, std::shared_ptr<Covariance> k2) {
176 return std::make_shared<Product>(k1, k2);
185 std::function<double(
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const Eigen::VectorXd&)>
eval_;
186 std::function<double(
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const size_t&)>
evalGradient_;
187 std::function<double(
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const size_t&,
const size_t&)>
evalHessian_;
198 Custom(std::function<
double(
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const Eigen::VectorXd&)>
eval,
199 std::function<
double(
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const size_t&)>
evalGradient,
205 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
206 return eval_(x1, x2, par);
212 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
219 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
226 std::shared_ptr<Custom>
make(std::function<
double(
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const Eigen::VectorXd&)>
eval,
227 std::function<
double(
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const size_t&)>
evalGradient,
228 std::function<
double(
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const Eigen::VectorXd&,
const size_t&,
const size_t&)>
evalHessian) {
260 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
261 return std::pow(par(
index_), 2);
267 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
278 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
289 static std::shared_ptr<Covariance>
make(
const size_t &c) {
290 return std::make_shared<Constant>(c);
327 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
338 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
345 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
352 static std::shared_ptr<Covariance>
make(
const int &i) {
353 return std::make_shared<Linear>(i);
390 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
392 return 1.0 / (x1.dot(x2) + 1);
401 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
408 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
415 static std::shared_ptr<Covariance>
make(
const int &i) {
416 return std::make_shared<Inverse>(i);
448 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
451 d = (x1 - x2).norm();
455 return std::exp(-0.5 * std::pow(d / par(
index_), 2));
458 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
461 d = (x1 - x2).norm();
468 return std::exp(-0.5 * std::pow(d / par(
index_), 2)) * std::pow(d, 2) / std::pow(par(
index_), 3);
474 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
477 d = (x1 - x2).norm();
484 return (std::exp(-0.5 * std::pow(d / par(
index_), 2)) * std::pow(d, 2) / std::pow(par(
index_), 4)) * (-3 + std::pow(d, 2) / std::pow(par(
index_), 3));
490 static std::shared_ptr<Covariance>
make(
const size_t &l,
const int &i) {
491 return std::make_shared<SquaredExponential>(l, i);
523 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
526 d = (x1 - x2).norm();
531 double c_1 = sqrt(5.) * d / l;
532 double c_2 = (5. / 3.) * pow(d / l, 2);
533 return (1 + c_1 + c_2) * exp(-c_1);
536 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
539 d = (x1 - x2).norm();
547 return (5.*std::pow(d, 2) * (std::sqrt(5) * d + l)) / (3.*std::exp((std::sqrt(5) * d) / l) * std::pow(l, 4));
553 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
556 d = (x1 - x2).norm();
564 return (5 * std::pow(d, 2) * (5 * std::pow(d, 2) - 3 * std::sqrt(5) * d * l - 3 * std::pow(l, 2))) / (3.*std::exp(std::sqrt(5) * d / l) * std::pow(l, 6));
570 static std::shared_ptr<Covariance>
make(
const size_t &l,
const int &i) {
571 return std::make_shared<Matern52>(l, i);
603 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
606 d = (x1 - x2).norm();
611 double r = std::sqrt(2 *
nu_) * d / l;
612 return (1.0 / (std::tgamma(
nu_) * std::pow(2,
nu_ - 1))) * std::pow(r,
nu_) * boost::math::cyl_bessel_k(
nu_, r);
615 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
618 d = (x1 - x2).norm();
626 double r = std::sqrt(2 *
nu_) * d / l;
627 return (std::pow(r,
nu_) * boost::math::cyl_bessel_k(
nu_ - 1, r) * (-std::sqrt(2 *
nu_) * d / std::pow(l, 2)) -
nu_ * std::pow(r,
nu_) * boost::math::cyl_bessel_k(
nu_, r) / l) / (std::tgamma(
nu_) * std::pow(2,
nu_ - 1));
633 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
636 d = (x1 - x2).norm();
644 double r = std::sqrt(2 *
nu_) * d / l;
645 return (std::pow(r,
nu_) * boost::math::cyl_bessel_k(
nu_ - 2, r) * std::pow(-std::sqrt(2 *
nu_) * d / std::pow(l, 2), 2)
646 + 2 *
nu_ * std::pow(r,
nu_) * boost::math::cyl_bessel_k(
nu_ - 1, r) * (-std::sqrt(2 *
nu_) * d / std::pow(l, 3))
647 +
nu_ * (
nu_ + 1) * std::pow(r,
nu_) * boost::math::cyl_bessel_k(
nu_, r) / std::pow(l, 2)) / (std::tgamma(
nu_) * std::pow(2,
nu_ - 1));
652 static std::shared_ptr<Covariance>
make(
const size_t &l,
const double &nu,
const int &i) {
653 return std::make_shared<Matern>(l, nu, i);
681 double eval(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par)
const {
684 d = (x1 - x2).norm();
695 double evalGradient(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i)
const {
699 double evalHessian(
const Eigen::VectorXd& x1,
const Eigen::VectorXd &x2,
const Eigen::VectorXd& par,
const size_t &i,
const size_t &j)
const {
703 static std::shared_ptr<Covariance>
make(
const int &i = -1,
double tol = 1e-10) {
704 return std::make_shared<WhiteNoise>(i, tol);
710inline std::shared_ptr<Covariance>
operator+(std::shared_ptr<Covariance> k1, std::shared_ptr<Covariance> k2) {
714inline std::shared_ptr<Covariance>
operator*(std::shared_ptr<Covariance> k1, std::shared_ptr<Covariance> k2) {
Represents a constant scale covariance function.
Definition covariance.h:242
Constant & operator=(Constant &&)=default
Constant(Constant &&)=default
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Evaluates the second-order partial derivative of the Constant kernel.
Definition covariance.h:278
Constant(const size_t &index)
Constructs a Constant covariance function using the hyperparameter at index.
Definition covariance.h:255
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Evaluates the Constant kernel.
Definition covariance.h:260
Constant(const Constant &)=default
static std::shared_ptr< Covariance > make(const size_t &c)
Factory method for creating a constant covariance.
Definition covariance.h:289
size_t index_
Hyperparameter parameter index.
Definition covariance.h:244
Constant & operator=(const Constant &)=default
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Evaluates the partial derivative of the Constant kernel.
Definition covariance.h:267
Abstract base class for all covariance (kernel) functions.
Definition covariance.h:30
virtual double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const =0
virtual double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const =0
virtual ~Covariance()=default
virtual double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const =0
Represents a custom user-defined covariance function using std::function wrappers.
Definition covariance.h:183
std::function< double(const Eigen::VectorXd &, const Eigen::VectorXd &, const Eigen::VectorXd &)> eval_
Custom kernel evaluation function.
Definition covariance.h:185
Custom & operator=(const Custom &)=default
Custom(const Custom &)=default
Custom & operator=(Custom &&)=default
std::function< double(const Eigen::VectorXd &, const Eigen::VectorXd &, const Eigen::VectorXd &, const size_t &)> evalGradient_
Custom gradient evaluation function.
Definition covariance.h:186
Custom(Custom &&)=default
std::function< double(const Eigen::VectorXd &, const Eigen::VectorXd &, const Eigen::VectorXd &, const size_t &, const size_t &)> evalHessian_
Custom Hessian evaluation function.
Definition covariance.h:187
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Evaluates the custom kernel's Hessian.
Definition covariance.h:219
std::shared_ptr< Custom > make(std::function< double(const Eigen::VectorXd &, const Eigen::VectorXd &, const Eigen::VectorXd &)> eval, std::function< double(const Eigen::VectorXd &, const Eigen::VectorXd &, const Eigen::VectorXd &, const size_t &)> evalGradient, std::function< double(const Eigen::VectorXd &, const Eigen::VectorXd &, const Eigen::VectorXd &, const size_t &, const size_t &)> evalHessian)
Factory method for creating a shared pointer to a custom covariance.
Definition covariance.h:226
Custom(std::function< double(const Eigen::VectorXd &, const Eigen::VectorXd &, const Eigen::VectorXd &)> eval, std::function< double(const Eigen::VectorXd &, const Eigen::VectorXd &, const Eigen::VectorXd &, const size_t &)> evalGradient, std::function< double(const Eigen::VectorXd &, const Eigen::VectorXd &, const Eigen::VectorXd &, const size_t &, const size_t &)> evalHessian)
Constructs a custom covariance kernel with evaluation, gradient, and Hessian functions.
Definition covariance.h:198
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Evaluates the custom kernel's gradient.
Definition covariance.h:212
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Evaluates the custom kernel.
Definition covariance.h:205
Represents an Inverse covariance function.
Definition covariance.h:371
Inverse(Inverse &&)=default
int indexX_
Coordinate index to project (-1 for full vector dot product).
Definition covariance.h:373
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Evaluates the second-order partial derivative of the Inverse kernel.
Definition covariance.h:408
Inverse(const Inverse &)=default
Inverse(const int &indexX=-1)
Constructs an Inverse covariance function.
Definition covariance.h:385
Inverse & operator=(Inverse &&)=default
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Evaluates the partial derivative of the Inverse kernel.
Definition covariance.h:401
static std::shared_ptr< Covariance > make(const int &i)
Factory method for creating an inverse covariance.
Definition covariance.h:415
Inverse & operator=(const Inverse &)=default
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Evaluates the Inverse kernel.
Definition covariance.h:390
Represents a Linear covariance function.
Definition covariance.h:308
static std::shared_ptr< Covariance > make(const int &i)
Factory method for creating a linear covariance.
Definition covariance.h:352
Linear(const Linear &)=default
Linear & operator=(Linear &&)=default
Linear(const int &indexX=-1)
Constructs a Linear covariance function.
Definition covariance.h:322
int indexX_
Coordinate index to project (-1 for full vector inner product).
Definition covariance.h:310
Linear(Linear &&)=default
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Evaluates the second-order partial derivative of the Linear kernel.
Definition covariance.h:345
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Evaluates the Linear kernel.
Definition covariance.h:327
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Evaluates the partial derivative of the Linear kernel.
Definition covariance.h:338
Linear & operator=(const Linear &)=default
Matérn covariance function with parameter nu = 5/2.
Definition covariance.h:511
static std::shared_ptr< Covariance > make(const size_t &l, const int &i)
Definition covariance.h:570
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Definition covariance.h:536
int indexX_
Dimension index to evaluate, or -1 for the full isotropic kernel.
Definition covariance.h:514
Matern52(const Matern52 &)=default
Matern52(Matern52 &&)=default
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Definition covariance.h:553
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Definition covariance.h:523
size_t index_
Hyperparameter index for the lengthscale parameter.
Definition covariance.h:513
Matern52 & operator=(Matern52 &&)=default
Matern52 & operator=(const Matern52 &)=default
Matern52(const size_t &l, const int &i=-1)
Definition covariance.h:522
General Matérn covariance function.
Definition covariance.h:590
Matern & operator=(const Matern &)=default
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Definition covariance.h:603
double nu_
Smoothness parameter nu.
Definition covariance.h:594
size_t index_
Hyperparameter index for the lengthscale parameter.
Definition covariance.h:592
Matern(const Matern &)=default
Matern(const size_t &index, const double &nu, const int &indexX=-1)
Definition covariance.h:602
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Definition covariance.h:615
static std::shared_ptr< Covariance > make(const size_t &l, const double &nu, const int &i)
Definition covariance.h:652
int indexX_
Dimension index to evaluate, or -1 for the full isotropic kernel.
Definition covariance.h:593
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Definition covariance.h:633
Matern & operator=(Matern &&)=default
Matern(Matern &&)=default
Represents the product of two covariance functions.
Definition covariance.h:102
std::shared_ptr< Covariance > leftCovariance_
Left operand covariance function.
Definition covariance.h:104
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Evaluates the partial derivative of the product kernel.
Definition covariance.h:129
Product & operator=(const Product &)=default
Product(Product &&)=default
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Evaluates the product kernel.
Definition covariance.h:122
Product & operator=(Product &&)=default
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Evaluates the second-order partial derivative of the product kernel.
Definition covariance.h:152
std::shared_ptr< Covariance > rightCovariance_
Right operand covariance function.
Definition covariance.h:105
Product(const Product &)=default
Product(std::shared_ptr< Covariance > k1, std::shared_ptr< Covariance > k2)
Constructs a product covariance function from two kernels.
Definition covariance.h:117
static std::shared_ptr< Covariance > make(std::shared_ptr< Covariance > k1, std::shared_ptr< Covariance > k2)
Factory method to create a shared pointer to a product covariance.
Definition covariance.h:175
Squared Exponential (RBF / Gaussian) covariance function.
Definition covariance.h:436
int indexX_
Dimension index to evaluate, or -1 for the full isotropic kernel.
Definition covariance.h:439
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Definition covariance.h:474
SquaredExponential(SquaredExponential &&)=default
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Definition covariance.h:458
static std::shared_ptr< Covariance > make(const size_t &l, const int &i)
Definition covariance.h:490
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Definition covariance.h:448
SquaredExponential & operator=(SquaredExponential &&)=default
size_t index_
Hyperparameter index for the lengthscale parameter.
Definition covariance.h:438
SquaredExponential(const size_t &index, const int &indexX=-1)
Definition covariance.h:447
SquaredExponential & operator=(const SquaredExponential &)=default
SquaredExponential(const SquaredExponential &)=default
Represents the sum of two covariance functions.
Definition covariance.h:47
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Evaluates the sum kernel.
Definition covariance.h:67
Sum(std::shared_ptr< Covariance > k1, std::shared_ptr< Covariance > k2)
Constructs a sum covariance function from two kernels.
Definition covariance.h:62
std::shared_ptr< Covariance > rightCovariance_
Right operand covariance function.
Definition covariance.h:50
static std::shared_ptr< Covariance > make(std::shared_ptr< Covariance > k1, std::shared_ptr< Covariance > k2)
Factory method to create a shared pointer to a sum covariance.
Definition covariance.h:88
std::shared_ptr< Covariance > leftCovariance_
Left operand covariance function.
Definition covariance.h:49
Sum & operator=(const Sum &)=default
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Evaluates the partial derivative of the sum kernel.
Definition covariance.h:74
Sum & operator=(Sum &&)=default
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Evaluates the second-order partial derivative of the sum kernel.
Definition covariance.h:81
White noise covariance function.
Definition covariance.h:670
double evalHessian(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i, const size_t &j) const
Definition covariance.h:699
WhiteNoise(const size_t &indexX=-1, double tol=1e-10)
Definition covariance.h:679
double evalGradient(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par, const size_t &i) const
Definition covariance.h:695
WhiteNoise(WhiteNoise &&)=default
double tol_
Distance tolerance threshold.
Definition covariance.h:673
WhiteNoise & operator=(const WhiteNoise &)=default
WhiteNoise & operator=(WhiteNoise &&)=default
int indexX_
Dimension index to evaluate, or -1 for the full isotropic kernel.
Definition covariance.h:672
WhiteNoise(const WhiteNoise &)=default
static std::shared_ptr< Covariance > make(const int &i=-1, double tol=1e-10)
Definition covariance.h:703
double eval(const Eigen::VectorXd &x1, const Eigen::VectorXd &x2, const Eigen::VectorXd &par) const
Definition covariance.h:681
Definition covariance.h:13
std::shared_ptr< Covariance > operator*(std::shared_ptr< Covariance > k1, std::shared_ptr< Covariance > k2)
Definition covariance.h:714
std::shared_ptr< Covariance > operator+(std::shared_ptr< Covariance > k1, std::shared_ptr< Covariance > k2)
Definition covariance.h:710
constexpr double TOL
Definition cmp_defines.h:30