Решатели динамических, гамильтоновских и обыкновенных дифференциальных уравнений второго порядка
Динамические обыкновенные дифференциальные уравнения (ODE), такие как происходящие от гамильтоновских или обыкновенных дифференциальных уравнений второго порядка, приводят к возникновению специальной структуры, с помощью которой можно выполнить специализацию в решателе для большей эффективности. Эти алгоритмы требуют, чтобы обыкновенные дифференциальные уравнения определялись следующими способами.
DynamicalODEProblem{isinplace}(f1, f2, v0, u0, tspan, p = NullParameters(); kwargs...)
SecondOrderODEProblem{isinplace}(f, du0, u0, tspan, p = NullParameters(); kwargs...)
HamiltonianProblem{T}(H, p0, q0, tspan, p = NullParameters(); kwargs...)
Они соответствуют разделенным уравнениям движения:
или для SecondOrderODEProblem
,
Функции должны указываться как f1(dv,v,u,p,t)
и f2(du,v,u,p,t)
(в замещающей форме), где f1
не зависит от v
(если не указано решателем), а f2
не зависит от t
и u
. Сюда относятся дискретизации, возникающие из SecondOrderODEProblem
, в которых скорость не используется в функции ускорения, и гамильтонианы, в которых потенциал является (или может быть) зависимым от времени, а кинетическая энергия зависит только от v
.
Обратите внимание, что некоторые методы предполагают, что интеграл f2
имеет квадратичную форму. Это означает, что f2=v'*M*v
, то есть , что дает du = v
. Это то же самое, что сказать, что кинетическая энергия связана с . Методы, которые требуют это предположение, потеряют в точности, если его нарушить. В перечисленных ниже методах это требование отмечается как «Требует кинетическую энергию в квадрате».
Рекомендации
Когда требуется сохранение энергии, используйте симплектический метод. В противном случае более эффективным будет метод Рунге — Кутты — Нюстрёма. Энергия по большей части сохраняется методами Рунге — Кутты — Нюстрёма, но не сохраняется для долговременных интеграций. Таким образом, для более коротких интеграций также рекомендуется использовать методы Рунге — Кутты — Нюстрёма.
В качестве эффективного метода безусловного перехода хорошим выбором является DPRKN6
. DPRKN12
— хороший выбор, когда необходима высокая точность, например tol<1e-10
. Однако DPRKN6
— это единственный метод Рунге — Кутты — Нюстрёма с интерполянтом более высокого порядка (все имеют эрмитовское значение по умолчанию третьего порядка, в то время как DPRKN6
— интерполянт 6-го порядка), и таким образом в случае, когда интерполяция имеет значение (например, при обработке событий), следует использовать DPRKN6
. Для очень простых задач с затратными вычислениями функции ускорения IRKN4
может быть хорошим выбором, он минимизирует количество вычислений.
Для симплектических методов, если требуется высокая точность, самыми эффективными являются алгоритмы более высокого порядка, а если требуется более низкая точность, лучше работают методы более низкого порядка. Методы с оптимизированной эффективностью требуют больше шагов, и поэтому выполняют больше принудительных вычислений для одного и того же порядка, но генерируют меньше ошибок. Таким образом, алгоритмы с «оптимизированной эффективностью» рекомендуются, если принудительные вычисления не слишком объемны, в то время как другие методы рекомендуются, когда принудительные вычисления выполняются в действительно большом масштабе (например, в симуляциях MD VelocityVerlet
действительно очень популярен, так как он требует только одно принудительное вычисление на временной шаг). Хорошим методом безусловного перехода является McAte5
, а хорошим выбором высокого порядка — KahanLi8
.
Стандартные интеграторы ODE
Стандартные интеграторы обыкновенных дифференциальных уравнений (ODE) будут работать с задачами динамических ODE путем автоматической трансформации в ODE первого порядка. Более подробную информацию см. на странице решателей ODE.
Интеграторы Рунге — Кутты — Нюстрёма
Если не указано иное, все алгоритмы OrdinaryDiffEq поставляются с эрмитовой полиномиальной интерполяцией третьего порядка. Алгоритмам, обозначенным как имеющие «свободную» интерполяцию, не требуются дополнительные шаги для интерполяции. Для функций более высокого порядка с несвободной интерполяцией дополнительные шаги выполняются «ленивым» способом (то есть не во время решения).
Runge-Kutta-Nyström Integrators
-
Nystrom4
: явный метод Рунге — Кутты — Нюстрёма четвертого порядка. Разрешает ускорению зависеть от скорости. Только фиксированный временной шаг. -
IRKN3
: явный двухшаговый метод Рунге — Кутты — Нюстрёма четвертого порядка. Только фиксированный временной шаг. -
IRKN4
: явный двухшаговый метод Рунге — Кутты — Нюстрёма четвертого порядка. Может быть эффективным для простых задач. Только фиксированный временной шаг. -
ERKN4
: метод Рунге — Кутты — Нюстрёма четвертого порядка, который точно интегрирует периодические свойства гармонического осциллятора. Получает дополнительную эффективность на периодических задачах. -
ERKN5
: Метод Рунге — Кутты — Нюстрёма пятого порядка, который точно интегрирует периодические свойства гармонического осциллятора. Получает дополнительную эффективность на периодических задачах. -
ERKN7
: метод Рунге — Кутты — Нюстрёма 7-го порядка, который точно интегрирует периодические свойства гармонического осциллятора. Получает дополнительную эффективность на периодических задачах. -
Nystrom4VelocityIndependent
: явный метод Рунге — Кутты — Нюстрёма четвертого порядка. Только фиксированный временной шаг. -
Nystrom5VelocityIndependent
: явный метод Рунге — Кутты — Нюстрёма пятого порядка. Только фиксированный временной шаг. -
DPRKN4
: явный адаптивный метод Рунге — Кутты — Нюстрёма четвертого порядка. -
DPRKN5
: явный адаптивный метод Рунге — Кутты — Нюстрёма пятого порядка. -
DPRKN6
: явный адаптивный метод Рунге — Кутты — Нюстрёма 6-го порядка. Свободный интерполянт 6-го порядка. -
DPRKN6FM
: явный адаптивный метод Рунге — Кутты — Нюстрёма 6-го порядка. -
DPRKN8
: явный адаптивный метод Рунге — Кутты — Нюстрёма 8-го порядка. -
DPRKN12
: явный адаптивный метод Рунге — Кутты — Нюстрёма 12-го порядка.
Симплектические интеграторы
Обратите внимание, что все симплектические интеграторы имеют только фиксированный временной шаг.
-
SymplecticEuler
: явный симплектический интегратор первого порядка -
VelocityVerlet
: явный симплектический интегратор второго порядка. Требуетf_2(t,u) = v
, то есть обыкновенное дифференциальное уравнение второго порядка. -
VerletLeapfrog
: явный симплектический интегратор второго порядка. -
PseudoVerletLeapfrog
: явный симплектический интегратор второго порядка. -
McAte2
: явный симплектический интегратор второго порядка с оптимизированной эффективностью. -
Ruth3
: явный симплектический интегратор третьего порядка. -
McAte3
: явный симплектический интегратор третьего порядка с оптимизированной эффективностью. -
CandyRoz4
: явный симплектический интегратор четвертого порядка. -
McAte4
: явный симплектический интегратор четвертого порядка. Требуется кинетическая энергия в квадрате. -
CalvoSanz4
: явный симплектический интегратор четвертого порядка с оптимизированной эффективностью. -
McAte42
: явный симплектический интегратор четвертого порядка. (Нарушен) -
McAte5
: явный симплектический интегратор пятого порядка с оптимизированной эффективностью. Требуется кинетическая энергия в квадрате. -
Yoshida6
: явный симплектический интегратор 6-го порядка. -
KahanLi6
: явный симплектический интегратор 6-го порядка с оптимизированной эффективностью. -
McAte8
: явный симплектический интегратор 8-го порядка. -
KahanLi8
: явный симплектический интегратор 8-го порядка с оптимизированной эффективностью. -
SofSpa10
: явный симплектический интегратор 10-го порядка.
GeometricIntegrators.jl
GeometricIntegrators.jl — это набор алгоритмов с фиксированным временным шагом, написанных на Julia. Обратите внимание, что эта настройка автоматически не включена в DifferentialEquations.jl. Для использования следующих алгоритмов необходимо установить и использовать GeometricIntegratorsDiffEq.jl:
Pkg.clone("https://github.com/SciML/GeometricIntegratorsDiffEq.jl")
using GeometricIntegratorsDiffEq
-
GISymplecticEulerA
— явный симплектический метод Эйлера A первого порядка -
GISymplecticEulerB
— явный симплектический метод Эйлера B первого порядка -
GILobattoIIIAIIIB(n)
— метод Гаусса-Лобатто IIIA IIIB N-го порядка -
GILobattoIIIBIIIA(n)
— метод Гаусса-Лобатто IIIB IIIA N-го порядка