Задачи SDE

# SciMLBase.SDEProblemType

Определяет задачу 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.SDEFunctionType

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_linearConstant

где , , а начальное условие с решением

# SDEProblemLibrary.prob_sde_2DlinearConstant

8 линейных SDE (в виде матрицы 4x2):

где , , а начальное условие с решением

# SDEProblemLibrary.prob_sde_waveConstant

и начальное условие с решением

# SDEProblemLibrary.prob_sde_lorenzConstant

Аттрактор Лоренца с аддитивным шумом

с , , , и начальным условием ].

# SDEProblemLibrary.prob_sde_cubicConstant

и начальное условие с решением

# SDEProblemLibrary.prob_sde_additiveConstant

Задача аддитивного шума

и начальное условие с и , с решением

# SDEProblemLibrary.prob_sde_additivesystemConstant

Многомерное расширение additiveSDEExample

# SDEProblemLibrary.prob_sde_nltestConstant

Runge—​Kutta methods for numerical solution of stochastic differential equations Tocino and Ardanuy

# SDEProblemLibrary.oval2ModelExampleFunction

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_stiffquadstratConstant

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_stiffquaditoConstant

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_heatFunction

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_bistableConstant

Бистабильная химическая реакционная сеть с полустабильным нижним состоянием.

# SDEProblemLibrary.prob_sde_brussConstant

Стохастический Брюсселатор

# SDEProblemLibrary.prob_sde_oscilreactConstant

Колебательная система химических реакций