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

State Algebra Operations

Boost , Chapter 1. Boost.Numeric.Odeint , Concepts

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++ Libraries Home Libraries People FAQ More

PrevUpHomeNext
[Note] Note

Нижеследующее не относится к неявным степперам, таким как implicit_euler или Rosenbrock 4, поскольку там state_type не может быть изменено с ublas::vector и алгебра/операции не используются.

Description

Государство, Алгебра и Операции вместе определяют концепцию, описывающую, как выполняются математические векторные операции, необходимые для алгоритмов степпера. Типичная векторная операция, выполняемая в степперах

y = Σ αi xi.

Государство представляет собой переменную состояния ODE, обычно обозначаемую x. Алгоритмически состояние часто реализуется как вектор< double > или array< double , N >, однако, родовое свойство odeint позволяет в основном использовать что угодно в качестве типа состояния. Алгоритмический аналог таких математических выражений делится на две части. Во-первых, алгебра используется для учета векторного характера уравнения. В случае вектора в качестве типа состояния это означает, что Алгебра отвечает за итерацию по всем векторным элементам. Во-вторых, операции используются для представления фактической операции, применяемой к каждому из векторных элементов. Таким образом, Алгебра повторяется по всем элементам Государство и вызывает операцию, взятую из Операции для каждого элемента. Вот где Государство, Алгебра и Операции должны работать вместе, чтобы запустить одеинт. Пожалуйста, посмотрите на range_algebra и default_operations, чтобы увидеть пример того, как это реализовано.

Ниже мы описываем, как Государство, Алгебра и Операции используются вместе в рамках степперных реализаций.

Notation

Operations

Тип операций

Value1, ... , ValueN

Типы, представляющие значение или тип времени степпера

Scale

Тип масштабной операции

scale

Объект типа Масштаб

ScaleSumN

Тип, представляющий общую операцию масштабирования_суммы, N должен быть заменен числом от 1 до 14.

scale_sumN

Объект типа ScaleSumN, N должен быть заменен числом от 1 до 14.

ScaleSumSwap2

Тип операции масштабного свопа

scale_sum_swap2

Объект типа ScaleSumSwap2

a1, a2, ...

Объекты типа Value1, Value2, ...

y, x1, x2, ...

Объекты Государство

Valid Expressions

Имя

Выражение

Тип

Семантика

Получить масштаб операции

Операции::Масштаб< Ценность >

Масштаб

Получить Scale из Операции

Масштаб Конструктор

Scale< Value >( a >

Масштаб

Построение объекта Scale

Расширение

scale ( x )

void

Расчеты x *= a<8

Получить общую операцию scale_sum

Операции::scale_sumN< Value1, ..., ValueN>

ScaleSumN

Получить ScaleSumN тип от Операции, N следует заменить числом от 1 до 14.

scale_sum конструктор

ScaleSumN< Значение1, ..., ValueN >(a1, ..., aN)

ScaleSumN

Построение объекта scale_sum N значения параметров с N между 1 и 14.

scale_sum

scale_sumN(y , x1 , ..., xN )

void

Расчеты y a1x1 a2x2... +aNxN. Обратите внимание, что это вызов функции N+1-ary.

Получить масштабную своп-операцию

Операции::scale_sum_swap2< Value1 , Value2 >

ScaleSumSwap2

Получить масштабный своп от операций

ScaleSumSwap2 конструктор

ScaleSumSwap2< Value1 , Value2 >( a1 , a2 >

ScaleSumSwap2

Конструктор

ScaleSumSwap2

scale_sum_swap2( x1 , x2 , x3 >

void

Вычисляет tmp x1 a1 x2 a2 и x2 tmp.

Notation

State

Тип государства

Algebra

Тип алгебры

OperationN

N-тип операции N должен быть числом от 1 до 14.

algebra

Объект типа Алгебра

operationN

Объект типа ОперацияN

y, x1, x2, ...

Объекты типа Государство

Valid Expressions

Имя

Выражение

Тип

Семантика

Векторная операция с аритмией 2

алгебра.для_each2( y , x , операция2

пустота

Звонки Operation2( y_i , x_i ) для каждого элемента y_i x_i x.

Векторная операция с аритмией 3

алгебра.для_each3( y , x1 , x2 , операция3

пустота

Звонки Операция3( y_i, x1_i, x2_i ) для каждого элемента y_i x1_i и x2_ix2

Векторная операция с подвижностью N

algebra.for_eachN(y , x1, ..., xN, операцияN

пустота

Звонки Операция N( y_i , x1_i , ... , xN_i ) для каждого элемента y_i x1_i и так далее. N следует заменить числом от 1 до 14.

В стандартной конфигурации odeint использует range_algebra и default_operations, которых достаточно для большинства ситуаций. Однако существует еще несколько возможностей для повышения производительности или обеспечения совместимости с другими библиотеками. Ниже мы перечислим существующие конфигурации Алгебра/Операции, которые можно использовать в степперах.

Государство

Алгебра

Операции

Замечания

Все, что поддерживает Boost.Range, например std::vector, std::boost::array, ... на основе value_type, который поддерживает операторов +,* (обычно double

range_algebra

дефолт_операции

Стандартная реализация, применимая для большинства типичных ситуаций.

boost::array на основе value_type, который поддерживает операторы +,*

array_algebra

дефолт_операции

Специальная реализация для повышения::массив с лучшей производительностью, чем range_algebra

Все, что определяет операторы + внутри себя и * со скалярным (с математической точки зрения, все, что является векторным пространством).

vector_space_algebra

дефолт_операции

Для использования Controlled Stepper необходимо создать шаблон vector_space_reduce.

thrust::device_vector, thrust::host_vector

thrust_algebra

thrust_operations

Для работы odeint на устройствах CUDA с помощью Thrust

Рандомный доступ

openmp_range_algebra

дефолт_операции

Алгебра параллельного диапазона OpenMP

openmp_state

openmp_algebra

дефолт_операции

OpenMP-параллельная алгебра для разделенных данных

boost::array или что-либо, что выделяет элементы C-подобным образом

vector_space_algebra

mkl_operations

Использование библиотеки Intel Math Kernel Library в odeint для максимальной производительности. В настоящее время поддерживается только степпер RK4.

Имя

Выражение

Тип

Семантика

Эксплуатация вектора

алгебра.для_each3(y , x1 , x2 ,

::scale_sum2, >(a1 , a1 )

пустота

Расчеты y = a1 x1 + a2 x2<17


PrevUpHomeNext

Статья State Algebra Operations раздела Chapter 1. Boost.Numeric.Odeint Concepts может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Concepts ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 16:58:18/0.0063638687133789/0