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

Задачи с неавтономными линейными ODE или лиевыми группами

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

Математическая спецификация неавтономного линейного ODE

Эти алгоритмы требуют неавтономного линейного ODE следующего вида:

Здесь  — это AbstractDiffEqOperator, умножаемый на . Многие алгоритмы специализируют форму , например, может быть константой либо может быть только зависимой от времени функцией ( ).

Построение

Неавтономное линейное ODE создается так же, как ODEProblem, за тем исключением, что функция f представлена объектом AbstractDiffEqOperator (обратите внимание: это означает, что к задачам, записанным в таком виде, можно также применить любой стандартный решатель ODE). Пример:

function update_func(A, u, p, t)
    A[1, 1] = cos(t)
    A[2, 1] = sin(t)
    A[1, 2] = -sin(t)
    A[2, 2] = cos(t)
end
A = DiffEqArrayOperator(ones(2, 2), update_func = update_func)
prob = ODEProblem(A, ones(2), (10, 50.0))

определяет квазилинейное ODE , где компоненты  — это заданные функции. Исходя из такой формулировки, получается, что общая форма имеет вид , например:

function update_func(A, u, p, t)
    A[1, 1] = 0
    A[2, 1] = 1
    A[1, 2] = -2 * (1 - cos(u[2]) - u[2] * sin(u[2]))
    A[2, 2] = 0
end

имеет зависимый от состояния линейный оператор. Обратите внимание, что можно использовать и множество других AbstractDiffEqOperator; DiffEqArrayOperator — это лишь один из вариантов, представляющий A в виде матрицы (другие варианты не предусматривают матриц).

Имейте в виду, что если  — константа, достаточно предоставить напрямую без update_func.

Примечание об афинных уравнениях

Обратите внимание, что аффинное уравнение

можно записать в линейном виде, увеличив размер системы на единицу, чтобы получить свободный член, равный 1. Для этого в A добавляется новая строка, содержащая одни нули, и этому новому состоянию присваивается начальное значение 1. Затем в A добавляется новый столбец, содержащий значения g(u,p,t). Таким образом, уравнения подобных типов можно обрабатывать с помощью данных специализированных интеграторов.