22 using state_type =
typename base_type::state_type;
23 using time_type =
typename base_type::time_type;
24 using value_type =
typename base_type::value_type;
27 std::shared_ptr<typename base_type::wiener_process_type> wiener =
nullptr)
30 void step(state_type& state, time_type dt)
override {
37 this->wiener_->generate_increment(dW, dt);
40 this->problem_->drift(this->current_time_, state, drift_term);
43 this->problem_->diffusion(this->current_time_, state, diffusion_term);
46 this->problem_->apply_noise(this->current_time_, state, diffusion_term, dW);
49 for (
size_t i = 0; i < state.size(); ++i) {
50 auto state_it = state.begin();
51 auto drift_it = drift_term.begin();
52 auto diffusion_it = diffusion_term.begin();
54 state_it[i] += drift_it[i] * dt + diffusion_it[i];
57 this->advance_time(dt);
60 std::string name()
const override {
61 return "Euler-Maruyama";
Euler-Maruyama method for SDEs.