Algorith sandbox
jacobian_matrix_adaptor_helper.hpp
1 #pragma once
4 #include <boost/numeric/ublas/vector_expression.hpp>
5 
6 namespace algo { namespace ad { namespace detail {
16  template <typename E>
17  double jacobian_matrix_accessor(
18  const boost::numeric::ublas::vector_expression<E>& e,
19  const std::size_t j)
20  {
21  assert(j < e().size() && j >= 0);
22  return e()(j);
23  }
24 
25  template <typename E>
26  double jacobian_matrix_accessor(
27  const double e,
28  const std::size_t j)
29  {
30  assert(j == 0);
31  return e;
32  }
43  template <typename E>
44  double jacobian_matrix_accessor(
45  const dual_expression<E>& e,
46  const std::size_t i,
47  const std::size_t j)
48  {
49  assert(i == 0);
50  return jacobian_matrix_accessor(e()(i).getDerivative(), j);
51  }
62  template <typename E>
63  double jacobian_matrix_accessor(
64  const boost::numeric::ublas::vector_expression<E>& e,
65  const std::size_t i,
66  const std::size_t j)
67  {
68  assert(i < e().size() && i >= 0);
69  return jacobian_matrix_accessor(e()(i).getDerivative(), j);
70  }
71 } } } // namespace algo { namespace ad { namespace detail {
dual_expression class.
helper funtions.
Definition: ublas_matrix_expression_concept.hpp:5