Задачи RODE
#
SciMLBase.RODEProblem
— Type
Определяет задачу RODE. Страница документации: https://docs.sciml.ai/DiffEqDocs/stable/types/rode_types/
Математическая спецификация задачи RODE
Для определения задачи RODE достаточно задать функцию и начальное условие , которые определяют ОДУ:
где W(t)
является случайным процессом. Функцию f
следует указать как f(u,p,t,W)
(или на месте как f(du,u,p,t,W)
), а условие u₀
должно представлять собой массив AbstractArray (или число), геометрия которого соответствует требуемой геометрии u
. Обратите внимание, что тип значения u₀
не ограничен числами или векторами; значением u₀
также могут быть произвольные матрицы или тензоры высокой разрядности.
Конструкторы
-
RODEProblem(f::RODEFunction,u0,tspan,p=NullParameters();noise=WHITE_NOISE,rand_prototype=nothing,callback=nothing)
-
RODEProblem{isinplace,specialize}(f,u0,tspan,p=NullParameters();noise=WHITE_NOISE,rand_prototype=nothing,callback=nothing,mass_matrix=I)
: Определяет RODE с указанными функциями. Шум по умолчанию —WHITE_NOISE
.isinplace
дополнительно задает, является ли функция функцией на месте или нет. Это определяется автоматически, а не выводится.specialize
дополнительно определяет уровень специализации. Дополнительные сведения см. в разделе об уровнях специализации в документации по SciMLBase. По умолчанию используется значение `AutoSpecialize.
Дополнительные сведения о параметрах на месте и параметрах специализации см. в документации по ODEFunction.
Параметры являются необязательными, и если они не заданы, будет использоваться одинарный элемент NullParameters()
, который при попытке индексирования несуществующих параметров будет выдавать понятные ошибки. Все дополнительные именованные аргументы передаются в решатели. Например, если в задаче задать обратный вызов (callback
), этот callback
будет добавляться при каждом вызове функции solve.
Сведения о задании якобианов и матриц масс см. на странице о DiffEqFunctions.
Поля
-
f
: функция дрейфа в СДУ. -
u0
: начальное условие. -
tspan
: временной интервал для задачи. -
p
: необязательные параметры для задачи. Значение по умолчанию —NullParameters
. -
noise
: процесс шума, применяемый к шуму при его генерации. По умолчанию используется белый гауссовский шум. Информацию об определении различных процессов шума см. на странице документации по процессам шума. -
rand_prototype
: экземпляр типа прототипа для вектора шума. По умолчанию используетсяnothing
, что означает, что задача должна интерпретироваться как имеющая вектор шума, размер которого соответствуетu0
. -
kwargs
: именованные аргументы, передаваемые в решатели.
#
SciMLBase.RODEFunction
— Type
RODEFunction{iip,F,TMM,Ta,Tt,TJ,JVP,VJP,JP,SP,TW,TWt,TPJ,S,S2,S3,O,TCV} <: AbstractRODEFunction{iip,specialize}
Представление функции ROD f
, определяемое следующим образом:
и все связанные функции, такие как якобиан f
, градиент относительно времени и др. Для всех случаев u0
— это начальное условие, p
— это параметры, а t
— это независимая переменная.
Конструктор
RODEFunction{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,
analytic_full = __has_analytic_full(f) ? f.analytic_full : false)
Обратите внимание, что требуется только сама функция f
. Эта функция должна быть задана как f!(du,u,p,t,W)
или du = f(u,p,t,W)
. Более подробные сведения об обработке на месте и не на месте см. в разделе об iip
.
Все остальные функции являются необязательными для улучшения или ускорения использования f
. К ним относятся следующие.
-
mass_matrix
: матрица массM
, представленная в функции RODE. С ее помощью можно определить, что уравнение является случайным дифференциально-алгебраическим уравнением (RDAE), еслиM
сингулярна. -
analytic
: (u0,p,t,W)or
analytic(sol): used to pass an analytical solution function for the analytical solution of the RODE. Generally only used for testing and development of the solvers. The exact form depends on the field
analytic_full`. -
analytic_full
: логическое значение, указывающее, использовать ли формуanalytic(u0,p,t,W)
(еслиfalse
) или формуanalytic!(sol)
(еслиtrue
). Предполагается, что в первом случае будет возвращено решениеu(t)
уравнения, заданного с начальным условиемu0
, параметромp
, текущим временемt
и значениемW=W(t)
шума в заданное времяt
. Последний случай полезен, когда решение RODE зависит от всей истории шума, которая имеется вsol.W.W
, в моменты времениsol.W.t
. В этом случае функцияanalytic(sol)
должна явным образом изменять полеsol.u_analytic
с соответствующим ожидаемым решением вsol.W.t
илиsol.t
. -
tgrad(dT,u,p,t,W)
или dT=tgrad(u,p,t,W): возвращает -
jac(J,u,p,t,W)
илиJ=jac(u,p,t,W)
: возвращает -
jvp(Jv,v,u,p,t,W)
илиJv=jvp(v,u,p,t,W)
: возвращает направленную производную -
vjp(Jv,v,u,p,t,W)
илиJv=vjp(v,u,p,t,W)
: возвращает сопряженную производную -
jac_prototype
: матрица-прототип, соответствующая типу, который соответствует якобиану. Например, если якобиан является трехдиагональным, в качестве прототипа может использоваться матрицаTridiagonal
соответствующего размера, и по возможности интеграторы будут специализировать эту структуру. В неструктурированных шаблонах разреженности для якобиана следует использоватьSparseMatrixCSC
с правильным шаблоном разреженности. По умолчанию используетсяnothing
, что означает плотный якобиан. -
paramjac(pJ,u,p,t,W)
: возвращает якобиан параметра . -
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.
Поля
Поля типа RODEFunction напрямую соответствуют именам входных данных.
Тип решения
#
SciMLBase.RODESolution
— Type
struct RODESolution{T, N, uType, uType2, DType, tType, randType, P, A, IType, S, AC<:Union{Nothing, Vector{Int64}}} <: SciMLBase.AbstractRODESolution{T, N, uType}
Представление решения дифференциально-алгебраического уравнения, определяемого задачей SDEProblem, или случайного обыкновенного дифференциального уравнения, определяемого задачей RODEProblem.
Интерфейс DESolution
Более подробную информацию о взаимодействии с типами DESolution
можно найти на странице о работе с решениями в документации по DifferentialEquations.jl.
Поля
-
u
: представление решения СДУ или RODE. Задается в виде массива решений, гдеu[i]
соответствует решению в момент времениt[i]
. В большинстве случаев рекомендуется не обращаться кsol.u
напрямую, а использовать интерфейс массива, описанный на странице о работе с решениями в документации по DifferentialEquations.jl. -
t
: временные точки, соответствующие сохраненным значениям решения ОДУ. -
W
: представление сохраненного процесса шума из решения. См. страницу о процессах шума в документации по DifferentialEquations.jl. Обратите внимание, что этот шум сохраняется полностью только в том случае, еслиsave_noise=true
в решателе. -
prob
: исходная задача SDEProblem/RODEProblem, которая была решена. -
alg
: тип алгоритма, используемого решателем. -
stats
: статистика по решателю, например количество необходимых вычислений функции, количество вычисленных якобианов и др. -
retcode
: код возврата от решателя. Используется для определения того, успешно ли решен решатель, завершился ли он досрочно из-за определенного пользователем обратного вызова или завершился ли он из-за ошибки. Дополнительные сведения см. в документации по кодам возврата.