Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Class template bulirsch_stoer_dense_out

Boost , Chapter 1. Boost.Numeric.Odeint , Header <boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp>

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Boost C++ LibrariesHomeLibrariesPeopleFAQMore

PrevUpHomeNext

Class template bulirsch_stoer_dense_out

boost::numeric::odeint::bulirsch_stoer_dense_out — The Bulirsch-Stoer algorithm.

Synopsis

// 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;
};

Description

Bulirsch-Stoer - это контролируемый шаг, который регулирует как размер шага, так и порядок метода. Алгоритм использует модифицированную среднюю точку и полиномиальную экстраполяцию вычисляет решение. Этот класс также обеспечивает плотный выходной объект.

Template Parameters

  1. Тип1.

    [!-- [ORIG_BEGIN]
    typenameState

    Тип состояния.

    [ORIG_END] -->[ORIG_END] -->
  2. Тип.

    [ORIG_END] -->
  3. Тип, добавляем к производному.

    [ORIG_END] -->
  4. Временная независимая проверка.

    typenameTime=Value

    Время, представляющее независимую переменную — время.

    [ORIG_END] -->[ORIG_END] -->
  5. Тип хадисов.

    [ORIG_END] -->
  6. typenameOperations=typenameoperations_dispatcher<State>::operations_type

    Тип операции.

  7. Ретрансляции.

    [ORIG_END] -->

bulirsch_stoer_dense_out public construct/copy/destruct

  1. bulirsch_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, включая инициализацию границ ошибки.

    Параметры:

    control_interpolation

    factor_x

    Установите верность для дополнительного контроля ошибки интерполяции.

    eps_abs

    Абсолютный уровень толерантности.

    eps_rel

    Относительная толерантность.

    factor_dxdt

    Фактор веса производной.

    factor_x

    Фактор веса государства.

bulirsch_stoer_dense_out public member functions

  1. template<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

    Размер шага. Обновлено.

    dxdt

    Производная состояния.

    in

    Состояние ОДЭ, которое должно быть решено.

    out

    Используется для хранения результата шага.

    system

    Функция системы для решения, следовательно, r.h.s. ODE. Он должен соответствовать концепции простой системы.

    t

    Ценность времени. Обновлено, если шаг будет успешным.

Возврат:

успех, если шаг был принят, провалиться иначе.

  • template<typenameStateType>
     voidinitialize(constStateType&x0,consttime_type&t0,
                     consttime_type&dt0);
    Инициирует плотный выходной степпер.

    Параметры:

    dt0

    Начальный этап времени.

    t0

    Первоначальное время.

    x0

    Начальное состояние.

  • template<typenameSystem>
     std::pair<time_type,time_type>do_step(Systemsystem);
    Делает один раз шаг. Это основной метод, который следует использовать для интеграции ODE с этим степпером.
    [Note]Примечание

    инициализация должна быть вызвана перед использованием этого способа для установки начальных условий x, t и шага.

    Параметры:

    system

    Функция системы решает, следовательно, r.h.s. обычного дифференциального уравнения. Он должен соответствовать концепции простой системы.

    Возврат:

    Пару со временем начала и окончания этапа интеграции.

  • template<typenameStateOut>voidcalc_state(time_typet,StateOut&x)const;
    Вычисляет раствор в промежуточной точке на последней стадии.

    Параметры:

    t

    Время, в которое должно быть рассчитано решение, должно быть в текущем временном интервале.

    x

    Выходная переменная, в которой записан результат.

  • Текущее состояние x(t).

    [ORIG_END] -->
  • [] [

    [ORIG_END] -->
  • х [т-дт].

    [ORIG_END] -->
  • time_typeprevious_time(void)const;
    Возвращает последний раз раствор.

    Возвращение:

    Последний раз решение t-dt.

  • time_typecurrent_time_step(void)const;
    Возвращает текущий размер шага.

    Возвращается:

    Текущий размер шага.

  • <
    voidreset();
    >Сбрасывает внутреннее состояние степпера.
  • template<typenameStateIn>voidadjust_size(constStateIn&x);
    Установите размер всех временных интервалов в степпере вручную.

    Параметры:

    x

    Выводится состояние, из которого выводится размер временной величины.

  • bulirsch_stoer_dense_out private member functions

    1. <
      template<typenameStateInOut,typenameStateVector>
       voidextrapolate(size_tk,StateVector&table,constvalue_matrix&coeff,
                        StateInOut&xest,size_torder_start_index=0);
      >
    2. <
      template<typenameStateVector>
       voidextrapolate_dense_out(size_tk,StateVector&table,
                                  constvalue_matrix&coeff,
                                  size_torder_start_index=0);
      >
    3. <
      time_typecalc_h_opt(time_typeh,value_typeerror,size_tk)const;
      >
    4. <
      boolin_convergence_window(size_tk)const;
      >
    5. <
      boolshould_reject(value_typeerror,size_tk)const;
      >
    6. <
      template<typenameStateIn1,typenameDerivIn1,typenameStateIn2,
              typenameDerivIn2>
       value_typeprepare_dense_output(intk,constStateIn1&x_start,
                                       constDerivIn1&dxdt_start,
                                       constStateIn2&,constDerivIn2&,
                                       time_typedt);
      >
    7. <
      template<typenameDerivIn>
       voidcalculate_finite_difference(size_tj,size_tkappa,value_typefac,
                                        constDerivIn&dxdt);
      >
    8. <
      template<typenameStateOut>
       voiddo_interpolation(time_typet,StateOut&out)const;
      >
    9. <
      template<typenameStateIn>boolresize_impl(constStateIn&x);
      >
    10. <
      state_type&get_current_state(void);
      >
    11. <
      conststate_type&get_current_state(void)const;
      >
    12. <
      state_type&get_old_state(void);
      >
    13. <
      conststate_type&get_old_state(void)const;
      >
    14. <
      deriv_type&get_current_deriv(void);
      >
    15. <
      constderiv_type&get_current_deriv(void)const;
      >
    16. <
      deriv_type&get_old_deriv(void);
      >
    17. <
      constderiv_type&get_old_deriv(void)const;
      >
    18. <
      voidtoggle_current_state(void);
      >

    PrevUpHomeNext

    Статья 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> ::


    реклама


    ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
    Top.Mail.Ru

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-20 09:01:38/0.0089139938354492/0