1 #ifndef STAN_MATH_PRIM_MAT_FUN_GP_PERIODIC_COV_HPP 2 #define STAN_MATH_PRIM_MAT_FUN_GP_PERIODIC_COV_HPP 48 template <
typename T_x,
typename T_sigma,
typename T_l,
typename T_p>
49 inline typename Eigen::Matrix<
55 const char *fun =
"gp_periodic_cov";
59 for (
size_t n = 0; n < x.size(); ++n)
62 Eigen::Matrix<typename stan::return_type<T_x, T_sigma, T_l, T_p>::type,
63 Eigen::Dynamic, Eigen::Dynamic>
64 cov(x.size(), x.size());
66 size_t x_size = x.size();
70 T_sigma sigma_sq =
square(sigma);
72 T_p pi_div_p =
pi() / p;
74 for (
size_t j = 0; j < x_size; ++j) {
76 for (
size_t i = j + 1; i < x_size; ++i) {
80 cov(j, i) = cov(i, j);
117 template <
typename T_x1,
typename T_x2,
typename T_sigma,
typename T_l,
119 inline typename Eigen::Matrix<
121 Eigen::Dynamic, Eigen::Dynamic>
123 const T_sigma &sigma,
const T_l &l,
const T_p &p) {
125 const char *fun =
"gp_periodic_cov";
129 for (
size_t n = 0; n < x1.size(); ++n)
131 for (
size_t n = 0; n < x2.size(); ++n)
134 Eigen::Matrix<typename stan::return_type<T_x1, T_x2, T_sigma, T_l, T_p>::type,
135 Eigen::Dynamic, Eigen::Dynamic>
136 cov(x1.size(), x2.size());
137 if (x1.size() == 0 || x2.size() == 0)
140 T_sigma sigma_sq =
square(sigma);
142 T_p pi_div_p =
pi() / p;
144 for (
size_t i = 0; i < x1.size(); ++i) {
145 for (
size_t j = 0; j < x2.size(); ++j) {
fvar< T > square(const fvar< T > &x)
fvar< T > sin(const fvar< T > &x)
boost::math::tools::promote_args< double, typename scalar_type< T >::type, typename return_type< Types_pack... >::type >::type type
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.
fvar< T > inv_square(const fvar< T > &x)
boost::math::tools::promote_args< T1, T2 >::type distance(const Eigen::Matrix< T1, R1, C1 > &v1, const Eigen::Matrix< T2, R2, C2 > &v2)
Returns the distance between the specified vectors.
void check_positive(const char *function, const char *name, const T_y &y)
Check if y is positive.
double pi()
Return the value of pi.
Eigen::Matrix< typename stan::return_type< T_x, T_sigma, T_l, T_p >::type, Eigen::Dynamic, Eigen::Dynamic > gp_periodic_cov(const std::vector< T_x > &x, const T_sigma &sigma, const T_l &l, const T_p &p)
Returns a periodic covariance matrix using the input .