1 #ifndef STAN_MATH_PRIM_MAT_FUN_COV_DOT_PROD_HPP 2 #define STAN_MATH_PRIM_MAT_FUN_COV_DOT_PROD_HPP 38 template <
typename T_x,
typename T_sigma>
39 Eigen::Matrix<typename return_type<T_x, T_sigma>::type, Eigen::Dynamic,
42 const T_sigma &sigma) {
47 size_t x_size = x.size();
48 for (
size_t i = 0; i < x_size; ++i) {
53 Eigen::Matrix<typename stan::return_type<T_x, T_sigma>::type, Eigen::Dynamic,
59 T_sigma sigma_sq =
square(sigma);
61 for (
size_t i = 0; i < (x_size - 1); ++i) {
62 cov(i, i) = sigma_sq +
dot_self(x[i]);
63 for (
size_t j = i + 1; j < x_size; ++j) {
65 cov(j, i) = cov(i, j);
68 cov(x_size - 1, x_size - 1) = sigma_sq +
dot_self(x[x_size - 1]);
94 template <
typename T_x,
typename T_sigma>
95 Eigen::Matrix<typename return_type<T_x, T_sigma>::type, Eigen::Dynamic,
102 size_t x_size = x.size();
106 Eigen::Matrix<typename stan::return_type<T_x, T_sigma>::type, Eigen::Dynamic,
112 T_sigma sigma_sq =
square(sigma);
114 for (
size_t i = 0; i < (x_size - 1); ++i) {
115 cov(i, i) = sigma_sq + x[i] * x[i];
116 for (
size_t j = i + 1; j < x_size; ++j) {
117 cov(i, j) = sigma_sq + x[i] * x[j];
118 cov(j, i) = cov(i, j);
121 cov(x_size - 1, x_size - 1) = sigma_sq + x[x_size - 1] * x[x_size - 1];
147 template <
typename T_x1,
typename T_x2,
typename T_sigma>
148 Eigen::Matrix<typename return_type<T_x1, T_x2, T_sigma>::type, Eigen::Dynamic,
151 const std::vector<Eigen::Matrix<T_x2, Eigen::Dynamic, 1>> &x2,
152 const T_sigma &sigma) {
157 size_t x1_size = x1.size();
158 size_t x2_size = x2.size();
159 for (
size_t i = 0; i < x1_size; ++i) {
163 for (
size_t i = 0; i < x2_size; ++i) {
167 Eigen::Matrix<typename return_type<T_x1, T_x2, T_sigma>::type, Eigen::Dynamic,
169 cov(x1_size, x2_size);
171 if (x1_size == 0 || x2_size == 0)
174 T_sigma sigma_sq =
square(sigma);
176 for (
size_t i = 0; i < x1_size; ++i) {
177 for (
size_t j = 0; j < x2_size; ++j) {
206 template <
typename T_x1,
typename T_x2,
typename T_sigma>
207 Eigen::Matrix<typename return_type<T_x1, T_x2, T_sigma>::type, Eigen::Dynamic,
210 const T_sigma &sigma) {
215 size_t x1_size = x1.size();
216 size_t x2_size = x2.size();
222 Eigen::Matrix<typename stan::return_type<T_x1, T_x2, T_sigma>::type,
223 Eigen::Dynamic, Eigen::Dynamic>
224 cov(x1_size, x2_size);
226 if (x1_size == 0 || x2_size == 0)
229 T_sigma sigma_sq =
square(sigma);
231 for (
size_t i = 0; i < x1_size; ++i) {
232 for (
size_t j = 0; j < x2_size; ++j) {
233 cov(i, j) = sigma_sq + x1[i] * x2[j];
void check_finite(const char *function, const char *name, const T_y &y)
Check if y is finite.
fvar< T > dot_self(const Eigen::Matrix< fvar< T >, R, C > &v)
void check_nonnegative(const char *function, const char *name, const T_y &y)
Check if y is non-negative.
fvar< T > square(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 > dot_product(const Eigen::Matrix< fvar< T >, R1, C1 > &v1, const Eigen::Matrix< fvar< T >, R2, C2 > &v2)
Eigen::Matrix< typename return_type< T_x, T_sigma >::type, Eigen::Dynamic, Eigen::Dynamic > gp_dot_prod_cov(const std::vector< Eigen::Matrix< T_x, Eigen::Dynamic, 1 >> &x, const T_sigma &sigma)
Returns a dot product covariance matrix.