Jacobians, Gradients, etc.

The DiffEq ecosystem provides an extensive interface for declaring extra functions associated with the differential equation's data. In traditional libraries there is usually only one option: the Jacobian. However, we allow for a large array of pre-computed functions to speed up the calculations. This is offered via the DiffEqFunction types which can be passed to the problems.

Built-In Jacobian Options

Warning

This subsection on Jacobian options only applies to the Julia-based solvers (OrdinaryDiffEq.jl, StochasticDiffEq.jl, etc.). Wrappers of traditional C/Fortran codes, such as Sundials.jl, always default to finite differencing using the in-solver code.

All applicable stiff differential equation solvers in the Julia ecosystem (OrdinaryDiffEq.jl, StochasticDiffEq.jl, DelayDiffEq.jl, etc.) take the following arguments for handling the automatic Jacobian construction with the following defaults:

  • chunk_size: The chunk size used with ForwardDiff.jl. Defaults to Val{0}() and thus uses the internal ForwardDiff.jl algorithm for the choice.
  • autodiff: Specifies whether to use automatic differentiation via ForwardDiff.jl or finite differencing via FiniteDiff.jl. Defaults to Val{true}() for automatic differentation.
  • standardtag: Specifies whether to use package-specific tags instead of the ForwardDiff default function-specific tags. For more information see this blog post. Defaults to Val{true}().
  • concrete_jac: Specifies whether a Jacobian should be constructed. Defalts to nothing, which means it will be chosen true/false depending on circumstances of the solver, such as whether a Krylov subspace method is used for linsolve.
  • diff_type: The type of differentiation used in FiniteDiff.jl if autodiff=false. Defalts to Val{:forward}, with altnerative choices of Val{:central} and Val{:complex}.

Passing Jacobian Function Definitions

If one wishes to directly define a Jacobian function for use in the solver, then the defined method is passed to the AbstractSciMLFunction type associated with the DEProblem. For example, ODEProblem definitions have a spot for jac in the ODEFunction specification. For more information on how to define Jacobians for the specific problems, see the appropriate problem type page, for example, the ODE problem page