Stan Math Library  2.12.0
reverse mode automatic differentiation
check_symmetric.hpp
Go to the documentation of this file.
1 #ifndef STAN_MATH_PRIM_MAT_ERR_CHECK_SYMMETRIC_HPP
2 #define STAN_MATH_PRIM_MAT_ERR_CHECK_SYMMETRIC_HPP
3 
11 #include <sstream>
12 #include <string>
13 
14 namespace stan {
15  namespace math {
16 
34  template <typename T_y>
35  inline bool
37  const char* function,
38  const char* name,
39  const Eigen::Matrix<T_y, Eigen::Dynamic, Eigen::Dynamic>& y
40  ) {
41  check_square(function, name, y);
42 
43  using Eigen::Matrix;
44  using std::fabs;
45  using Eigen::Dynamic;
46 
47  typedef typename index_type<Matrix<T_y, Dynamic, Dynamic> >::type
48  size_type;
49 
50  size_type k = y.rows();
51  if (k == 1)
52  return true;
53  for (size_type m = 0; m < k; ++m) {
54  for (size_type n = m + 1; n < k; ++n) {
55  if (!(fabs(value_of(y(m, n)) - value_of(y(n, m)))
57  std::ostringstream msg1;
58  msg1 << "is not symmetric. "
59  << name << "[" << stan::error_index::value + m << ","
60  << stan::error_index::value +n << "] = ";
61  std::string msg1_str(msg1.str());
62  std::ostringstream msg2;
63  msg2 << ", but "
64  << name << "[" << stan::error_index::value +n << ","
66  << "] = " << y(n, m);
67  std::string msg2_str(msg2.str());
68  domain_error(function, name, y(m, n),
69  msg1_str.c_str(), msg2_str.c_str());
70  return false;
71  }
72  }
73  }
74  return true;
75  }
76 
77  }
78 }
79 #endif
fvar< T > fabs(const fvar< T > &x)
Definition: fabs.hpp:15
T value_of(const fvar< T > &v)
Return the value of the specified variable.
Definition: value_of.hpp:16
const double CONSTRAINT_TOLERANCE
The tolerance for checking arithmetic bounds In rank and in simplexes.
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:18
void domain_error(const char *function, const char *name, const T &y, const char *msg1, const char *msg2)
Throw a domain error with a consistently formatted message.
bool check_symmetric(const char *function, const char *name, const Eigen::Matrix< T_y, Eigen::Dynamic, Eigen::Dynamic > &y)
Return true if the specified matrix is symmetric.
bool check_square(const char *function, const char *name, const Eigen::Matrix< T_y, Eigen::Dynamic, Eigen::Dynamic > &y)
Return true if the specified matrix is square.

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