Stan Math Library  2.15.0
reverse mode automatic differentiation
apply_scalar_unary.hpp
Go to the documentation of this file.
1 #ifndef STAN_MATH_PRIM_MAT_VECTORIZE_APPLY_SCALAR_UNARY_HPP
2 #define STAN_MATH_PRIM_MAT_VECTORIZE_APPLY_SCALAR_UNARY_HPP
3 
4 #include <Eigen/Dense>
5 #include <vector>
6 
7 namespace stan {
8  namespace math {
9 
34  template <typename F, typename T>
39  typedef typename Eigen::internal::traits<T>::Scalar scalar_t;
40 
45  typedef Eigen::Matrix<scalar_t, T::RowsAtCompileTime,
46  T::ColsAtCompileTime>
48 
57  static inline return_t apply(const T& x) {
58  return_t result(x.rows(), x.cols());
59  for (int j = 0; j < x.cols(); ++j)
60  for (int i = 0; i < x.rows(); ++i)
61  result(i, j) = apply_scalar_unary<F, scalar_t>::apply(x(i, j));
62  return result;
63  }
64  };
65 
72  template <typename F>
73  struct apply_scalar_unary<F, double> {
77  typedef double return_t;
78 
88  static inline return_t apply(double x) {
89  return F::fun(x);
90  }
91  };
92 
101  template <typename F>
102  struct apply_scalar_unary<F, int> {
106  typedef double return_t;
107 
117  static inline return_t apply(int x) {
118  return F::fun(static_cast<double>(x));
119  }
120  };
121 
131  template <typename F, typename T>
132  struct apply_scalar_unary<F, std::vector<T> > {
137  typedef typename std::vector<typename apply_scalar_unary<F, T>::return_t>
139 
149  static inline return_t apply(const std::vector<T>& x) {
150  return_t fx(x.size());
151  for (size_t i = 0; i < x.size(); ++i)
152  fx[i] = apply_scalar_unary<F, T>::apply(x[i]);
153  return fx;
154  }
155  };
156 
157  }
158 }
159 #endif
static return_t apply(double x)
Apply the function specified by F to the specified argument.
Eigen::Matrix< scalar_t, T::RowsAtCompileTime, T::ColsAtCompileTime > return_t
Return type for applying the function elementwise to a matrix expression template of type T...
static return_t apply(const std::vector< T > &x)
Apply the function specified by F elementwise to the specified argument.
static return_t apply(int x)
Apply the function specified by F to the specified argument.
double return_t
The return type, double.
std::vector< typename apply_scalar_unary< F, T >::return_t > return_t
Return type, which is calculated recursively as a standard vector of the return type of the contained...
Eigen::internal::traits< T >::Scalar scalar_t
Type of underlying scalar for the matrix type T.
Base template class for vectorization of unary scalar functions defined by a template class F to a sc...
double return_t
The return type, double.
static return_t apply(const T &x)
Return the result of applying the function defined by the template parameter F to the specified matri...

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