Algorith sandbox
util.hpp
1 
8 #pragma once
9 #include "algo/ad/dual.hpp"
10 #include <boost/numeric/ublas/vector.hpp>
11 
12 namespace algo { namespace ad {
22  template <typename V>
23  boost::numeric::ublas::vector<V>
24  apply_element(
25  const std::vector<std::function<
26  V (const boost::numeric::ublas::vector<V>&)> >& functions,
27  const boost::numeric::ublas::vector<V>& x)
28  {
29  namespace ublas = boost::numeric::ublas;
30  typedef std::function<V (const ublas::vector<V>&)> function_type;
31 
32  ublas::vector<V> result(functions.size());
33  auto transformer = [&x](const function_type& f) {
34  return f(x);
35  };
36  std::transform(
37  functions.begin(), functions.end(), result.begin(), transformer);
38  return result;
39  }
48  dual<boost::numeric::ublas::vector<double> >
49  make_dual(
50  const double value,
51  const boost::numeric::ublas::vector<double>& infinitesimal);
61  dual<boost::numeric::ublas::vector<double> >
62  make_unit_dual(
63  const double value,
64  const std::size_t size,
65  const std::size_t index);
73  boost::numeric::ublas::vector<dual<boost::numeric::ublas::vector<double> > >
74  make_vector_dual(const boost::numeric::ublas::vector<double>& value);
75 } } // namespace algo { namespace ad {
Definition: ublas_matrix_expression_concept.hpp:5
Definition: ublas_unary_operator.hpp:13
dual class.