![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Class template bulirsch_stoer_dense_outBoost , Chapter 1. Boost.Numeric.Odeint , Header <boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp>
|
![]() | Home | Libraries | People | FAQ | More |
boost::numeric::odeint::bulirsch_stoer_dense_out — The Bulirsch-Stoer algorithm.
// In header: <boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.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_dense_out { 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; typedef dense_output_stepper_tag stepper_category; // construct/copy/destruct bulirsch_stoer_dense_out(value_type = 1E-6, value_type = 1E-6, value_type = 1.0, value_type = 1.0, time_type = static_cast< time_type >(0), bool = false); // public member functions template<typename System, typename StateIn, typename DerivIn, typename StateOut, typename DerivOut> controlled_step_result try_step(System, const StateIn &, const DerivIn &, time_type &, StateOut &, DerivOut &, time_type &); template<typename StateType> void initialize(const StateType &, const time_type &, const time_type &); template<typename System> std::pair< time_type, time_type > do_step(System); template<typename StateOut> void calc_state(time_type, StateOut &) const; const state_type & current_state(void) const; time_type current_time(void) const; const state_type & previous_state(void) const; time_type previous_time(void) const; time_type current_time_step(void) const; void reset(); template<typename StateIn> void adjust_size(const StateIn &); // private member functions template<typename StateInOut, typename StateVector> void extrapolate(size_t, StateVector &, const value_matrix &, StateInOut &, size_t = 0); template<typename StateVector> void extrapolate_dense_out(size_t, StateVector &, const value_matrix &, size_t = 0); time_type calc_h_opt(time_type, value_type, size_t) const; bool in_convergence_window(size_t) const; bool should_reject(value_type, size_t) const; template<typename StateIn1, typename DerivIn1, typename StateIn2, typename DerivIn2> value_type prepare_dense_output(int, const StateIn1 &, const DerivIn1 &, const StateIn2 &, const DerivIn2 &, time_type); template<typename DerivIn> void calculate_finite_difference(size_t, size_t, value_type, const DerivIn &); template<typename StateOut> void do_interpolation(time_type, StateOut &) const; template<typename StateIn> bool resize_impl(const StateIn &); state_type & get_current_state(void); const state_type & get_current_state(void) const; state_type & get_old_state(void); const state_type & get_old_state(void) const; deriv_type & get_current_deriv(void); const deriv_type & get_current_deriv(void) const; deriv_type & get_old_deriv(void); const deriv_type & get_old_deriv(void) const; void toggle_current_state(void); // public data members static const size_t m_k_max; };
Bulirsch-Stoer - это контролируемый шаг, который регулирует как размер шага, так и порядок метода. Алгоритм использует модифицированную среднюю точку и полиномиальную экстраполяцию вычисляет решение. Этот класс также обеспечивает плотный выходной объект.
Тип1.
[!-- [ORIG_BEGIN]typenameState
Тип состояния.
[ORIG_END] -->[ORIG_END] -->Тип.
[ORIG_END] -->Тип, добавляем к производному.
[ORIG_END] -->Временная независимая проверка.
typenameTime=ValueВремя, представляющее независимую переменную — время.
[ORIG_END] -->[ORIG_END] -->Тип хадисов.
[ORIG_END] -->typenameOperations=typenameoperations_dispatcher<State>::operations_type
Тип операции.
Ретрансляции.
[ORIG_END] -->bulirsch_stoer_dense_out
public
construct/copy/destructbulirsch_stoer_dense_out(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), boolcontrol_interpolation=false);Построение класса
bulirsch_stoer
, включая инициализацию границ ошибки.Параметры: |
|
bulirsch_stoer_dense_out
public member functionstemplate<typenameSystem,typenameStateIn,typenameDerivIn, typenameStateOut,typenameDerivOut> controlled_step_result try_step(Systemsystem,constStateIn&in,constDerivIn&dxdt, time_type&t,StateOut&out,DerivOut&dxdt_new, time_type&dt);Пытается сделать один шаг.
Этот метод пытается сделать один шаг с размером шага dt. Если оценка ошибки велика, шаг отклоняется, и метод возвращается неудачно, а размер шага dt уменьшается. Если оценка ошибки приемлемо мала, шаг выполняется, успех возвращается и может быть увеличен, чтобы сделать шаги как можно больше. Этот метод также обновляет t, если выполняется шаг. Также, если требуется, внутренний порядок степпера корректируется.
Параметры: | dt Размер шага. Обновлено.
Производная состояния.
Состояние ОДЭ, которое должно быть решено.
Используется для хранения результата шага. system Функция системы для решения, следовательно, r.h.s. ODE. Он должен соответствовать концепции простой системы.
Ценность времени. Обновлено, если шаг будет успешным. |
Возврат:
успех, если шаг был принят, провалиться иначе.
template<typenameStateType> voidinitialize(constStateType&x0,consttime_type&t0, consttime_type&dt0);Инициирует плотный выходной степпер.
Параметры: |
|
template<typenameSystem> std::pair<time_type,time_type>do_step(Systemsystem);Делает один раз шаг. Это основной метод, который следует использовать для интеграции ODE с этим степпером.
![]() | Примечание |
---|---|
инициализация должна быть вызвана перед использованием этого способа для установки начальных условий x, t и шага. |
Параметры: |
| ||
Возврат: | Пару со временем начала и окончания этапа интеграции. |
template<typenameStateOut>voidcalc_state(time_typet,StateOut&x)const;Вычисляет раствор в промежуточной точке на последней стадии.
Параметры: |
|
Текущее состояние x(t). |
[] [ |
х [т-дт]. |
time_typeprevious_time(void)const;Возвращает последний раз раствор.
Возвращение: | Последний раз решение t-dt. |
time_typecurrent_time_step(void)const;Возвращает текущий размер шага.
Возвращается: | Текущий размер шага. |
voidreset();>Сбрасывает внутреннее состояние степпера.
template<typenameStateIn>voidadjust_size(constStateIn&x);Установите размер всех временных интервалов в степпере вручную.
Параметры: |
|
bulirsch_stoer_dense_out
private member functionstemplate<typenameStateInOut,typenameStateVector> voidextrapolate(size_tk,StateVector&table,constvalue_matrix&coeff, StateInOut&xest,size_torder_start_index=0);>
template<typenameStateVector> voidextrapolate_dense_out(size_tk,StateVector&table, constvalue_matrix&coeff, size_torder_start_index=0);>
time_typecalc_h_opt(time_typeh,value_typeerror,size_tk)const;>
boolin_convergence_window(size_tk)const;>
boolshould_reject(value_typeerror,size_tk)const;>
template<typenameStateIn1,typenameDerivIn1,typenameStateIn2, typenameDerivIn2> value_typeprepare_dense_output(intk,constStateIn1&x_start, constDerivIn1&dxdt_start, constStateIn2&,constDerivIn2&, time_typedt);>
template<typenameDerivIn> voidcalculate_finite_difference(size_tj,size_tkappa,value_typefac, constDerivIn&dxdt);>
template<typenameStateOut> voiddo_interpolation(time_typet,StateOut&out)const;>
template<typenameStateIn>boolresize_impl(constStateIn&x);>
state_type&get_current_state(void);>
conststate_type&get_current_state(void)const;>
state_type&get_old_state(void);>
conststate_type&get_old_state(void)const;>
deriv_type&get_current_deriv(void);>
constderiv_type&get_current_deriv(void)const;>
deriv_type&get_old_deriv(void);>
constderiv_type&get_old_deriv(void)const;>
voidtoggle_current_state(void);>
Статья Class template bulirsch_stoer_dense_out раздела Chapter 1. Boost.Numeric.Odeint Header <boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp> может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Header <boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp> ::
реклама |