Stan Math Library  2.10.0
reverse mode automatic differentiation
corr_matrix_constrain.hpp
Go to the documentation of this file.
1 #ifndef STAN_MATH_PRIM_MAT_FUN_CORR_MATRIX_CONSTRAIN_HPP
2 #define STAN_MATH_PRIM_MAT_FUN_CORR_MATRIX_CONSTRAIN_HPP
3 
8 #include <stdexcept>
9 
10 namespace stan {
11 
12  namespace math {
13 
38  template <typename T>
39  Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>
40  corr_matrix_constrain(const Eigen::Matrix<T, Eigen::Dynamic, 1>& x,
41  typename math::index_type
42  <Eigen::Matrix<T, Eigen::Dynamic, 1> >::type k) {
43  using Eigen::Dynamic;
44  using Eigen::Matrix;
46  typedef typename index_type<Matrix<T, Dynamic, 1> >::type size_type;
47 
48  size_type k_choose_2 = (k * (k - 1)) / 2;
49  if (k_choose_2 != x.size())
50  throw std::invalid_argument("x is not a valid correlation matrix");
51  Eigen::Array<T, Eigen::Dynamic, 1> cpcs(k_choose_2);
52  for (size_type i = 0; i < k_choose_2; ++i)
53  cpcs[i] = corr_constrain(x[i]);
54  return read_corr_matrix(cpcs, k);
55  }
56 
76  template <typename T>
77  Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>
78  corr_matrix_constrain(const Eigen::Matrix<T, Eigen::Dynamic, 1>& x,
79  typename math::index_type
80  <Eigen::Matrix<T, Eigen::Dynamic, 1> >::type k,
81  T& lp) {
82  using Eigen::Array;
83  using Eigen::Dynamic;
84  using Eigen::Matrix;
86  typedef typename index_type<Matrix<T, Dynamic, 1> >::type size_type;
87 
88  size_type k_choose_2 = (k * (k - 1)) / 2;
89  if (k_choose_2 != x.size())
90  throw std::invalid_argument("x is not a valid correlation matrix");
91  Array<T, Dynamic, 1> cpcs(k_choose_2);
92  for (size_type i = 0; i < k_choose_2; ++i)
93  cpcs[i] = corr_constrain(x[i], lp);
94  return read_corr_matrix(cpcs, k, lp);
95  }
96 
97  }
98 
99 }
100 
101 #endif
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > corr_matrix_constrain(const Eigen::Matrix< T, Eigen::Dynamic, 1 > &x, typename math::index_type< Eigen::Matrix< T, Eigen::Dynamic, 1 > >::type k)
Return the correlation matrix of the specified dimensionality derived from the specified vector of un...
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > read_corr_matrix(const Eigen::Array< T, Eigen::Dynamic, 1 > &CPCs, const size_t K)
Return the correlation matrix of the specified dimensionality corresponding to the specified canonica...
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic >::Index size_type
Type for sizes and indexes in an Eigen matrix with double e.
Definition: typedefs.hpp:13
Primary template class for the metaprogram to compute the index type of a container.
Definition: index_type.hpp:19
void invalid_argument(const char *function, const char *name, const T &y, const char *msg1, const char *msg2)
Throw an invalid_argument exception with a consistently formatted message.
T corr_constrain(const T x)
Return the result of transforming the specified scalar to have a valid correlation value between -1 a...

     [ Stan Home Page ] © 2011–2016, Stan Development Team.