![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
OverviewBoost , Chapter 1. Boost.Numeric.Odeint , Getting started
|
![]() |
Home | Libraries | People | FAQ | More |
одеинт — библиотека для решения задач начальных значений (IVP) обычных дифференциальных уравнений. Математически эти задачи сформулированы следующим образом:
x'(t) = f(x,t),x(0) = x0.
xиfмогут быть векторами, и решение представляет собой некоторую функциюx(t), выполняя оба уравнения выше. В следующем мы будем ссылаться наx'(t)также<dxdt
>, который также является нашей нотацией для производной в исходном коде.
Обычные дифференциальные уравнения встречаются почти везде в естественных науках. Например, вся ньютоновская механика описывается дифференциальными уравнениями второго порядка. Будьте уверены, вы найдете их в каждой дисциплине. Они также возникают при дискретизации дифференциальных уравнений (PDE). Затем происходит система сопряженных обыкновенных дифференциалов, иногда также называемых решетками ODE.
Численные приближения для решенияx(t)вычисляются итеративно. Самым простым алгоритмом является схема Эйлера, где, начиная сx(0), можно найтиx(dt) = x(0) + dt f(x(0),0). Теперь можно использоватьx(dt)и получитьx(2dt)аналогичным образом и так далее. Метод Эйлера имеет порядок 1, что означает, что ошибка на каждом шаге составляет~ dt2. Это, конечно, не очень удовлетворяет, поэтому метод Эйлера редко используется для реальных жизненных проблем и служит таким же наглядным примером.
Основное внимание odeint уделяется предоставлению численных методов, реализованных таким образом, что алгоритм полностью независим от структуры данных, используемой для представления состоянияx. При этом одеинт применим для широкого спектра ситуаций и может использоваться со многими другими библиотеками. Помимо обычного случая, когда состояние определяется как<std::vector
>или<boost::array
>, мы предоставляем нативную поддержку следующих библиотек:
В odeint реализованы следующие алгоритмы:
Table 1.1. Stepper Algorithms
Алгоритм |
Класс |
Концепция |
Концепция системы |
Приказ |
Оценка ошибок |
Плотный выход |
Внутреннее состояние |
Замечания |
---|---|---|---|---|---|---|---|---|
Явный Эйлер |
< |
1 |
Нет |
Да |
Нет |
Очень просто, только для демонстрации цели |
||
Модифицированная середина |
< |
конфигурируемый (2) |
Нет |
Нет |
Нет |
Используется в реализации Bulirsch-Stoer |
||
Рунге-Кутта 4 |
< |
4 |
Нет |
Нет |
Нет |
Классическая схема Рунге-Кутта, хорошая общая схема без контроля ошибок |
||
Кэш-Карп |
< |
5 |
Да (4) |
Нет |
Нет |
Хорошая общая схема с оценкой ошибок, используемая в control_error_stepper |
||
Спящий принц 5 |
< |
5 |
Да (4) |
Да |
Да |
Стандартный метод с контролем ошибок и плотным выходом, используемый в control_error_stepper и в dense_output_control_explicit_fsal. |
||
Фельберг 78 |
< |
8 |
Да (7) |
Нет |
Нет |
Хороший метод высокого порядка с оценкой ошибок, используемый в control_error_stepper. |
||
Адамс Башфорт |
< |
настраиваемый |
Нет |
Нет |
Да |
Многоступенчатый метод |
||
Адамс Башфорт Мултон |
< |
настраиваемый |
Нет |
Нет |
Да |
Комбинированный многоступенчатый метод |
||
Контролируемый Рунге-Кутта |
< |
зависит |
Да |
Нет |
зависит |
Контроль ошибокОшибка СтепперДля этого требуетсястеппер ошибкисверху. Заказ зависит от заданной ошибки . |
||
Dense Output Runge-Kutta |
< |
зависит |
Нет |
Да |
Да |
Плотный выход дляStepperиError Stepperсверху, если они обеспечивают плотную функциональность вывода (например,< |
||
Булирш-Стор |
< |
переменная |
Да |
Нет |
Нет |
Шаг за шагом и контроль за порядком. Очень хорошо, если требуется высокая точность. |
||
Bulirsch-Stoer Dense Output |
< |
переменная |
Да |
Да |
Нет |
Шаг за шагом с размером шага и контролем порядка, а также плотным выходом. Очень хорошо, если требуется высокая точность и плотный выход. |
||
Имплицитный Эйлер |
< |
1 |
Нет |
Нет |
Нет |
Основная неявная рутина. Требуется якобиец. Работает только с векторамиBoost.uBLASв качестве типов состояний. |
||
Розенброк 4 |
< |
4 |
Да |
Да |
Нет |
Подходит для жестких систем. Работает только с векторамиBoost.uBLASв качестве типов состояний. |
||
Контролировал Розенброк 4 |
< |
4 |
Да |
Да |
Нет |
Розенброк 4 с контролем ошибок. Работает только с векторамиBoost.uBLASв качестве типов состояний. |
||
Dense Output Розенброк 4 |
< |
4 |
Да |
Да |
Нет |
Контролировал Розенброк 4 с плотным выходом. Работает только с векторамиBoost.uBLASв качестве типов состояний. |
||
Symplectic Euler |
< |
1 |
Нет |
Нет |
Нет |
Базовый симплектический растворитель для разделимой гамильтоновой системы |
||
Symplectic RKN McLachlan |
< |
4 |
Нет |
Нет |
Нет |
Симплексический растворитель для сепарабельной гамильтоновой системы с 6 ступенями и порядком 4. |
||
Symplectic RKN McLachlan |
< |
4 |
Нет |
Нет |
Нет |
Симплектный растворитель с 5 этапами и порядком 4, может использоваться с произвольными типами точности. |
||
Верлет скорости |
< |
1 |
Нет |
Нет |
Да |
Метод верлет скорости, подходящий для моделирования молекулярной динамики. |
Статья Overview раздела Chapter 1. Boost.Numeric.Odeint Getting started может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Getting started ::
реклама |