11 namespace algo {
namespace ad {
namespace detail {
25 template<
typename E1,
typename E2>
26 auto dual_add_function(
const dual_expression<E1>& e1,
const dual_expression<E2>& e2)
27 -> decltype(e1().getDerivative() + e2().getDerivative())
29 return e1().getDerivative() + e2().getDerivative();
41 auto dual_add_function(
const double e1,
const dual_expression<E2>& e2)
42 -> decltype(e2().getDerivative())
44 return e2().getDerivative();
56 auto dual_add_function(
const dual_expression<E1>& e1,
const double e2)
57 -> decltype(e1().getDerivative())
59 return e1().getDerivative();
74 template<
typename E1,
typename E2>
75 auto dual_minus_function(
const dual_expression<E1>& e1,
const dual_expression<E2>& e2)
76 -> decltype(e1().getDerivative() - e2().getDerivative())
78 return e1().getDerivative() - e2().getDerivative();
90 auto dual_minus_function(
const double e1,
const dual_expression<E2>& e2)
91 -> decltype(e2().getDerivative())
93 return e2().getDerivative();
104 template<
typename E1>
105 auto dual_minus_function(
const dual_expression<E1>& e1,
const double e2)
106 -> decltype(e1().getDerivative())
108 return e1().getDerivative();
123 template<
typename E1,
typename E2>
124 auto dual_multiplies_function(
125 const dual_expression<E1>& e1,
126 const dual_expression<E2>& e2)
127 -> decltype(e1().getDerivative() * e2().getValue() + e1().getValue() * e2().getDerivative())
129 return e1().getDerivative() * e2().getValue() + e1().getValue() * e2().getDerivative();
140 template<
typename E2>
141 auto dual_multiplies_function(
const double e1,
const dual_expression<E2>& e2)
142 -> decltype(e2().getDerivative())
144 return e2().getDerivative();
155 template<
typename E1>
156 auto dual_multiplies_function(
const dual_expression<E1>& e1,
const double e2)
157 -> decltype(e1().getDerivative())
159 return e1().getDerivative();
174 template<
typename E1,
typename E2>
175 auto dual_divide_function(
176 const dual_expression<E1>& e1,
177 const dual_expression<E2>& e2)
178 -> decltype((e1().getDerivative() * e2().getValue() - e1().getValue() * e2().getDerivative())
179 / (e1().getValue() * e1().getValue()))
181 return (e1().getDerivative() * e2().getValue() - e1().getValue() * e2().getDerivative())
182 / (e1().getValue() * e1().getValue());
193 template<
typename E2>
194 auto dual_divide_function(
const double e1,
const dual_expression<E2>& e2)
195 -> decltype(e2().getDerivative())
197 return e2().getDerivative();
208 template<
typename E1>
209 auto dual_divide_function(
const dual_expression<E1>& e1,
const double e2)
210 -> decltype(e1().getDerivative())
212 return e1().getDerivative();
Definition: ublas_matrix_expression_concept.hpp:5