44 #include <kernels/rbf_kernel.hpp> 51 Kernel::Ptr RbfKernel::Create(
const VectorXd& lengths) {
52 Kernel::Ptr ptr(
new RbfKernel(lengths));
57 RbfKernel::RbfKernel(
const VectorXd& lengths)
61 double RbfKernel::Evaluate(
const VectorXd& x,
const VectorXd& y)
const {
62 const VectorXd diff = x - y;
64 return std::exp(-0.5 * diff.cwiseQuotient(params_).squaredNorm());
67 double RbfKernel::Partial(
const VectorXd& x,
const VectorXd& y,
69 CHECK_LT(ii, params_.size());
70 const VectorXd diff = x - y;
74 std::exp(-0.5 * diff.cwiseQuotient(params_).squaredNorm());
76 return kernel * diff(ii) * diff(ii) /
77 (params_(ii) * params_(ii) * params_(ii));
80 void RbfKernel::Gradient(
const VectorXd& x,
const VectorXd& y,
81 VectorXd& gradient)
const {
82 const VectorXd diff = x - y;
86 std::exp(-0.5 * diff.cwiseQuotient(params_).squaredNorm());
88 gradient = kernel * diff.cwiseProduct(diff).cwiseQuotient(
89 params_.cwiseProduct(params_).cwiseProduct(params_));