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

Задачи DDE

Определяет задачу DDE. Страница документации: https://docs.sciml.ai/DiffEqDocs/stable/types/dde_types/

Математическая спецификация задачи ДУЗА (DDE - delay differential equation)

Для определения задачи ДУЗА достаточно задать функцию , начальное условие в момент времени и функцию истории , которые в совокупности определяют ДУЗА:

Функцию следует указать как f(u, h, p, t) (или на месте как f(du, u, h, p, t)), условие должно представлять собой массив AbstractArray (или число), геометрия которого соответствует требуемой геометрии u, а функцию истории следует задать, как описано ниже. Доступ к функции истории h осуществляется для всех запаздывающих значений. Обратите внимание, что тип значения не ограничен числами или векторами; значением также могут быть произвольные матрицы или тензоры высокой разрядности.

Функциональные формы функции истории

Функция истории h может быть вызвана следующими способами.

  • h(p, t): вычисление не на месте

  • h(out, p, t): вычисление на месте

  • h(p, t, deriv::Type{Val{i}}): вычисление не на месте i-й производной

  • h(out, p, t, deriv::Type{Val{i}}): вычисление на месте i-й производной

  • h(args...; idxs): вычисление h(args...) для индексов idxs

Обратите внимание, что какие бы формы функции не использовались в пользовательской производной функции f, требуется диспетчеризация для предоставленной функции истории совпадающей формы.

Объявление запаздываний

Запаздывания объявляются отдельно от их использования. Вы можете использовать любое запаздывание с помощью интерполянта h в данной точке. Однако для обеспечения максимальной точности следует соблюдать осторожность. При объявлении запаздываний решатели могут работать более эффективно и точно, поэтому объявление является рекомендуемым действием.

Нейтральные и замедленные дифференциальные уравнения с запаздывающим аргументом

Обратите внимание, что спецификацию функции истории можно использовать для задания общих запаздывающих аргументов, т. е. h(p,α(u,t)). Нейтральные дифференциальные уравнения с запаздывающим аргументом могут быть заданы с помощью значения deriv в интерполяции истории. Например, h(p,t-τ, Val{1}) возвращает первую производную от исторических значений в момент времени t-τ.

Отметим, что алгебраические уравнения могут быть заданы с помощью сингулярной матрицы масс.

Тип задачи

Конструкторы

DDEProblem(f[, u0], h, tspan[, p]; <keyword arguments>)
DDEProblem{isinplace,specialize}(f[, u0], h, tspan[, p]; <keyword arguments>)

isinplace дополнительно задает, является ли функция функцией на месте или нет. Это определяется автоматически, а не выводится. specialize дополнительно определяет уровень специализации. Дополнительные сведения см. в разделе об уровнях специализации в документации по SciMLBase. По умолчанию используется AutoSpecialize.

Дополнительные сведения о параметрах на месте и параметрах специализации см. в документации по ODEFunction.

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

Сведения о задании якобианов и матриц масс см. на странице о DiffEqFunctions.

Аргументы

  • f: функция в ДУЗА.

  • u0: начальное условие. По умолчанию используется значение h(p, first(tspan)) функции истории, вычисленное в начальный момент времени.

  • h: функция истории для ДУЗА до t0.

  • tspan: временной интервал для задачи.

  • p: параметры, используемые для вызова функции f. Значение по умолчанию — NullParameters.

  • constant_lags: набор постоянных запаздываний, используемых функцией истории h. Значение по умолчанию — ().

  • dependent_lags: кортеж функций (u, p, t) -> lag для зависимых от состояния запаздываний, используемых функцией истории h. Значение по умолчанию — ().

  • neutral: является ли ДУЗА нейтральным, т. е. появляются ли запаздывания в производных.

  • order_discontinuity_t0: порядок разрыва в начальный момент времени. По умолчанию используется значение 0, если указано начальное условие u0. В противном случае задается значение больше или равное 1.

  • kwargs: именованные аргументы, передаваемые в решатели.

Динамические дифференциальные уравнения с запаздывающим аргументом

Подобно динамическим ОДУ, динамическое ДУЗА является разделенным ДУЗА следующего вида:

Конструкторы

DynamicalDDEProblem(f1, f2[, v0, u0], h, tspan[, p]; <keyword arguments>)
DynamicalDDEProblem{isinplace}(f1, f2[, v0, u0], h, tspan[, p]; <keyword arguments>)

