Helios++
Helios software for LiDAR simulations
ParametricIterativeEulerMethod.h
1 #pragma once
2 
3 #include <fluxionum/Function.h>
4 
5 #include <armadillo>
6 
7 namespace fluxionum{
8 
26 template <typename A, typename B>
27 class ParametricIterativeEulerMethod : public Function<A, arma::Col<B>>{
28 protected:
29  // *** ATTRIBUTES *** //
30  // ******************** //
44  A t0;
50  A t;
55  arma::Col<B> y0;
61  arma::Col<B> y;
62 
63 public:
64  // *** CONSTRUCTION / DESTRUCTION *** //
65  // ************************************ //
73  Function<A, arma::Col<B>> &dydt,
74  A const &t0,
75  arma::Col<B> const &y0
76  ):
77  Function<A, arma::Col<B>>(),
78  dydt(dydt),
79  t0(t0),
80  t(t0),
81  y0(y0),
82  y(y0)
83  {}
84  virtual ~ParametricIterativeEulerMethod() = default;
85 
86  // *** FUNCTION METHODS *** //
87  // ************************** //
102  arma::Col<B> eval(A const &h) override{
103  y = y + h*dydt(t);
104  t = t+h;
105  return y;
106  }
107 
112  virtual void restart(){
113  setT(getT0());
114  setY(getY0());
115  }
116 
117  // *** GETTERs and SETTERs *** //
118  // ***************************** //
122  inline Function<A, B> const& getDydt() const {return dydt;};
126  inline A getT() const {return t;};
130  inline void setT(A const t) {this->t = t;}
134  inline A getT0() const {return t0;}
138  inline arma::Col<B> getY() const {return y;}
142  inline void setY(arma::Col<B> const y) {this->y = y;}
146  inline arma::Col<B> getY0() const {return y0;}
147 };
148 
149 }
Abstract class representing a function.
Definition: Function.h:27
Parametric iterative Euler method.
Definition: ParametricIterativeEulerMethod.h:27
arma::Col< B > getY() const
Definition: ParametricIterativeEulerMethod.h:138
A getT0() const
Definition: ParametricIterativeEulerMethod.h:134
virtual void restart()
Restart the ParametricIterativeEulerMethod so it is at its initial state again .
Definition: ParametricIterativeEulerMethod.h:112
arma::Col< B > y
The current value of .
Definition: ParametricIterativeEulerMethod.h:61
A getT() const
Definition: ParametricIterativeEulerMethod.h:126
arma::Col< B > y0
The initial value of , .
Definition: ParametricIterativeEulerMethod.h:55
Function< A, B > const & getDydt() const
Definition: ParametricIterativeEulerMethod.h:122
Function< A, arma::Col< B > > & dydt
Reference to the parametric derivative function.
Definition: ParametricIterativeEulerMethod.h:39
ParametricIterativeEulerMethod(Function< A, arma::Col< B >> &dydt, A const &t0, arma::Col< B > const &y0)
ParametricIterativeEulerMethod default constructor.
Definition: ParametricIterativeEulerMethod.h:72
arma::Col< B > eval(A const &h) override
Iteratively compute the next value using Euler method.
Definition: ParametricIterativeEulerMethod.h:102
A t
The current value of .
Definition: ParametricIterativeEulerMethod.h:50
arma::Col< B > getY0() const
Definition: ParametricIterativeEulerMethod.h:146
void setY(arma::Col< B > const y)
Definition: ParametricIterativeEulerMethod.h:142
A t0
The initial value of , .
Definition: ParametricIterativeEulerMethod.h:44
void setT(A const t)
Definition: ParametricIterativeEulerMethod.h:130