Hipparchus provides several solvers to find roots (values where $f(x) = 0$) for different types of functions.
Solver Types
UnivariateSolver: For general univariate real-valued functions (UnivariateFunction).UnivariateDifferentiableSolver: For differentiable univariate real-valued functions (UnivariateDifferentiableFunction).PolynomialSolver: For polynomial functions (PolynomialFunction).
Algorithm Selection Guide
| Name | Function Type | Convergence | Needs Bracketing | Notes |
|---|
BisectionSolver | Univariate | Linear (Guaranteed) | Yes | Slow but extremely robust; use as a fallback. |
BrentSolver | Univariate | Super-linear (Guaranteed) | Yes | Fast and robust; uses Brent-Dekker algorithm. |
BracketingNthOrderBrentSolver | Univariate | Variable order (Guaranteed) | Yes | Recommended for most users. Supports side selection and higher-order interpolation. |
IllinoisSolver | Univariate | Super-linear (Guaranteed) | Yes | Variation of Regula Falsi to prevent stuck endpoints. |
PegasusSolver | Univariate | Super-linear (Guaranteed) | Yes | Variation of Regula Falsi; often faster than Illinois and good for side selection. |
NewtonRaphsonSolver | Differentiable | Quadratic (Non-guaranteed) | No | Requires derivatives. |
SecantSolver | Univariate | Super-linear (Non-guaranteed) | Yes | Does not bracket; may be faster than Brent on well-behaved functions. |
LaguerreSolver | Polynomial | Cubic/Linear | Yes | Specifically for polynomials. |
MullerSolver | Univariate | Quadratic | Yes | Two versions available: one using bracketing and one using modulus. |
// Example: Using the recommended BracketingNthOrderBrentSolver
UnivariateFunction function = ...;
final double relativeAccuracy = 1.0e-12;
final double absoluteAccuracy = 1.0e-8;
final int maxOrder = 5;
UnivariateSolver solver = new BracketingNthOrderBrentSolver(relativeAccuracy, absoluteAccuracy, maxOrder);
double c = solver.solve(100, function, 1.0, 5.0, AllowedSolution.LEFT_SIDE);