Algorith sandbox
dual_unary_operator_helper.hpp
Go to the documentation of this file.
1 
9 #pragma once
11 
12 namespace algo { namespace ad { namespace detail {
13  /*--------------------------------------------------------------------------
14  * dual_negate_helper
15  *------------------------------------------------------------------------*/
24  template<typename E>
25  auto dual_negate_helper(const dual_expression<E>& e)
26  -> decltype(-e().getDerivative())
27  {
28  return -e().getDerivative();
29  }
37  double dual_negate_helper(const double e)
38  {
39  return -e;
40  }
41  /*--------------------------------------------------------------------------
42  * dual_exp_helper
43  *------------------------------------------------------------------------*/
52  template<typename E>
53  auto dual_exp_helper(const dual_expression<E>& e)
54  -> decltype(boost::numeric::ublas::exp(e().getDerivative()))
55  {
56  return boost::numeric::ublas::exp(e().getDerivative());
57  }
65  double dual_exp_helper(const double e)
66  {
67  return std::exp(e);
68  }
69  /*--------------------------------------------------------------------------
70  * dual_log_helper
71  *------------------------------------------------------------------------*/
80  template<typename E>
81  auto dual_log_helper(const dual_expression<E>& e)
82  -> decltype(boost::numeric::ublas::element_inverse(e().getDerivative()))
83  {
84  return boost::numeric::ublas::element_inverse(e().getDerivative());
85  }
93  double dual_log_helper(const double e)
94  {
95  return 1.0 / e;
96  }
97  /*--------------------------------------------------------------------------
98  * dual_sin_helper
99  *------------------------------------------------------------------------*/
108  template<typename E>
109  auto dual_sin_helper(const dual_expression<E>& e)
110  -> decltype(boost::numeric::ublas::cos(e().getDerivative()))
111  {
112  return boost::numeric::ublas::cos(e().getDerivative());
113  }
121  double dual_sin_helper(const double e)
122  {
123  return std::cos(e);
124  }
125  /*--------------------------------------------------------------------------
126  * dual_cos_helper
127  *------------------------------------------------------------------------*/
136  template<typename E>
137  auto dual_cos_helper(const dual_expression<E>& e)
138  -> decltype(-boost::numeric::ublas::sin(e().getDerivative()))
139  {
140  return -boost::numeric::ublas::sin(e().getDerivative());
141  }
149  double dual_cos_helper(const double e)
150  {
151  return -std::sin(e);
152  }
153 } } } // namespace algo { namespace ad { namespace detail {
Definition: ublas_matrix_expression_concept.hpp:5