The recommended method for performance is
IDA from the Sundials.jl package if you are solving problems with
Float64. It's a very well-optimized method, and allows you to have a little bit of control over the linear solver to better tailor it to your problem. A similar algorithm is
daskr. Which one is more efficient is problem-dependent.
If your problem requires special Julia types like arbitrary precision numbers, then
dassl is the method of choice.
Full List of Methods
IDA- This is the IDA method from the Sundials.jl package.
Note that the constructors for the Sundials algorithms take a main argument:
linearsolver- This is the linear solver which is used in the Newton iterations. The choices are:
:Dense- A dense linear solver
:Band- A solver specialized for banded Jacobians. If used, you must set the position of the upper and lower non-zero diagonals via
:Diagonal- This method is specialized for diagonal Jacobians.
BCG- A Biconjugate gradient method.
TFQMR- A TFQMR method.
IDA() # Newton + Dense solver IDA(linear_solver=:Band,jac_upper=3,jac_lower=3) # Banded solver with nonzero diagonals 3 up and 3 down IDA(linear_solver=:BCG) # Biconjugate gradient method
All of the additional options are available. The constructor is:
IDA(;linear_solver=:Dense,jac_upper=0,jac_lower=0,krylov_dim=0, max_order = 5, max_error_test_failures = 7, max_nonlinear_iters = 3, nonlinear_convergence_coefficient = 0.33, nonlinear_convergence_coefficient_ic = 0.0033, max_num_steps_ic = 5, max_num_jacs_ic = 4, max_num_iters_ic = 10, max_num_backs_ic = 100, use_linesearch_ic = true, max_convergence_failures = 10)
See the Sundials manual for details on the additional options.
DASKR.jl is not automatically included by DifferentialEquations.jl. To use this algorithm, you will need to install and use the package:
Pkg.add("DASKR") using DASKR
daskr- This is a wrapper for the well-known DASKR algorithm.
dassl- A native Julia implementation of the DASSL algorithm.