DiffEq - Modern C++ ODE Integration Library 1.0.0
High-performance C++ library for solving ODEs with async signal processing
Loading...
Searching...
No Matches
euler.hpp
1#pragma once
2#include <core/concepts.hpp>
3#include <core/abstract_integrator.hpp>
4#include <core/state_creator.hpp>
5
6namespace diffeq {
7
17template<system_state S>
19public:
21 using state_type = typename base_type::state_type;
22 using time_type = typename base_type::time_type;
23 using value_type = typename base_type::value_type;
24 using system_function = typename base_type::system_function;
25
26 explicit EulerIntegrator(system_function sys)
27 : base_type(std::move(sys)) {}
28
29 void step(state_type& state, time_type dt) override {
30 // Create temporary state for derivative
31 state_type derivative = StateCreator<state_type>::create(state);
32
33 // Compute derivative: f(t, y)
34 this->sys_(this->current_time_, state, derivative);
35
36 // Update state: y_{n+1} = y_n + dt * f(t_n, y_n)
37 for (std::size_t i = 0; i < state.size(); ++i) {
38 auto state_it = state.begin();
39 auto deriv_it = derivative.begin();
40 state_it[i] += dt * deriv_it[i];
41 }
42
43 this->advance_time(dt);
44 }
45};
46
47} // namespace diffeq
Forward Euler integrator.
Definition euler.hpp:18