Якобианы, градиенты и т. д.
Экосистема 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.