Задачи SDE
#
SciMLBase.SDEProblem
— Type
Определяет задачу SDE. Страница документации: https://docs.sciml.ai/DiffEqDocs/stable/types/sde_types/
Математическое определение задачи SDE
Для определения SDE достаточно задать вынужденную функцию f
, функцию шума g
и начальное условие u₀
:
f
и g
должны задаваться в виде f(u,p,t)
и g(u,p,t)
соответственно, а условие u₀
должно представлять собой массив AbstractArray, геометрия которого соответствует требуемой геометрии u
. Обратите внимание, что тип значения u₀
не ограничен числами или векторами; значением u₀
также могут быть произвольные матрицы или тензоры высокой разрядности. Кроме того, можно задать вектор функций g
, чтобы определить SDE более высокой размерности Ито.
Тип задачи
Инкапсулирует данные, определяющие задачу SDE
с начальным условием u0
.
Конструкторы
-
SDEProblem(f::SDEFunction,g,u0,tspan,p=NullParameters();noise=WHITE_NOISE,noise_rate_prototype=nothing)
-
SDEProblem{isinplace,specialize}(f,g,u0,tspan,p=NullParameters();noise=WHITE_NOISE,noise_rate_prototype=nothing)
: Определяет SDE с указанными функциями. Шум по умолчанию —WHITE_NOISE
.isinplace
дополнительно задает, является ли функция функцией на месте или нет. Это определяется автоматически, а не выводится.specialize
дополнительно определяет уровень специализации. Дополнительные сведения см. в разделе об уровнях специализации в документации по SciMLBase. По умолчанию используется значениеAutoSpecialize
.
Параметры являются необязательными, и если они не заданы, будет использоваться одинарный элемент NullParameters()
, который при попытке индексирования несуществующих параметров будет выдавать понятные ошибки. Все дополнительные именованные аргументы передаются в решатели. Например, если в задаче задать обратный вызов (callback
), этот callback
будет добавляться при каждом вызове функции solve.
Сведения о задании якобианов и матриц масс см. на странице о DiffEqFunctions.
Поля
-
f
: функция дрейфа в SDE. -
g
: функция шума в SDE. -
u0
: начальное условие. -
tspan
: временной интервал для задачи. -
p
: необязательные параметры для задачи. Значение по умолчанию —NullParameters
. -
noise
: процесс шума, применяемый к шуму при его генерации. По умолчанию используется белый гауссовский шум. Информацию об определении различных процессов шума см. на странице документации по процессам шума. -
noise_rate_prototype
: экземпляр типа прототипа для номинальных характеристик шума, то есть результат функцииg
. Это может быть любой тип, который перегружаетA_mul_B!
, причем сам является средним аргументом. Обычно это матрица или разреженная матрица. Если он не задан, по умолчанию используетсяnothing
, что означает, что задача должна интерпретироваться как имеющая диагональный шум. -
kwargs
: именованные аргументы, передаваемые в решатели.
Примеры задач
Примеры задач можно найти на странице DiffEqProblemLibrary.jl.
Использовать пример задачи, например prob_sde_linear
, можно так:
#] add SDEProblemLibrary
using SDEProblemLibrary
prob = SDEProblemLibrary.prob_sde_linear
sol = solve(prob)
#
SciMLBase.SDEFunction
— Type
SDEFunction{iip,F,G,TMM,Ta,Tt,TJ,JVP,VJP,JP,SP,TW,TWt,TPJ,GG,S,S2,S3,O,TCV} <: AbstractSDEFunction{iip,specialize}
Представление функции SDE f
, определяемое следующим образом:
и все связанные функции, такие как якобиан f
, градиент относительно времени и др. Для всех случаев u0
— это начальное условие, p
— это параметры, а t
— это независимая переменная.
Конструктор
SDEFunction{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,
ggprime = 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
и g
. Эта функция должна быть задана как f!(du,u,p,t)
или du = f(u,p,t)
. Более подробные сведения об обработке на месте и не на месте см. в разделе об iip
.
Все остальные функции являются необязательными для улучшения или ускорения использования f
. К ним относятся следующие.
-
mass_matrix
: матрица массM
, представленная в функции ОДУ. С ее помощью можно определить, что уравнение является дифференциально-алгебраическим уравнением (ДАУ), еслиM
сингулярна. Обратите внимание, что в этом случае требуются специальные решатели. Подробнее см. на странице о решателях ДАУ: https://docs.sciml.ai/DiffEqDocs/stable/solvers/dae_solve/. Должен быть AbstractArray или AbstractSciMLOperator. -
analytic(u0,p,t)
: используется для передачи функции аналитического решения для аналитического решения уравнения ОДУ. Обычно применяется только для тестирования и разработки решателей. -
tgrad(dT,u,p,t)
или dT=tgrad(u,p,t): возвращает -
jac(J,u,p,t)
илиJ=jac(u,p,t)
: возвращает -
jvp(Jv,v,u,p,t)
илиJv=jvp(v,u,p,t)
: возвращает направленную производную -
vjp(Jv,v,u,p,t)
илиJv=vjp(v,u,p,t)
: возвращает сопряженную производную -
ggprime(J,u,p,t)
илиJ = ggprime(u,p,t)
: возвращает производную Мильштейна -
jac_prototype
: матрица-прототип, соответствующая типу, который соответствует якобиану. Например, если якобиан является трехдиагональным, в качестве прототипа может использоваться матрицаTridiagonal
соответствующего размера, и по возможности интеграторы будут специализировать эту структуру. В неструктурированных шаблонах разреженности для якобиана следует использоватьSparseMatrixCSC
с правильным шаблоном разреженности. По умолчанию используетсяnothing
, что означает плотный якобиан. -
paramjac(pJ,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.
Поля
Поля типа ODEFunction напрямую соответствуют именам входных данных.
Тип решения
В результате решения SDEProblem
возвращается объект RODESolution
. Дополнительные сведения см. в docstring RODESolution
на странице определения задачи RODE.
Примеры задач
Примеры задач можно найти на странице DiffEqProblemLibrary.jl.
Использовать пример задачи, например prob_sde_linear
, можно так:
#] add DiffEqProblemLibrary
using DiffEqProblemLibrary.SDEProblemLibrary
# загружаем задачи
SDEProblemLibrary.importsdeproblems()
prob = SDEProblemLibrary.prob_sde_linear
sol = solve(prob)
#
SDEProblemLibrary.prob_sde_2Dlinear
— Constant
8 линейных SDE (в виде матрицы 4x2):
где , , а начальное условие с решением
#
SDEProblemLibrary.prob_sde_lorenz
— Constant
Аттрактор Лоренца с аддитивным шумом
с , , , и начальным условием ].
#
SDEProblemLibrary.prob_sde_additive
— Constant
Задача аддитивного шума
и начальное условие с и , с решением
#
SDEProblemLibrary.prob_sde_additivesystem
— Constant
Многомерное расширение additiveSDEExample
#
SDEProblemLibrary.prob_sde_nltest
— Constant
Runge—Kutta methods for numerical solution of stochastic differential equations Tocino and Ardanuy
#
SDEProblemLibrary.oval2ModelExample
— Function
oval2ModelExample(;largeFluctuations=false,useBigs=false,noiseLevel=1)
Функция, образующая модель эпителиально-мезенхимального перехода Oval2; источник:
Rackauckas, C., & Nie, Q. (2017). Adaptive methods for stochastic differential equations via natural embeddings and rejection sampling with memory. Discrete and continuous dynamical systems. Series B, 22(7), 2731.
19 SDE, которые являются жесткими только при переходе между биологическими состояниями.
#
SDEProblemLibrary.prob_sde_stiffquadstrat
— Constant
The composite Euler method for stiff stochastic differential equations
Kevin Burrage, Tianhai Tian
And
S-ROCK: CHEBYSHEV METHODS FOR STIFF STOCHASTIC DIFFERENTIAL EQUATIONS
ASSYR ABDULLE AND STEPHANE CIRILLI
Stiffness of Euler is determined by α+β²<1 Higher α or β is stiff, with α being deterministic stiffness and β being noise stiffness (and grows by square).
#
SDEProblemLibrary.prob_sde_stiffquadito
— Constant
The composite Euler method for stiff stochastic differential equations
Kevin Burrage, Tianhai Tian
And
S-ROCK: CHEBYSHEV METHODS FOR STIFF STOCHASTIC DIFFERENTIAL EQUATIONS
ASSYR ABDULLE AND STEPHANE CIRILLI
Stiffness of Euler is determined by α+β²<1 Higher α or β is stiff, with α being deterministic stiffness and β being noise stiffness (and grows by square).
#
SDEProblemLibrary.generate_stiff_stoch_heat
— Function
Stochastic Heat Equation with scalar multiplicative noise
S-ROCK: CHEBYSHEV METHODS FOR STIFF STOCHASTIC DIFFERENTIAL EQUATIONS
ASSYR ABDULLE AND STEPHANE CIRILLI
Raising D or k increases stiffness
#
SDEProblemLibrary.prob_sde_bistable
— Constant
Бистабильная химическая реакционная сеть с полустабильным нижним состоянием.
#
SDEProblemLibrary.prob_sde_bruss
— Constant
Стохастический Брюсселатор
#
SDEProblemLibrary.prob_sde_oscilreact
— Constant
Колебательная система химических реакций