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

Дискретные задачи

# SciMLBase.DiscreteProblemType

Определяет дискретную задачу. Страница документации: 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.DiscreteFunctionType

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.