Closed yizhang-yiz closed 3 years ago
That seems better. What is different between the two? Is this a choice that someone could make or is it always guess and check?
@bbbales2
ckrk
has a greater stability region than rk45
so it's more stable, and it's designed for problems with large derivatives and/or rapid oscillations. So it suits better for ODEs that could be sampled into mild stiffness(the SIR & Van del Pol example above). For non-stiff problem it could cause slow down by trying too hard on parameters that could be right-out rejected(the Lotka-Volterra example).
Description
This issue is spawned out of the benchmark in #2326 , where additional integrators from odeint & arkode was evaluated. In particular,
boost::odeint
's Cash-Karp method(ckrk
) that has better stability shows to be an potential addition to our integrators.Example
WIP branch:
cash_karp_ckrk
.further benchmark based on runing 4-chain sampling using 10 random seeds in each model.
lokta-volterror
In this model
ckrk
has 4 chains "stuck", indicated by much greater # of leapfrogs. Plots below excludes those chains.SIR
mildly-stiff Van del Pol oscillator
describe the expected behavior if the feature exists Same as
rk45
:ode_ckrk(...)
with implementation based on boost::odeint.Expected Output
Same integrator output but potentially more efficient when parameter sampled causes the system to be stability-constrained.
Current Version:
v3.4.0
@bbbales2 @wds15