Icarus
Vehicle Simulation as a Transformable Computational Graph, built on Vulcan and Janus
Loading...
Searching...
No Matches
RK4Integrator.hpp
Go to the documentation of this file.
1#pragma once
2
9
11#include <janus/math/IntegratorStep.hpp>
12
13namespace icarus {
14
15// =============================================================================
16// Forward Euler Integrator (1st Order)
17// =============================================================================
18
27template <typename Scalar> class EulerIntegrator : public Integrator<Scalar> {
28 public:
30
31 JanusVector<Scalar> Step(const DerivativeFunc &f, const JanusVector<Scalar> &x, Scalar t,
32 Scalar dt) override {
33 return janus::euler_step(f, x, t, dt);
34 }
35
36 [[nodiscard]] std::string Name() const override { return "Euler"; }
37 [[nodiscard]] int Order() const override { return 1; }
38 [[nodiscard]] IntegratorType Type() const override { return IntegratorType::Euler; }
39};
40
41// =============================================================================
42// Heun's Method / RK2 Integrator (2nd Order)
43// =============================================================================
44
53template <typename Scalar> class RK2Integrator : public Integrator<Scalar> {
54 public:
56
57 JanusVector<Scalar> Step(const DerivativeFunc &f, const JanusVector<Scalar> &x, Scalar t,
58 Scalar dt) override {
59 return janus::rk2_step(f, x, t, dt);
60 }
61
62 [[nodiscard]] std::string Name() const override { return "RK2"; }
63 [[nodiscard]] int Order() const override { return 2; }
64 [[nodiscard]] IntegratorType Type() const override { return IntegratorType::RK2; }
65};
66
67// =============================================================================
68// Classic RK4 Integrator (4th Order)
69// =============================================================================
70
88template <typename Scalar> class RK4Integrator : public Integrator<Scalar> {
89 public:
91
92 JanusVector<Scalar> Step(const DerivativeFunc &f, const JanusVector<Scalar> &x, Scalar t,
93 Scalar dt) override {
94 return janus::rk4_step(f, x, t, dt);
95 }
96
97 [[nodiscard]] std::string Name() const override { return "RK4"; }
98 [[nodiscard]] int Order() const override { return 4; }
99 [[nodiscard]] IntegratorType Type() const override { return IntegratorType::RK4; }
100};
101
102} // namespace icarus
Abstract interface for numerical integrators.
Forward Euler integrator (1st order).
Definition RK4Integrator.hpp:27
IntegratorType Type() const override
Get integrator type.
Definition RK4Integrator.hpp:38
JanusVector< Scalar > Step(const DerivativeFunc &f, const JanusVector< Scalar > &x, Scalar t, Scalar dt) override
Advance state by one step.
Definition RK4Integrator.hpp:31
int Order() const override
Get integrator order (for error analysis).
Definition RK4Integrator.hpp:37
std::string Name() const override
Get integrator name for logging.
Definition RK4Integrator.hpp:36
Abstract interface for numerical integrators.
Definition Integrator.hpp:45
std::function< JanusVector< Scalar >(Scalar t, const JanusVector< Scalar > &x)> DerivativeFunc
Derivative function signature.
Definition Integrator.hpp:54
Heun's method / RK2 integrator (2nd order).
Definition RK4Integrator.hpp:53
IntegratorType Type() const override
Get integrator type.
Definition RK4Integrator.hpp:64
std::string Name() const override
Get integrator name for logging.
Definition RK4Integrator.hpp:62
int Order() const override
Get integrator order (for error analysis).
Definition RK4Integrator.hpp:63
JanusVector< Scalar > Step(const DerivativeFunc &f, const JanusVector< Scalar > &x, Scalar t, Scalar dt) override
Advance state by one step.
Definition RK4Integrator.hpp:57
Classic 4th-order Runge-Kutta integrator.
Definition RK4Integrator.hpp:88
int Order() const override
Get integrator order (for error analysis).
Definition RK4Integrator.hpp:98
IntegratorType Type() const override
Get integrator type.
Definition RK4Integrator.hpp:99
std::string Name() const override
Get integrator name for logging.
Definition RK4Integrator.hpp:97
JanusVector< Scalar > Step(const DerivativeFunc &f, const JanusVector< Scalar > &x, Scalar t, Scalar dt) override
Advance state by one step.
Definition RK4Integrator.hpp:92
Definition AggregationTypes.hpp:13
IntegratorType
Available integrator methods.
Definition IntegratorTypes.hpp:27
@ Euler
Forward Euler (1st order, 1 eval) - janus::euler_step.
Definition IntegratorTypes.hpp:28
@ RK2
Heun's method (2nd order, 2 evals) - janus::rk2_step.
Definition IntegratorTypes.hpp:29
@ RK4
Classic RK4 (4th order, 4 evals) - janus::rk4_step.
Definition IntegratorTypes.hpp:30