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

Задачи RODE

# SciMLBase.RODEProblemType

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

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)oranalytic(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 fieldanalytic_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.RODESolutionType

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: код возврата от решателя. Используется для определения того, успешно ли решен решатель, завершился ли он досрочно из-за определенного пользователем обратного вызова или завершился ли он из-за ошибки. Дополнительные сведения см. в документации по кодам возврата.