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

Using boost::range

Boost , Chapter 1. Boost.Numeric.Odeint , odeint in detail

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

Большинство степперов в одейте также принимают состояние дай в качестве диапазона. Диапазон - это последовательность значений, смоделированных концепцией диапазона. См. Boost.Range для обзора существующих концепций и примеров диапазонов. Это означает, что метод state_type степпера не обязательно должен использоваться для вызова метода do_step.

Один пример использования Boost.Range в odeint показан в Chaotic System, где состояние состоит из двух частей: одна для исходной системы и одна для возмущений. Диапазоны используются для инициализации (решения) только системной части, где не затрагивается часть возмущения, то есть используется диапазон, состоящий только из системной части. После этого решается полное состояние, включая возмущения.

Другим вариантом использования является система, состоящая из связанных блоков, где вы хотите инициализировать каждый блок отдельно с ODE несвязанного блока. Примером может служить цепь связанных ван-дер-поль-осцилляторов, которые инициализируются равномерно из несвязанного ван-дер-поль-осциллятора. Затем можно использовать Boost.Range для решения только одного отдельного осциллятора в цепи.

Короче говоря, вы можете Boost.Range использовать одно состояние в двух системных функциях, которые ожидают состояний с разными размерами.

Пример был приведен в учебнике Хаотическая система. Используя Boost. Диапазон обычно означает, что ваша системная функция должна адаптироваться к итераторам Boost. Диапазон. То есть ваша функция называется диапазоном, и вам нужно получить итераторы из этого диапазона. Это легко сделать. Вы должны реализовать свою систему в виде класса или структуры, и вы должны шаблонизировать оператор(). Затем вы можете использовать range_iterator-мета-функцию и boost::begin и boost::end для получения итераторов вашего диапазона:

class sys
{
    template< class State , class Deriv >
    void operator()( const State &x_ , Deriv &dxdt_ , double t ) const
    {
         typename boost::range_iterator< const State >::type x = boost::begin( x_ );
         typename boost::range_iterator< Deriv >::type dxdt = boost::begin( dxdt_ );
         // fill dxdt
    }
};

Если ваш диапазон является случайным диапазоном доступа, вы также можете применить оператор скобки к итератору для доступа к элементам в диапазоне:

class sys
{
    template< class State , class Deriv >
    void operator()( const State &x_ , Deriv &dxdt_ , double t ) const
    {
         typename boost::range_iterator< const State >::type x = boost::begin( x_ );
         typename boost::range_iterator< Deriv >::type dxdt = boost::begin( dxdt_ );
         dxdt[0] = f1( x[0] , x[1] );
         dxdt[1] = f2( x[0] , x[1] );
    }
};

Следующие две таблицы показывают, какие степперы и какие алгебры совместимы с Boost.Range.

Table 1.9. Steppers supporting Boost.Range

Шагай

adams_bashforth_moulton

bulirsch_stoer

dense_output_runge_kutta

explicit_error_generor_rk

rosenbrock4_контроллер

rosenbrock4_dense_output

runge_kutta4

runge_kutta_cash_karp54

runge_kutta_dopri5

runge_kutta_fehlberg78


Table 1.10. Algebras supporting Boost.Range

алгебра



PrevUpHomeNext

Статья Using boost::range раздела Chapter 1. Boost.Numeric.Odeint odeint in detail может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: odeint in detail ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:28:22/0.0088229179382324/1