Параметр isinplace дополнительно задает, является ли функция функцией на месте или нет. Это определяется автоматически, а не выводится.

Аргументы

  • f: функция в ДУЗА.

  • v0 и u0: начальное условие. По умолчанию используется значение h(p, first(tspan))... функции истории, вычисленной в начальный момент времени.

  • h: функция истории для ДУЗА до t0. Должна возвращать объект с индексами 1 и 2 со значениями v и u, соответственно.

  • tspan: временной интервал для задачи.

  • p: параметры, используемые для вызова функции f. Значение по умолчанию — NullParameters.

  • constant_lags: набор постоянных запаздываний, используемых функцией истории h. Значение по умолчанию — ().

  • dependent_lags: кортеж функций (v, u, p, t) -> lag для зависимых от состояния запаздываний, используемых функцией истории h. Значение по умолчанию — ().

  • neutral: является ли ДУЗА нейтральным, т. е. появляются ли запаздывания в производных.

  • order_discontinuity_t0: порядок разрыва в начальный момент времени. По умолчанию используется значение 0, если указано начальное условие u0. В противном случае задается значение больше или равное 1.

  • kwargs: именованные аргументы, передаваемые в решатели.

Для динамических ДУЗА и ДУЗА второго порядка функция истории возвращает объект с определенными индексами 1 и 2, где h(p, t_prev)[1] — это значение , а h(p, t_prev)[2] — это значение (это нужно для согласованности с упорядочением начальных условий в конструкторе). Предоставленная функция истории также должна возвращать такой двухиндексный объект. Для этого можно использовать кортеж (v,u) или вектор [v,u].

Дифференциальные уравнения с запаздывающим аргументом 2-го порядка

Для определения задачи ДАУ 2-го порядка достаточно задать функцию и начальное условие , которые определяют ДУЗА:

Функцию f следует указать как f(du,u,p,t) (или на месте как f(ddu,du,u,p,t)), а условие u₀ должно представлять собой массив AbstractArray (или число), геометрия которого соответствует требуемой геометрии u. Обратите внимание, что тип значения u₀ не ограничен числами или векторами; значением u₀ также могут быть произвольные матрицы или тензоры высокой разрядности.

На основе этой формы динамическое ОДУ выглядит следующим образом:

Конструкторы

SecondOrderDDEProblem(f, [, du0, u0], h, tspan[, p]; <keyword arguments>)
SecondOrderDDEProblem{isinplace}(f, [, du0, u0], h, tspan[, p]; <keyword arguments>)

Параметр isinplace дополнительно задает, является ли функция функцией на месте или нет. Это определяется автоматически, а не выводится.

Аргументы

  • f: функция в ДУЗА.

  • du0 и u0: начальное условие. По умолчанию используется значение h(p, first(tspan))... функции истории, вычисленной в начальный момент времени.

  • h: функция истории для ДУЗА до t0. Должна возвращать объект с индексами 1 и 2 со значениями v и u, соответственно.

  • tspan: временной интервал для задачи.

  • p: параметры, используемые для вызова функции f. Значение по умолчанию — NullParameters.

  • constant_lags: набор постоянных запаздываний, используемых функцией истории h. Значение по умолчанию — ().

  • dependent_lags: кортеж функций (v, u, p, t) -> lag для зависимых от состояния запаздываний, используемых функцией истории h. Значение по умолчанию — ().

  • neutral: является ли ДУЗА нейтральным, т. е. появляются ли запаздывания в производных.

  • order_discontinuity_t0: порядок разрыва в начальный момент времени. По умолчанию используется значение 0, если указано начальное условие u0. В противном случае задается значение больше или равное 1.

  • kwargs: именованные аргументы, передаваемые в решатели.

Как указано выше, функция истории возвращает объект с индексами 1 и 2 со значениями du и u, соответственно. Предоставленная функция истории также должна соответствовать этому типу возврата, например возвращать двухэлементный кортеж или вектор.

Примеры задач

Примеры задач можно найти на странице DiffEqProblemLibrary.jl.

Использовать пример задачи, например prob_dde_constant_1delay_ip, можно так:

