![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Class template runge_kutta_dopri5Boost , Chapter 1. Boost.Numeric.Odeint , Header <boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp>
|
![]() | Home | Libraries | People | FAQ | More |
boost::numeric::odeint::runge_kutta_dopri5 — The Runge-Kutta Dormand-Prince 5 method.
// In header: <boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp> template<typename State, typename Value = double, typename Deriv = State, typename Time = Value, typename Algebra = typename algebra_dispatcher< State >::algebra_type, typename Operations = typename operations_dispatcher< State >::operations_type, typename Resizer = initially_resizer> class runge_kutta_dopri5 : public explicit_error_stepper_fsal_base { public: // types typedef explicit_error_stepper_fsal_base< runge_kutta_dopri5< ... >,... > stepper_base_type; typedef stepper_base_type::state_type state_type; typedef stepper_base_type::value_type value_type; typedef stepper_base_type::deriv_type deriv_type; typedef stepper_base_type::time_type time_type; typedef stepper_base_type::algebra_type algebra_type; typedef stepper_base_type::operations_type operations_type; typedef stepper_base_type::resizer_type resizer_type; // construct/copy/destruct runge_kutta_dopri5(const algebra_type & = algebra_type()); // public member functions template<typename System, typename StateIn, typename DerivIn, typename StateOut, typename DerivOut> void do_step_impl(System, const StateIn &, const DerivIn &, time_type, StateOut &, DerivOut &, time_type); template<typename System, typename StateIn, typename DerivIn, typename StateOut, typename DerivOut, typename Err> void do_step_impl(System, const StateIn &, const DerivIn &, time_type, StateOut &, DerivOut &, time_type, Err &); template<typename StateOut, typename StateIn1, typename DerivIn1, typename StateIn2, typename DerivIn2> void calc_state(time_type, StateOut &, const StateIn1 &, const DerivIn1 &, time_type, const StateIn2 &, const DerivIn2 &, time_type) const; template<typename StateIn> void adjust_size(const StateIn &); // private member functions template<typename StateIn> bool resize_k_x_tmp_impl(const StateIn &); template<typename StateIn> bool resize_dxdt_tmp_impl(const StateIn &); };
Метод Runge-Kutta Dormand-Prince 5 является очень популярным методом для решения ODE, см.. Метод является явным и соответствует концепции Error Stepper. Предусмотрен контроль размера шага, но доступен непрерывный выход, что делает этот метод благоприятным для многих применений.
Этот класс происходит от explicit_error_stepper_fsal_base и наследует свой интерфейс через CRTP (текущий повторяющийся шаблон шаблона). Метод обладает свойством FSAL (первое то же, что и последнее). См. явное_error_stepper_fsal_base для более подробной информации.
Тип1.
[!-- [ORIG_BEGIN]typenameState
Тип состояния.
[ORIG_END] -->[ORIG_END] -->Тип.
[ORIG_END] -->Тип, добавляем к производному.
[ORIG_END] -->Временная независимая проверка.
typenameTime=ValueВремя, представляющее независимую переменную — время.
[ORIG_END] -->[ORIG_END] -->Тип хадисов.
[ORIG_END] -->Тип .
[ORIG_END] -->Тип - ретрансляции.
[ORIG_END] -->runge_kutta_dopri5
public
construct/copy/destructПараметры |
runge_kutta_dopri5 класс. Этот конструктор можно использовать в качестве конструктора по умолчанию, если в алгебре есть конструктор по умолчанию.Параметры: Копия алгебры сделана и хранится внутри эксплицитной_степной_базы |
runge_kutta_dopri5
public member functionsПараметры: |
template<typenameSystem,typenameStateIn,typenameDerivIn, typenameStateOut,typenameDerivOut,typenameErr> voiddo_step_impl(Systemsystem,constStateIn&in, constDerivIn&dxdt_in,time_typet,StateOut&out, DerivOut&dxdt_out,time_typedt,Err&xerr); |
template<typenameSystem,typenameStateIn,typenameDerivIn, typenameStateOut,typenameDerivOut,typenameErr> voiddo_step_impl(Systemsystem,constStateIn&in, constDerivIn&dxdt_in,time_typet,StateOut&out, DerivOut&dxdt_out,time_typedt,Err&xerr);Этот метод выполняет один шаг. Производное
dxdt_in
изin
в моментt
переходит к способу. Результат обновляется неуместно, следовательно, вход вin
и выход вout
. Кроме того, производная обновления неуместна, поэтому предполагается, что вход находится вdxdt_in
и выход вdxdt_out
. Доступ к этой функциональности шага обеспечивается по явному_error_stepper_fsal_base иdo_step_impl
не должен называться напрямую. Вычисляется оценка ошибки.Параметры: |
|
template<typenameStateOut,typenameStateIn1,typenameDerivIn1, typenameStateIn2,typenameDerivIn2> voidcalc_state(time_typet,StateOut&x,constStateIn1&x_old, constDerivIn1&deriv_old,time_typet_old, constStateIn2&,constDerivIn2&deriv_new, time_typet_new)const;>Этот метод используется для непрерывного вывода и вычисляет состояние<
x
>в момент времени<t
>из знания двух состояний<old_state
>и<current_state
>в точках времени<t_old
>и<t_new
>. Он также использует внутренние переменные для расчета результата. Следовательно, этот метод должен быть назван после двух успешных<do_step
>звонков.Параметры:
template<typenameStateIn>voidadjust_size(constStateIn&x);
template<typenameStateIn>voidadjust_size(constStateIn&x);
typenameValue=doubleОтрегулируйте размер всех времен в шагу вручную.
Параметры: |
|
Статья Class template runge_kutta_dopri5 раздела Chapter 1. Boost.Numeric.Odeint Header <boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp> может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Header <boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp> ::
реклама |