Lodestar
An integrated real-time control package in C++
IntegratorNewton.hpp
1 //
2 // Created by Hamza El-Kebir on 4/12/21.
3 //
4 
5 #ifndef LODESTAR_INTEGRATORNEWTON_HPP
6 #define LODESTAR_INTEGRATORNEWTON_HPP
7 
8 #include "../Integrator.hpp"
9 
10 namespace ls {
11  namespace primitives {
15  template<typename TState>
16  class IntegratorNewton : public Integrator<TState> {
17  public:
18  typedef Integrator<TState> Base;
19  using Base::samplingPeriod_;
20  using Base::time_;
21  using Base::state_;
22  using Base::integral_;
23 
25 
26  explicit IntegratorNewton(double dt);
27 
28  explicit IntegratorNewton(TState *state);
29 
30  explicit IntegratorNewton(double dt, TState *state);
31 
32  void updateState();
33 
34  void updateState(double dt);
35 
36  void updateState(TState *_state);
37 
38  void updateState(double dt, TState *state);
39 
40  const TState *getState() const;
41 
42  void setState(const TState &state);
43 
44  double updateTime();
45 
46  double updateTime(double dt);
47 
48  double getTime() const;
49 
50  const TState *getIntegral() const;
51  };
52  }
53 }
54 
55 template<typename TState>
57 {
58  samplingPeriod_ = 1e-3;
59  time_ = 0;
60  state_ = new TState{};
61  integral_ = new TState{};
62 }
63 
64 template<typename TState>
66 {
67  samplingPeriod_ = dt;
68  time_ = 0;
69  state_ = new TState{};
70  integral_ = new TState{};
71 }
72 
73 template<typename TState>
75 {
76  samplingPeriod_ = 1e-3;
77  time_ = 0;
78  state_ = state;
79  integral_ = new TState{};
80 }
81 
82 template<typename TState>
83 inline
85 {
86  samplingPeriod_ = dt;
87  time_ = 0;
88  state_ = state;
89  integral_ = new TState{};
90 }
91 
92 template<typename TState>
94 {
95  updateTime();
96  (*integral_) += (*state_) * samplingPeriod_;
97 }
98 
99 template<typename TState>
101 {
102  updateTime(dt);
103  (*integral_) += (*state_) * dt;
104 }
105 
106 template<typename TState>
108 {
109  updateTime();
110  (*state_) = (*state);
111  (*integral_) += (*state_) * samplingPeriod_;
112 }
113 
114 template<typename TState>
115 inline void
117 {
118  updateTime(dt);
119  (*state_) = (*state);
120  (*integral_) += (*state_) * dt;
121 }
122 
123 template<typename TState>
125 {
126  return integral_;
127 }
128 
129 template<typename TState>
131 {
132  time_ += samplingPeriod_;
133  return time_;
134 }
135 
136 template<typename TState>
138 {
139  time_ += dt;
140  return time_;
141 }
142 
143 template<typename TState>
145 {
146  return state_;
147 }
148 
149 template<typename TState>
151 {
152  *state_ = state;
153 }
154 
155 template<typename TState>
157 {
158  return time_;
159 }
160 
161 #endif //LODESTAR_INTEGRATORNEWTON_HPP
ls::primitives::Integrator
Definition: Integrator.hpp:11
ls
Main Lodestar code.
Definition: BilinearTransformation.hpp:12
ls::primitives::IntegratorNewton
Definition: IntegratorNewton.hpp:16