1 #ifndef STAN_MATH_PRIM_MAT_FUN_COV_EXP_QUAD_HPP 2 #define STAN_MATH_PRIM_MAT_FUN_COV_EXP_QUAD_HPP 33 template<
typename T_x,
typename T_sigma,
typename T_l>
35 Eigen::Matrix<typename stan::return_type<T_x, T_sigma, T_l>::type,
36 Eigen::Dynamic, Eigen::Dynamic>
43 for (
size_t n = 0; n < x.size(); ++n)
46 Eigen::Matrix<typename stan::return_type<T_x, T_sigma, T_l>::type,
47 Eigen::Dynamic, Eigen::Dynamic>
48 cov(x.size(), x.size());
50 int x_size = x.size();
54 T_sigma sigma_sq =
square(sigma);
55 T_l neg_half_inv_l_sq = - 0.5 /
square(l);
57 for (
int j = 0; j < (x_size - 1); ++j) {
59 for (
int i = j + 1; i < x_size; ++i) {
62 cov(j, i) = cov(i, j);
65 cov(x_size - 1, x_size - 1) = sigma_sq;
85 template<
typename T_x1,
typename T_x2,
typename T_sigma,
typename T_l>
87 Eigen::Matrix<typename stan::return_type<T_x1, T_x2, T_sigma, T_l>::type,
88 Eigen::Dynamic, Eigen::Dynamic>
90 const std::vector<T_x2>& x2,
96 for (
size_t n = 0; n < x1.size(); ++n)
98 for (
size_t n = 0; n < x2.size(); ++n)
101 Eigen::Matrix<typename stan::return_type<T_x1, T_x2, T_sigma, T_l>::type,
102 Eigen::Dynamic, Eigen::Dynamic>
103 cov(x1.size(), x2.size());
104 if (x1.size() == 0 || x2.size() == 0)
107 T_sigma sigma_sq =
square(sigma);
108 T_l neg_half_inv_l_sq = - 0.5 /
square(l);
110 for (
size_t i = 0; i < x1.size(); ++i) {
111 for (
size_t j = 0; j < x2.size(); ++j) {
113 * neg_half_inv_l_sq);
Eigen::Matrix< typename stan::return_type< T_x, T_sigma, T_l >::type, Eigen::Dynamic, Eigen::Dynamic > cov_exp_quad(const std::vector< T_x > &x, const T_sigma &sigma, const T_l &l)
Returns a squared exponential kernel.
fvar< T > square(const fvar< T > &x)
fvar< T > squared_distance(const Eigen::Matrix< fvar< T >, R, C > &v1, const Eigen::Matrix< double, R, C > &v2)
Returns the squared distance between the specified vectors of the same dimensions.
fvar< T > exp(const fvar< T > &x)
void check_not_nan(const char *function, const char *name, const T_y &y)
Check if y is not NaN.
void check_positive(const char *function, const char *name, const T_y &y)
Check if y is positive.