#] add DDEProblemLibrary
using DDEProblemLibrary
prob = DDEProblemLibrary.prob_dde_constant_1delay_ip
sol = solve(prob)
DDEFunction{iip,F,TMM,Ta,Tt,TJ,JVP,VJP,JP,SP,TW,TWt,TPJ,S.S2,S3,O,TCV} <: AbstractDDEFunction{iip,specialize}

Представление функции ДУЗА f, определяемое следующим образом:

и все связанные функции, такие как якобиан f, градиент относительно времени и др. Для всех случаев u0 — это начальное условие, p — это параметры, а t — это независимая переменная.

Конструктор

DDEFunction{iip,specialize}(f;
                 mass_matrix = __has_mass_matrix(f) ? f.mass_matrix : I,
                 analytic = __has_analytic(f) ? f.analytic : nothing,
                 tgrad= __has_tgrad(f) ? f.tgrad : nothing,
                 jac = __has_jac(f) ? f.jac : nothing,
                 jvp = __has_jvp(f) ? f.jvp : nothing,
                 vjp = __has_vjp(f) ? f.vjp : nothing,
                 jac_prototype = __has_jac_prototype(f) ? f.jac_prototype : nothing,
                 sparsity = __has_sparsity(f) ? f.sparsity : jac_prototype,
                 paramjac = __has_paramjac(f) ? f.paramjac : nothing,
                 syms = __has_syms(f) ? f.syms : nothing,
                 indepsym= __has_indepsym(f) ? f.indepsym : nothing,
                 paramsyms = __has_paramsyms(f) ? f.paramsyms : nothing,
                 colorvec = __has_colorvec(f) ? f.colorvec : nothing,
                 sys = __has_sys(f) ? f.sys : nothing)

Обратите внимание, что требуется только сама функция f. Эта функция должна быть задана как f!(du,u,h,p,t) или du = f(u,h,p,t). Более подробные сведения об обработке на месте и не на месте см. в разделе об iip. Функция истории h действует как интерполятор в динамике, т. е. h(t) с параметрами, соответствующими интерфейсу решения, а именно h(t; save_idxs = 2).

Все остальные функции являются необязательными для улучшения или ускорения использования f. К ним относятся следующие.

  • mass_matrix: матрица масс M, представленная в функции ОДУ. С ее помощью можно определить, что уравнение является дифференциально-алгебраическим уравнением (ДАУ), если M сингулярна. Обратите внимание, что в этом случае требуются специальные решатели. Подробнее см. на странице о решателях ДАУ: https://docs.sciml.ai/DiffEqDocs/stable/solvers/dae_solve/. Должен быть AbstractArray или AbstractSciMLOperator.

  • analytic(u0,p,t): используется для передачи функции аналитического решения для аналитического решения уравнения ОДУ. Обычно применяется только для тестирования и разработки решателей.

  • tgrad(dT,u,h,p,t) или dT=tgrad(u,p,t): возвращает

  • jac(J,u,h,p,t) или J=jac(u,p,t): возвращает

  • jvp(Jv,v,h,u,p,t) или Jv=jvp(v,u,p,t): возвращает направленную производную

  • vjp(Jv,v,h,u,p,t) или Jv=vjp(v,u,p,t): возвращает сопряженную производную

  • jac_prototype: матрица-прототип, соответствующая типу, который соответствует якобиану. Например, если якобиан является трехдиагональным, в качестве прототипа может использоваться матрица Tridiagonal соответствующего размера, и по возможности интеграторы будут специализировать эту структуру. В неструктурированных шаблонах разреженности для якобиана следует использовать SparseMatrixCSC с правильным шаблоном разреженности. По умолчанию используется nothing, что означает плотный якобиан.

  • paramjac(pJ,h,u,p,t): возвращает якобиан параметра .

  • syms: имена символов для элементов уравнения. По размеру они должны соответствовать u0. Например, если u0 = [0.0,1.0] и syms = [:x, :y], к значениям будет применено каноническое именование, что позволит использовать sol[:x] в решении и автоматически присваивать имена значениям на графиках.

  • indepsym: каноническое именование для независимой переменной. Значение по умолчанию — nothing, которое внутренним образом использует t в качестве представления в любых графиках.

  • paramsyms: имена символов для параметров уравнения. По размеру они должны соответствовать p. Например, если p = [0.0, 1.0] и paramsyms = [:a, :b], к значениям будет применено каноническое именование, что позволит использовать sol[:a] в решении.

  • colorvec: цветовой вектор в соответствии с определением SparseDiffTools.jl для шаблона разреженности матрицы-прототипа jac_prototype. Это позволяет ускорить построение якобиана при использовании конечных разностей и автоматического дифференцирования на основе шаблона разреженности. Значение по умолчанию — nothing, что означает, что цветовой вектор будет внутренним образом вычисляться по требованию, когда это необходимо. Стоимость этой операции существенно зависит от шаблона разреженности.

