Дискретные задачи
#
SciMLBase.DiscreteProblem
— Type
Определяет дискретную задачу. Страница документации: https://docs.sciml.ai/DiffEqDocs/stable/types/discrete_types/
Математическая спецификация дискретной задачи
Для определения дискретной задачи достаточно задать функцию и начальное условие , которые определяют отображение функции:
Функцию f
следует указать как f(un,p,t)
(или на месте как f(unp1,un,p,t)
), а условие u_0
должно представлять собой массив AbstractArray (или число), геометрия которого соответствует требуемой геометрии u
. Обратите внимание, что тип значения u₀
не ограничен числами или векторами; значением u₀
также могут быть произвольные матрицы или тензоры высокой разрядности. зависит только от предыдущей итерации and . Заданное по умолчанию время из FunctionMap
равно (при этом dt=1
является значением по умолчанию). Для непрерывных цепей Маркова это время, в которое происходит изменение.
Обратите внимание, что если для дискретного решателя задано значение scale_by_time=true
, задача интерпретируется следующим образом:
Тип задачи
Конструкторы
-
DiscreteProblem(f::ODEFunction,u0,tspan,p=NullParameters();kwargs...)
: определяет дискретную задачу с указанными функциями. -
DiscreteProblem{isinplace,specialize}(f,u0,tspan,p=NullParameters();kwargs...)
: определяет дискретную задачу с указанными функциями. -
DiscreteProblem{isinplace,specialize}(u0,tspan,p=NullParameters();kwargs...)
: определяет дискретную задачу с отображением тождественности.
isinplace
дополнительно задает, является ли функция функцией на месте или нет. Это определяется автоматически, а не выводится. specialize
дополнительно определяет уровень специализации. Дополнительные сведения см. в разделе об уровнях специализации в документации по SciMLBase. По умолчанию используется AutoSpecialize
.
Дополнительные сведения о параметрах на месте и параметрах специализации см. в документации по ODEFunction.
Параметры являются необязательными, и если они не заданы, будет использоваться одинарный элемент NullParameters()
, который при попытке индексирования несуществующих параметров будет выдавать понятные ошибки. Все дополнительные именованные аргументы передаются в решатели. Например, если в задаче задать обратный вызов (callback
), этот callback
будет добавляться при каждом вызове функции solve.
Сведения о задании якобианов и матриц масс см. на странице о DiffEqFunctions.
Поля
-
f
: функция в отображении. -
u0
: начальное условие. -
tspan
: временной интервал для задачи. -
p
: параметры для задачи. По умолчанию используетсяNullParameters
. -
kwargs
: именованные аргументы, передаваемые в решатели.
Примечание о времени
Обратите внимание, что если dt
и tstops
не заданы, предполагается, что dt=1
и, следовательно, tspan=(0,n)
будет решаться за n
итераций. Если в решателе задан dt
, количество итераций изменится. И если tstops
не пуст, решатель вернется к стандартному поведению методов с фиксированным временным шагом — «шаг до каждого останова».
#
SciMLBase.DiscreteFunction
— Type
DiscreteFunction{iip,F,Ta,S,S2,S3,O} <: AbstractDiscreteFunction{iip,specialize}
Представление дискретной динамической системы f
, определяемое следующим образом:
и все связанные функции, такие как якобиан f
, градиент относительно времени и др. Для всех случаев u0
— это начальное условие, p
— это параметры, а t
— это независимая переменная.
Конструктор
DiscreteFunction{iip,specialize}(f;
analytic = __has_analytic(f) ? f.analytic : nothing,
syms = __has_syms(f) ? f.syms : nothing
indepsym = __has_indepsym(f) ? f.indepsym : nothing,
paramsyms = __has_paramsyms(f) ? f.paramsyms : nothing)
Обратите внимание, что требуется только сама функция f
. Эта функция должна быть задана как f!(du,u,p,t)
или du = f(u,p,t)
. Более подробные сведения об обработке на месте и не на месте см. в разделе об iip
.
Все остальные функции являются необязательными для улучшения или ускорения использования f
. К ним относятся следующие.
-
analytic(u0,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]
в решении.
iip: на месте и не на месте
Дополнительные сведения об этом аргументе см. в документации по ODEFunction.
specialize: управление компиляцией и специализацией
Дополнительные сведения об этом аргументе см. в документации по ODEFunction.
Поля
Поля типа DiscreteFunction напрямую соответствуют именам входных данных.
Тип решения
В результате решения DiscreteProblem
возвращается объект ODESolution
. Дополнительные сведения см. в docstring ODESolution
на странице определения задачи ODE.