![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Class template bulirsch_stoerBoost , Chapter 1. Boost.Numeric.Odeint , Header <boost/numeric/odeint/stepper/bulirsch_stoer.hpp>
|
![]() | Home | Libraries | People | FAQ | More |
boost::numeric::odeint::bulirsch_stoer — The Bulirsch-Stoer algorithm.
// In header: <boost/numeric/odeint/stepper/bulirsch_stoer.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 bulirsch_stoer { public: // types typedef State state_type; typedef Value value_type; typedef Deriv deriv_type; typedef Time time_type; typedef Algebra algebra_type; typedef Operations operations_type; typedef Resizer resizer_type; // construct/copy/destruct bulirsch_stoer(value_type = 1E-6, value_type = 1E-6, value_type = 1.0, value_type = 1.0, time_type = static_cast< time_type >(0)); // public member functions template<typename System, typename StateInOut> controlled_step_result try_step(System, StateInOut &, time_type &, time_type &); template<typename System, typename StateInOut> controlled_step_result try_step(System, const StateInOut &, time_type &, time_type &); template<typename System, typename StateInOut, typename DerivIn> controlled_step_result try_step(System, StateInOut &, const DerivIn &, time_type &, time_type &); template<typename System, typename StateIn, typename StateOut> boost::disable_if< boost::is_same< StateIn, time_type >, controlled_step_result >::type try_step(System, const StateIn &, time_type &, StateOut &, time_type &); template<typename System, typename StateIn, typename DerivIn, typename StateOut> controlled_step_result try_step(System, const StateIn &, const DerivIn &, time_type &, StateOut &, time_type &); void reset(); template<typename StateIn> void adjust_size(const StateIn &); // private member functions template<typename StateIn> bool resize_m_dxdt(const StateIn &); template<typename StateIn> bool resize_m_xnew(const StateIn &); template<typename StateIn> bool resize_impl(const StateIn &); template<typename System, typename StateInOut> controlled_step_result try_step_v1(System, StateInOut &, time_type &, time_type &); template<typename StateInOut> void extrapolate(size_t, state_table_type &, const value_matrix &, StateInOut &); time_type calc_h_opt(time_type, value_type, size_t) const; controlled_step_result set_k_opt(size_t, const inv_time_vector &, const time_vector &, time_type &); bool in_convergence_window(size_t) const; bool should_reject(value_type, size_t) const; // public data members static const size_t m_k_max; };
Bulirsch-Stoer - это контролируемый шаг, который регулирует как размер шага, так и порядок метода. Алгоритм использует модифицированную среднюю точку и полиномиальную экстраполяцию вычисляет решение.
typenameState
>Тип состояния.
typenameValue=double>
Тип значения.
typenameDeriv=State>
Тип, представляющий временную производную государства.
typenameTime=Value>
Время, представляющее независимую переменную — время.
typenameAlgebra=typenamealgebra_dispatcher<State>::algebra_type>
Тип алгебры.
typenameOperations=typenameoperations_dispatcher<State>::operations_type
Тип операции.
typenameResizer=initially_resizer>
Тип политики резистора.
bulirsch_stoer
public
construct/copy/destructbulirsch_stoer(value_typeeps_abs=1E-6,value_typeeps_rel=1E-6, value_typefactor_x=1.0,value_typefactor_dxdt=1.0, time_typemax_dt=static_cast<time_type>(0));Построение класса
bulirsch_stoer
, включая инициализацию границ ошибок.Параметры: |
|
Параметры: |
| ||||||||
Возврат: | успех, если шаг был принят, провалиться иначе. |
template<typenameSystem,typenameStateInOut> controlled_step_result try_step(Systemsystem,constStateInOut&x,time_type&t,time_type&dt);Вторая версия для решения задачи пересылки, может использоваться с Boost. Диапазон как StateInOut.
template<typenameSystem,typenameStateInOut,typenameDerivIn> controlled_step_result try_step(Systemsystem,StateInOut&x,constDerivIn&dxdt,time_type&t, time_type&dt);>Пытается сделать один шаг.
Этот метод пытается сделать один шаг с размером шага dt. Если оценка ошибки велика, шаг отклоняется, и метод возвращается неудачно, а размер шага dt уменьшается. Если оценка ошибки приемлемо мала, шаг выполняется, успех возвращается и может быть увеличен, чтобы сделать шаги как можно больше. Этот метод также обновляет t, если выполняется шаг. Также при необходимости корректируется внутренний порядок степпера.
Параметры: |
template<typenameSystem,typenameStateIn,typenameStateOut> boost::disable_if<boost::is_same<StateIn,time_type>,controlled_step_result>::type try_step(Systemsystem,constStateIn&in,time_type&t,StateOut&out, time_type&dt);>Пытается выполнить один шаг.
Этот метод пытается сделать один шаг с размером шага dt. Если оценка ошибки велика, шаг отклоняется, и метод возвращается неудачно, а размер шага dt уменьшается. Если оценка ошибки приемлемо мала, шаг выполняется, успех возвращается и может быть увеличен, чтобы сделать шаги как можно больше. Этот метод также обновляет t, если выполняется шаг. Также при необходимости корректируется внутренний порядок степпера.
template<typenameSystem,typenameStateIn,typenameDerivIn, typenameStateOut> controlled_step_result try_step(Systemsystem,constStateIn&in,constDerivIn&dxdt, time_type&t,StateOut&out,time_type&dt);>Пытается сделать один шаг. Этот метод пытается сделать один шаг с размером шага dt. Если оценка ошибки велика, шаг отклоняется, и метод возвращается неудачно, а размер шага dt уменьшается. Если оценка ошибки приемлемо мала, шаг выполняется, успех возвращается и может быть увеличен, чтобы сделать шаги как можно больше. Этот метод также обновляет t, если выполняется шаг. Также при необходимости корректируется внутренний порядок степпера.
voidreset();>Сбрасывает внутреннее состояние степпера. template<typenameStateIn>voidadjust_size(constStateIn&x);>Установите размер всех временных интервалов в степпере вручную.
|
Статья Class template bulirsch_stoer раздела Chapter 1. Boost.Numeric.Odeint Header <boost/numeric/odeint/stepper/bulirsch_stoer.hpp> может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Header <boost/numeric/odeint/stepper/bulirsch_stoer.hpp> ::
реклама |