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

Задачи SDDE

Определяет задачу стохастического дифференциального уравнения с запаздывающим аргументом (SDDE). Страница документации: https://docs.sciml.ai/DiffEqDocs/stable/types/sdde_types/

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

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

Функцию следует указать как 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-τ.

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

Тип задачи

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

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

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

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

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

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

Аргументы

  • f: функция дрейфа в SDDE.

  • g: функция рассеяния в SDDE.

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

  • h: функция истории для DDE до t0.

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

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

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

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

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

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

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

SDDEFunction{iip,F,G,TMM,Ta,Tt,TJ,JVP,VJP,JP,SP,TW,TWt,TPJ,GG,S,S2,S3,O,TCV} <: AbstractSDDEFunction{iip,specialize}

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

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

Конструктор

SDDEFunction{iip,specialize}(f,g;
                 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, представленная в функции ODE. С ее помощью можно определить, что уравнение является дифференциально-алгебраическим уравнением (DAE), если M сингулярна. Обратите внимание, что в этом случае требуются специальные решатели. Подробнее см. на странице о решателях DAE: https://docs.sciml.ai/DiffEqDocs/stable/solvers/dae_solve/. Должен быть AbstractArray или AbstractSciMLOperator.

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

  • 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 напрямую соответствуют именам входных данных.

Тип решения

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