iip: на месте и не на месте

Дополнительные сведения об этом аргументе см. в документации по ODEFunction.

specialize: управление компиляцией и специализацией

Дополнительные сведения об этом аргументе см. в документации по ODEFunction.

Поля

Поля типа DDEFunction напрямую соответствуют именам входных данных.

Тип решения

В результате решения DDEProblem возвращается объект ODESolution. Дополнительные сведения см. в docstring ODESolution на странице определения задачи ODE.

Примеры задач

Примеры задач можно найти на странице DiffEqProblemLibrary.jl.

Использовать пример задачи, например prob_ode_linear, можно так:

#] добавляем DiffEqProblemLibrary
using DiffEqProblemLibrary.ODEProblemLibrary
# загружаем задачи
ODEProblemLibrary.importodeproblems()
prob = ODEProblemLibrary.prob_ode_linear
sol = solve(prob)

DDE с 1 постоянным запаздыванием

prob_dde_constant_1delay_ip

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории если и .

Решение

Аналитическое решение для ] может быть получено методом шагов и приведено в данной реализации.

prob_dde_constant_1delay_oop

То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_1delay_ip, но специально реализованное с помощью функции не на месте.

prob_dde_constant_1delay_scalar

То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_1delay_ip, но специально реализованное с помощью скалярной функции.

prob_dde_constant_1delay_long_ip

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории если и .

prob_dde_constant_1delay_long_oop

То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_1delay_long_ip, но специально реализованное с помощью функции не на месте.

prob_dde_constant_1delay_long_scalar

То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_1delay_long_ip, но специально реализованное с помощью скалярной функции.

DDE с 2 постоянными запаздываниями

prob_dde_constant_2delays_ip

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории если и .

Решение

Аналитическое решение для ] может быть получено методом шагов и приведено в данной реализации.

prob_dde_constant_2delays_oop

То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_2delays_ip, но специально реализованное с помощью функции не на месте.

prob_dde_constant_2delays_scalar

То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_2delays_ip, но специально реализованное с помощью скалярной функции.

prob_dde_constant_2delays_long_ip

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории если и .

prob_dde_constant_2delays_long_oop

То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_2delays_long_ip, но специально реализованное с помощью функции не на месте.

prob_dde_constant_2delays_long_scalar

То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_2delays_long_ip, но специально реализованное с помощью скалярной функции.

Задачи DDETest

Более подробные сведения:

# DDE с зависимыми от времени задержками
prob_dde_DDETST_A1, prob_dde_DDETST_A2,
# DDE со стремящимися к нулю зависимыми от времени задержками
prob_dde_DDETST_B1, prob_dde_DDETST_B2,
# DDE с зависимыми от состояния задержками
prob_dde_DDETST_C1, prob_dde_DDETST_C2, prob_dde_DDETST_C3, prob_dde_DDETST_C4,
# DDE со стремящимися к нулю зависимыми от состояния задержками
prob_dde_DDETST_D1, prob_dde_DDETST_D2,
# нейтральные DDE с зависимыми от времени задержками
prob_dde_DDETST_E1, prob_dde_DDETST_E2,
# нейтральные DDE со стремящимися к нулю зависимыми от времени задержками
prob_dde_DDETST_F1, prob_dde_DDETST_F2, prob_dde_DDETST_F3, prob_dde_DDETST_F4, prob_dde_DDETST_F5,
# нейтральные DDE с зависимыми от состояния задержками
prob_dde_DDETST_G1, prob_dde_DDETST_G2,
# нейтральные DDE со стремящимися к нулю зависимыми от состояния задержками
prob_dde_DDETST_H1, prob_dde_DDETST_H2, prob_dde_DDETST_H3, prob_dde_DDETST_H4
prob_dde_DDETST_A1

