Документация Engee

Решатели динамических, гамильтоновских и обыкновенных дифференциальных уравнений второго порядка

Динамические обыкновенные дифференциальные уравнения (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-го порядка