Table of Links
Abstract and 1. Introduction
2. Mathematical Description and 2.1. Numerical Algorithms for Nonlinear Equations
2.2. Globalization Strategies
2.3. Sensitivity Analysis
2.4. Matrix Coloring & Sparse Automatic Differentiation
3. Special Capabilities
3.1. Composable Building Blocks
3.2. Smart PolyAlgortihm Defaults
3.3. Non-Allocating Static Algorithms inside GPU Kernels
3.4. Automatic Sparsity Exploitation
3.5. Generalized Jacobian-Free Nonlinear Solvers using Krylov Methods
4. Results and 4.1. Robustness on 23 Test Problems
4.2. Initializing the Doyle-Fuller-Newman (DFN) Battery Model
4.3. Large Ill-Conditioned Nonlinear Brusselator System
5. Conclusion and References
4. Results
We evaluate our solvers on three numerical experiments and benchmark them against other nonlinear equation solvers – NLsolve.jl [20], Sundials [12, 13], and CMINPACK [15] (a modern C/C++ rewrite of MINPACK). We run all our benchmarks on Julia 1.10 on a cluster with 128 × AMD EPYC 7502 32-Core Processor with 128 Julia Threads. The code for our numerical experiments is publicly available on GitHub[12].
4.1. Robustness on 23 Test Problems
23 Test Problems[13] is a suite of 23 small nonlinear systems, each with 1 − 10 variables, that provides a valuable resource for testing and evaluating nonlinear equation solvers. The problems cover various difficulties, making them suitable for various solver testing scenarios. The FORTRAN90 version of this test suite “includes routines defining the initial approximation to the solution of the system, the 𝑁 function values at any point, and the 𝑁 by 𝑁 Jacobian matrix at any point.” We provide a pure Julia version of these problems in NonlinearProblemLibrary.jl[14]. In contrast to the FORTRAN90 version, we don’t implement the Jacobian functions and instead rely on the solvers using Automatic Differentiation or Finite Differencing to compute them.
For this experiment, we benchmark first-order solvers from various packages – Newton Raphson, Trust Region, and Levenberg Marquardt from NonlinearSolve.jl, Modified Powell and Levenberg Marquardt from CMINPACK, Newton Raphson, Trust Region and Anderson from NLsolve.jl, and Modified Newton Raphson from Sundials KINSOL. For NonlinearSolve.jl native solvers, we perform additional analysis with different line search strategies – HagerZhang, MoreThuente, and BackTracking with Newton Raphson; different radius update schemes – NLsolve, NocedalWright, Hei, Yuan, Bastin, and Fan with Trust Region; and Levenberg Marquardt with and without Geodesic Acceleration [57]. Figure 8 shows that our solvers outperform other software packages.
[12] https://github.com/SciML/SciMLBenchmarks.jl/tree/master/benchmarks/NonlinearProblem
[13 https://people.sc.fsu.edu/~jburkardt/f_src/test_nonlin/test_nonlin.html
[14] https://github.com/SciML/DiffEqProblemLibrary.jl/blob/master/lib/ NonlinearProblemLibrary/src/NonlinearProblemLibrary.jl
Authors:
(1) AVIK PAL, CSAIL MIT, Cambridge, MA;
(2) FLEMMING HOLTORF;
(3) AXEL LARSSON;
(4) TORKEL LOMAN;
(5) UTKARSH;
(6) FRANK SCHÄFER;
(7) QINGYU QU;
(8) ALAN EDELMAN;
(9) CHRIS RACKAUCKAS, CSAIL MIT, Cambridge, MA.