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

Якобианы, градиенты и т. д.

Экосистема DiffEq предоставляет обширный интерфейс для объявления дополнительных функций, связанных с данными дифференциального уравнения. В традиционных библиотеках обычно имеется только один вариант: якобиан. Однако для ускорения вычислений существует множество предварительно вычисленных функций. Их можно получить с помощью типов DiffEqFunction, которые могут быть переданы задачам.

Встроенные параметры якобиана

Сведения в данном подразделе, посвященном параметрам якобиана, относятся только к решателям на основе Julia (OrdinaryDiffEq.jl, StochasticDiffEq.jl и др.). Оболочки традиционных кодов C/Fortran, такие как Sundials.jl, всегда по умолчанию используют конечное дифференцирование с кодом в решателе.

Все применяемые в экосистеме Julia решатели жестких дифференциальных уравнений (OrdinaryDiffEq.jl, StochasticDiffEq.jl, DelayDiffEq.jl и др.) принимают следующие аргументы для обработки автоматического построения якобиана со следующими значениями по умолчанию:

  • chunk_size: размер фрагмента, используемый в ForwardDiff.jl. Значением по умолчанию является Val{0}() и, таким образом, для выбора используется внутренний алгоритм ForwardDiff.jl.

  • autodiff: указывает, использовать ли автоматическое дифференцирование с помощью ForwardDiff.jl или конечное дифференцирование с помощью FiniteDiff.jl. Значение по умолчанию — Val{true}() для автоматического дифференцирования.

  • standardtag: указывает, использовать ли теги, специфичные для пакета, вместо тегов, специфичных для функции, используемых в ForwardDiff по умолчанию. Дополнительные сведения см. в этой публикации блога. Значение по умолчанию — Val{true}().

  • concrete_jac: указывает, следует ли строить якобиан. По умолчанию имеет значение nothing, означающее, что будет выбрано true/false в зависимости от обстоятельств решателя, таких как использование метода подпространства Крылова для linsolve.

  • diff_type: тип дифференцирования, используемый в FiniteDiff.jl, если autodiff=false. Значение по умолчанию — Val{:forward}, альтернативы: Val{:central} и Val{:complex}.

Передача определений функции Якоби

Если требуется определить функцию якобиана непосредственно для использования в решателе, определенный метод передается типу AbstractSciMLFunction, связанному с DEProblem. Например, определения ODEProblem имеют место для jac в спецификации ODEFunction. Более подробную информацию об определении якобианов для конкретных задач можно найти на странице соответствующего типа задачи, например на странице задачи ODE.