9 #include <boost/property_tree/ptree_fwd.hpp>
11 #include <boost/math/constants/constants.hpp>
17 namespace Approximation
47 {0.0, std::numeric_limits<double>::infinity()},
48 {1
e-10, std::numeric_limits<double>::infinity()})
56 Eigen::Vector2d sigmaBounds,
57 Eigen::Vector2d lengthBounds);
67 {0.0, std::numeric_limits<double>::infinity()},
68 {1
e-10, std::numeric_limits<double>::infinity()})
75 Eigen::Vector2d sigmaBounds,
76 Eigen::Vector2d lengthBounds);
82 template<
typename ScalarType1,
typename ScalarType2,
typename ScalarType3>
83 void FillBlockImpl(Eigen::Ref<
const Eigen::Matrix<ScalarType1, Eigen::Dynamic, 1>>
const& x1,
84 Eigen::Ref<
const Eigen::Matrix<ScalarType1, Eigen::Dynamic, 1>>
const& x2,
85 Eigen::Ref<
const Eigen::Matrix<ScalarType2, Eigen::Dynamic, 1>>
const& params,
86 Eigen::Ref<Eigen::Matrix<ScalarType3,Eigen::Dynamic, Eigen::Dynamic>> block)
const
88 int p = round(
nu-0.5);
90 ScalarType1 dist = (x1-x2).norm();
93 for(
int i=0; i<=p; ++i)
94 block(0,0) +=
weights(i) * pow(sqrt(8.0*
nu)*dist/params(1), p-i);
96 block(0,0) *= params(0)*exp(-sqrt(2.0*
nu)*dist / params(1)) *
scale;
99 virtual std::tuple<std::shared_ptr<muq::Modeling::LinearSDE>, std::shared_ptr<muq::Modeling::LinearOperator>, Eigen::MatrixXd>
GetStateSpace(boost::property_tree::ptree sdeOptions = boost::property_tree::ptree())
const override;
const std::vector< unsigned int > dimInds
Base class in CRTP pattern for covariance kernels.
static Eigen::VectorXd BuildWeights(int p)
static int Factorial(int n)
virtual std::tuple< std::shared_ptr< muq::Modeling::LinearSDE >, std::shared_ptr< muq::Modeling::LinearOperator >, Eigen::MatrixXd > GetStateSpace(boost::property_tree::ptree sdeOptions=boost::property_tree::ptree()) const override
Returns a state space representation of the covariance kernel.
MaternKernel(unsigned dimIn, double sigma2In, double lengthIn, double nuIn)
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 ¶ms, Eigen::Ref< Eigen::Matrix< ScalarType3, Eigen::Dynamic, Eigen::Dynamic >> block) const
MaternKernel(unsigned dimIn, std::vector< unsigned > dimInds, double sigma2In, double lengthIn, double nuIn)
const Eigen::VectorXd weights