Задачи DDE
#
SciMLBase.DDEProblem
— Type
Определяет задачу 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)
#
SciMLBase.DDEFunction
— Type
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 постоянным запаздыванием
#
DDEProblemLibrary.prob_dde_constant_1delay_ip
— Constant
prob_dde_constant_1delay_ip
Дифференциальное уравнение с запаздывающим аргументом
для ] с функцией истории если и .
Решение
Аналитическое решение для ] может быть получено методом шагов и приведено в данной реализации.
#
DDEProblemLibrary.prob_dde_constant_1delay_oop
— Constant
prob_dde_constant_1delay_oop
То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_1delay_ip
, но специально реализованное с помощью функции не на месте.
#
DDEProblemLibrary.prob_dde_constant_1delay_scalar
— Constant
prob_dde_constant_1delay_scalar
То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_1delay_ip
, но специально реализованное с помощью скалярной функции.
#
DDEProblemLibrary.prob_dde_constant_1delay_long_ip
— Constant
prob_dde_constant_1delay_long_ip
Дифференциальное уравнение с запаздывающим аргументом
для ] с функцией истории если и .
#
DDEProblemLibrary.prob_dde_constant_1delay_long_oop
— Constant
prob_dde_constant_1delay_long_oop
То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_1delay_long_ip
, но специально реализованное с помощью функции не на месте.
#
DDEProblemLibrary.prob_dde_constant_1delay_long_scalar
— Constant
prob_dde_constant_1delay_long_scalar
То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_1delay_long_ip
, но специально реализованное с помощью скалярной функции.
DDE с 2 постоянными запаздываниями
#
DDEProblemLibrary.prob_dde_constant_2delays_ip
— Constant
prob_dde_constant_2delays_ip
Дифференциальное уравнение с запаздывающим аргументом
для ] с функцией истории если и .
Решение
Аналитическое решение для ] может быть получено методом шагов и приведено в данной реализации.
#
DDEProblemLibrary.prob_dde_constant_2delays_oop
— Constant
prob_dde_constant_2delays_oop
То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_2delays_ip
, но специально реализованное с помощью функции не на месте.
#
DDEProblemLibrary.prob_dde_constant_2delays_scalar
— Constant
prob_dde_constant_2delays_scalar
То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_2delays_ip
, но специально реализованное с помощью скалярной функции.
#
DDEProblemLibrary.prob_dde_constant_2delays_long_ip
— Constant
prob_dde_constant_2delays_long_ip
Дифференциальное уравнение с запаздывающим аргументом
для ] с функцией истории если и .
#
DDEProblemLibrary.prob_dde_constant_2delays_long_oop
— Constant
prob_dde_constant_2delays_long_oop
То же дифференциальное уравнение с запаздывающим аргументом, что и prob_dde_constant_2delays_long_ip
, но специально реализованное с помощью функции не на месте.
#
DDEProblemLibrary.prob_dde_constant_2delays_long_scalar
— Constant
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
#
DDEProblemLibrary.prob_dde_DDETST_A1
— Constant
prob_dde_DDETST_A1
Модель дифференциального уравнения с запаздывающим аргументом для кроветворения, заданная следующим образом
для ]с функцией истории для .
Справочные материалы
Mackey, M. C. and Glass, L. (1977). Oscillation and chaos in physiological control systems, Science (197), pp. 287-289.
#
DDEProblemLibrary.prob_dde_DDETST_A2
— Constant
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.
#
DDEProblemLibrary.prob_dde_DDETST_B1
— Constant
prob_dde_DDETST_B1
Дифференциальное уравнение с запаздывающим аргументом
для ] с функцией истории для ].
Решение
Аналитическим решением для ] является
Справочные материалы
Neves, K. W. (1975). Automatic integration of functional differential equations: An approach, ACM Trans. Math. Soft. (1), pp. 357-368.
#
DDEProblemLibrary.prob_dde_DDETST_B2
— Constant
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.
#
DDEProblemLibrary.prob_dde_DDETST_C1
— Constant
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.
#
DDEProblemLibrary.prob_dde_DDETST_C2
— Constant
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.
#
DDEProblemLibrary.prob_dde_DDETST_C3
— Constant
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.
#
DDEProblemLibrary.prob_dde_DDETST_C4
— Constant
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.
#
DDEProblemLibrary.prob_dde_DDETST_D1
— Constant
prob_dde_DDETST_D1
Дифференциальное уравнение с запаздывающим аргументом
для
для
Решение
Аналитическим решением для
Справочные материалы
Neves, K. W. (1975). Automatic integration of functional differential equations: An approach, ACM Trans. Math. Soft. (1), pp. 357-368.
#
DDEProblemLibrary.prob_dde_DDETST_D2
— Constant
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.
#
DDEProblemLibrary.prob_dde_DDETST_E1
— Constant
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.
#
DDEProblemLibrary.prob_dde_DDETST_E2
— Constant
prob_dde_DDETST_E2
Модель дифференциального уравнения с запаздывающим аргументом для логистической гауссовой системы «хищник-жертва», заданная следующим образом
для
для
Справочные материалы
(1991). On neutral delay logistics Gauss-type predator-prey systems, Dyn. Stab. Systems (6), pp. 173-189.
#
DDEProblemLibrary.prob_dde_DDETST_F1
— Constant
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.
#
DDEProblemLibrary.prob_dde_DDETST_F2
— Constant
prob_dde_DDETST_F2
Дифференциальное уравнение с запаздывающим аргументом