34 DLL_DECLSPEC
virtual double value(
const Eigen::Ref<const Eigen::VectorXd> x1,
const Eigen::Ref<const Eigen::VectorXd> x2)
const = 0;
39 virtual unsigned int dim()
const = 0;
41 DLL_DECLSPEC
void validate_arguments(
const Eigen::Ref<const Eigen::VectorXd> x1,
const Eigen::Ref<const Eigen::VectorXd> x2)
const;
56 DLL_DECLSPEC
virtual void gradient(
const Eigen::Ref<const Eigen::VectorXd> x1,
const Eigen::Ref<const Eigen::VectorXd> x2, Eigen::Ref<Eigen::VectorXd> dydx1)
const = 0;
72 DLL_DECLSPEC
virtual void hessian(
const Eigen::Ref<const Eigen::VectorXd> x1,
const Eigen::Ref<const Eigen::VectorXd> x2, Eigen::Ref<Eigen::MatrixXd> H)
const = 0;
90 DLL_DECLSPEC
virtual double value(
double r2)
const = 0;
105 DLL_DECLSPEC
virtual double gradient(
double r2)
const = 0;
131 DLL_DECLSPEC
double value(
double r2)
const override;
132 DLL_DECLSPEC
double gradient(
double r2)
const override;
147 static_assert(std::is_base_of_v<RadialBasisFunction, RBF>);
157 : rbf_(std::move(rbf)), dim_(
dim)
159 if (rbf_ ==
nullptr) {
160 throw std::invalid_argument(
"Null RBF object");
163 throw std::domain_error(
"Kernel dimension must be positive");
173 double value(
const Eigen::Ref<const Eigen::VectorXd> x1,
const Eigen::Ref<const Eigen::VectorXd> x2)
const override
175 validate_arguments(x1, x2);
176 return rbf_->value((x1 - x2).squaredNorm());
179 unsigned int dim()
const override
184 std::unique_ptr<const RBF> rbf_;
195 static_assert(std::is_base_of_v<DifferentiableRadialBasisFunction, DiffRBF>);
199 void gradient(
const Eigen::Ref<const Eigen::VectorXd> x1,
const Eigen::Ref<const Eigen::VectorXd> x2, Eigen::Ref<Eigen::VectorXd> dydx1)
const override
201 this->validate_arguments(x1, x2);
202 if (dydx1.size() != this->dim()) {
203 throw std::invalid_argument(
"Wrong dimension of dydx1");
205 const double rbf1der = this->rbf_->gradient((x1 - x2).squaredNorm());
206 for (Eigen::Index i = 0; i < x1.size(); ++i) {
207 dydx1[i] = 2 * (x1[i] - x2[i]) * rbf1der;
virtual ~Kernel()
Virtual destructor.
unsigned int dim() const override
Dimension of the feature space.
Definition: Kernels.hpp:179
Definition: BallTree.hpp:10
virtual double gradient(double r2) const =0
Gradient of the radial basis function of the RBF kernel.
double gradient(double r2) const override
Gradient of the radial basis function of the RBF kernel.
virtual double value(const Eigen::Ref< const Eigen::VectorXd > x1, const Eigen::Ref< const Eigen::VectorXd > x2) const =0
Value of the kernel .
virtual ~RadialBasisFunction()
Virtual destructor.
Radial basis function kernel.
Definition: Kernels.hpp:145
virtual unsigned int dim() const =0
Dimension of the feature space.
Abstract differentiable R^D kernel interface.
Definition: Kernels.hpp:47
Double differentiable radial basis function kernel.
Definition: Kernels.hpp:111
double value(const Eigen::Ref< const Eigen::VectorXd > x1, const Eigen::Ref< const Eigen::VectorXd > x2) const override
Value of the kernel .
Definition: Kernels.hpp:173
double value(double r2) const override
Radial basis function of the RBF kernel.
RBFKernel(std::unique_ptr< const RBF > &&rbf, unsigned int dim)
Constructor.
Definition: Kernels.hpp:156
Radial basis function.
Definition: Kernels.hpp:78
Abstract R^D kernel interface.
Definition: Kernels.hpp:20
Gaussian radial basis function.
Definition: Kernels.hpp:128
Differentiable radial basis function kernel.
Definition: Kernels.hpp:96
virtual double value(double r2) const =0
Radial basis function of the RBF kernel.
virtual double second_derivative(double r2) const =0
Second derivative of the radial basis function of the RBF kernel.
Differentiable radial basis function kernel.
Definition: Kernels.hpp:193
Abstract double differentiable R^D kernel interface.
Definition: Kernels.hpp:63
double second_derivative(double r2) const override
Second derivative of the radial basis function of the RBF kernel.
void gradient(const Eigen::Ref< const Eigen::VectorXd > x1, const Eigen::Ref< const Eigen::VectorXd > x2, Eigen::Ref< Eigen::VectorXd > dydx1) const override
Gradient of the kernel over the first feature vector. The gradient over the second vector can be cal...
Definition: Kernels.hpp:199