![]() |
![]() ![]() ![]() ![]() |
![]() |
State Algebra OperationsBoost , Chapter 1. Boost.Numeric.Odeint , Concepts
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
Home | Libraries | People | FAQ | More |
![]() |
Note |
|---|---|
Нижеследующее не относится к неявным степперам, таким как implicit_euler или Rosenbrock 4, поскольку там |
Государство, Алгебра и Операции вместе определяют концепцию, описывающую, как выполняются математические векторные операции, необходимые для алгоритмов степпера. Типичная векторная операция, выполняемая в степперах
y = Σ αi xi.
Государство представляет собой переменную состояния ODE, обычно обозначаемую x. Алгоритмически состояние часто реализуется как вектор< double > или array< double , N >, однако, родовое свойство odeint позволяет в основном использовать что угодно в качестве типа состояния. Алгоритмический аналог таких математических выражений делится на две части. Во-первых, алгебра используется для учета векторного характера уравнения. В случае вектора в качестве типа состояния это означает, что Алгебра отвечает за итерацию по всем векторным элементам. Во-вторых, операции используются для представления фактической операции, применяемой к каждому из векторных элементов. Таким образом, Алгебра повторяется по всем элементам Государство и вызывает операцию, взятую из Операции для каждого элемента. Вот где Государство, Алгебра и Операции должны работать вместе, чтобы запустить одеинт. Пожалуйста, посмотрите на range_algebra и default_operations, чтобы увидеть пример того, как это реализовано.
Ниже мы описываем, как Государство, Алгебра и Операции используются вместе в рамках степперных реализаций.
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,
...Объекты Государство
|
Имя |
Выражение |
Тип |
Семантика |
|---|---|---|---|
Получить масштаб операции |
|
|
Получить |
|
|
|
Построение объекта |
|
|
|
Расчеты |
Получить общую операцию |
|
|
Получить |
|
|
|
Построение объекта |
|
|
|
Расчеты |
Получить масштабную своп-операцию |
|
|
Получить масштабный своп от операций |
|
|
|
Конструктор |
|
|
|
Вычисляет |
StateТип государства
AlgebraТип алгебры
OperationNN-тип операции N должен быть числом от 1 до 14.
algebraОбъект типа Алгебра
operationNОбъект типа ОперацияN
y,
x1,
x2,
...Объекты типа Государство
|
Имя |
Выражение |
Тип |
Семантика |
|---|---|---|---|
Векторная операция с аритмией 2 |
|
пустота |
Звонки |
Векторная операция с аритмией 3 |
|
пустота |
Звонки |
Векторная операция с подвижностью |
|
пустота |
Звонки |
В стандартной конфигурации odeint использует range_algebra и default_operations, которых достаточно для большинства ситуаций. Однако существует еще несколько возможностей для повышения производительности или обеспечения совместимости с другими библиотеками. Ниже мы перечислим существующие конфигурации Алгебра/Операции, которые можно использовать в степперах.
|
|
|
|
Замечания |
|---|---|---|---|
Все, что поддерживает Boost.Range, например |
|
|
Стандартная реализация, применимая для большинства типичных ситуаций. |
|
|
|
Специальная реализация для повышения::массив с лучшей производительностью, чем |
Все, что определяет операторы + внутри себя и * со скалярным (с математической точки зрения, все, что является векторным пространством). |
|
|
Для использования Controlled Stepper необходимо создать шаблон |
|
|
|
Для работы odeint на устройствах CUDA с помощью Thrust |
Рандомный доступ |
|
|
Алгебра параллельного диапазона OpenMP |
|
|
|
OpenMP-параллельная алгебра для разделенных данных |
|
|
|
Использование библиотеки Intel Math Kernel Library в odeint для максимальной производительности. В настоящее время поддерживается только степпер RK4. |
|
Имя |
Выражение |
Тип |
Семантика |
|---|---|---|---|
Эксплуатация вектора |
|
пустота |
Расчеты y = a1 x1 + a2 x2<17 |
Статья State Algebra Operations раздела Chapter 1. Boost.Numeric.Odeint Concepts может быть полезна для разработчиков на c++ и boost.
реклама |