Stan Math Library  2.9.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 
16  namespace math {
17 
35  template <typename T_y>
36  inline bool
38  const char* function,
39  const char* name,
40  const Eigen::Matrix<T_y, Eigen::Dynamic, Eigen::Dynamic>& y
41  ) {
42  check_square(function, name, y);
43 
44  using Eigen::Matrix;
46  using std::fabs;
47  using Eigen::Dynamic;
48 
49  typedef typename index_type<Matrix<T_y, Dynamic, Dynamic> >::type
50  size_type;
51 
52  size_type k = y.rows();
53  if (k == 1)
54  return true;
55  for (size_type m = 0; m < k; ++m) {
56  for (size_type n = m + 1; n < k; ++n) {
57  if (!(fabs(value_of(y(m, n)) - value_of(y(n, m)))
59  std::ostringstream msg1;
60  msg1 << "is not symmetric. "
61  << name << "[" << stan::error_index::value + m << ","
62  << stan::error_index::value +n << "] = ";
63  std::string msg1_str(msg1.str());
64  std::ostringstream msg2;
65  msg2 << ", but "
66  << name << "[" << stan::error_index::value +n << ","
68  << "] = " << y(n, m);
69  std::string msg2_str(msg2.str());
70  domain_error(function, name, y(m, n),
71  msg1_str.c_str(), msg2_str.c_str());
72  return false;
73  }
74  }
75  }
76  return true;
77  }
78 
79  }
80 }
81 #endif
fvar< T > fabs(const fvar< T > &x)
Definition: fabs.hpp:14
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:19
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–2015, Stan Development Team.