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;
29 void step(state_type& state, time_type dt)
override {
36 this->sys_(this->current_time_, state, k1);
39 for (std::size_t i = 0; i < state.size(); ++i) {
40 auto state_it = state.begin();
41 auto k1_it = k1.begin();
42 auto temp_it = temp_state.begin();
43 temp_it[i] = state_it[i] + dt * k1_it[i];
45 this->sys_(this->current_time_ + dt, temp_state, k2);
48 for (std::size_t i = 0; i < state.size(); ++i) {
49 auto state_it = state.begin();
50 auto k1_it = k1.begin();
51 auto k2_it = k2.begin();
52 state_it[i] += dt * (k1_it[i] + k2_it[i]) /
static_cast<time_type
>(2);
55 this->advance_time(dt);