Algorith sandbox
dual.hpp
Go to the documentation of this file.
1 
9 #pragma once
11 
12 namespace algo { namespace ad {
18  template <typename I = boost::numeric::ublas::vector<double> >
19  class dual : public dual_expression<dual<I> > {
20  private:
21  typedef dual<I> self_type;
22  public:
23  //closure
24  typedef const self_type& const_closure_type;
25  //inf
26  typedef I infinitesimal_type;
27  typedef I& infinitesimal_reference;
28  typedef const I& const_infinitesimal_reference;
29 
30  public:
34  explicit dual()
35  : _value(0), _derivative(0)
36  {
37  }
44  template <typename AE>
46  : _value(ae().getValue()), _derivative(ae().getDerivative())
47  {
48  }
54  dual(const double v)
55  : _value(v), _derivative(0)
56  {
57  }
65  const double& v,
66  const infinitesimal_type& d)
67  : _value(v), _derivative(d)
68  {
69  }
75  double& getValue()
76  {
77  return _value;
78  }
84  const double& getValue() const
85  {
86  return _value;
87  }
93  infinitesimal_reference getDerivative()
94  {
95  return _derivative;
96  }
102  const_infinitesimal_reference getDerivative() const
103  {
104  return _derivative;
105  }
106  private:
107  double _value;
108  infinitesimal_type _derivative;
109  };
110 } } // namespace algo { namespace ad {
dual_expression class.
Definition: dual.hpp:19
dual(const dual_expression< AE > &ae)
Definition: dual.hpp:45
dual(const double &v, const infinitesimal_type &d)
TODO:need to check inf_type is same size.
Definition: dual.hpp:64
const double & getValue() const
Definition: dual.hpp:84
infinitesimal_reference getDerivative()
Definition: dual.hpp:93
double & getValue()
Definition: dual.hpp:75
Definition: dual_expression.hpp:19
Definition: ublas_matrix_expression_concept.hpp:5
const_infinitesimal_reference getDerivative() const
Definition: dual.hpp:102
dual(const double v)
Definition: dual.hpp:54