Модель дифференциального уравнения с запаздывающим аргументом для кроветворения, заданная следующим образом

для ]с функцией истории для .

Справочные материалы

Mackey, M. C. and Glass, L. (1977). Oscillation and chaos in physiological control systems, Science (197), pp. 287-289.

prob_dde_DDETST_A2

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

для ] с функцией истории

для .

Справочные материалы

Wheldon, T., Kirk, J. and Finlay, H. (1974). Cyclical granulopoiesis in chronic granulocytic leukemia: A simulation study., Blood (43), pp. 379-387.

prob_dde_DDETST_B1

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории для ].

Решение

Аналитическим решением для ] является

Справочные материалы

Neves, K. W. (1975). Automatic integration of functional differential equations: An approach, ACM Trans. Math. Soft. (1), pp. 357-368.

prob_dde_DDETST_B2

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории .

Решение

Аналитическим решением для ] является

Справочные материалы

Neves, K. W. and Thompson, S. (1992). Solution of systems of functional differential equations with state dependent delays, Technical Report TR-92-009, Computer Science, Radford University.

prob_dde_DDETST_C1

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории для .

Справочные материалы

Paul, C. A. H. (1994). A test set of functional differential equations, Technical Report 249, The Department of Mathematics, The University of Manchester, Manchester, England.

prob_dde_DDETST_C2

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории

для .

Справочные материалы

Paul, C. A. H. (1994). A test set of functional differential equations, Technical Report 249, The Department of Mathematics, The University of Manchester, Manchester, England.

prob_dde_DDETST_C3

Модель дифференциального уравнения с запаздывающим аргументом для гематопоэза, заданная следующим образом

для ] с функцией истории , и

где , , , , , , , и .

Справочные материалы

Mahaffy, J. M., Belair, J. and Mackey, M. C. (1996). Hematopoietic model with moving boundary condition and state dependent delay, Private communication.

prob_dde_DDETST_C4

Модель дифференциального уравнения с запаздывающим аргументом для гематопоэза, заданная тем же дифференциальным уравнением с запаздывающим аргументом, что и prob_dde_DDETST_C3.

для ] с функцией истории , и для , где , , , , , , , и .

Справочные материалы

Mahaffy, J. M., Belair, J. and Mackey, M. C. (1996). Hematopoietic model with moving boundary condition and state dependent delay, Private communication.

prob_dde_DDETST_D1

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории

для ].

Решение

Аналитическим решением для ] является

Справочные материалы

Neves, K. W. (1975). Automatic integration of functional differential equations: An approach, ACM Trans. Math. Soft. (1), pp. 357-368.

prob_dde_DDETST_D2

Модель дифференциального уравнения с запаздывающим аргументом для динамики антиген-антитело с затухающей памятью, заданная следующим образом

для ] с функцией истории

для , где , , и .

Справочные материалы

Gatica, J. and Waltman, P. (1982). A threshold model of antigen antibody dynamics with fading memory, in Lakshmikantham (ed.), Nonlinear phenomena in mathematical science, Academic Press, New York, pp. 425-439.

prob_dde_DDETST_E1

Модель дифференциального уравнения с запаздывающим аргументом для популяции с ограниченными источниками питания, заданная следующим образом

для ] с функцией истории для , где и .

Справочные материалы

Kuang, Y. and Feldstein, A. (1991). Boundedness of solutions of a nonlinear nonautonomous neutral delay equation, J. Math. Anal. Appl. (156), pp. 293-304.

prob_dde_DDETST_E2

Модель дифференциального уравнения с запаздывающим аргументом для логистической гауссовой системы «хищник-жертва», заданная следующим образом

для ] с функцией истории

для , где , и .

Справочные материалы

(1991). On neutral delay logistics Gauss-type predator-prey systems, Dyn. Stab. Systems (6), pp. 173-189.

prob_dde_DDETST_F1

Дифференциальное уравнение с запаздывающим аргументом

для ] с функцией истории и .

Решение

Аналитическим решением для ] является

Справочные материалы

Jackiewicz, Z. (1981). One step methods for the numerical solution of Volterra functional differential equations of neutral type, Applicable Anal. (12), pp. 1-11.

prob_dde_DDETST_F2

Дифференциальное уравнение с запаздывающим аргументом