Дискретные задачи
#
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.