pub struct RootSettings {
pub x_tol_abs: f64,
pub x_tol_rel: f64,
pub f_tol: f64,
pub max_iterations: u32,
}Expand description
Convergence tolerances and the iteration cap, shared by both iterative solvers.
A lane is converged when either the bracket (bisection, Brent) or the
step (Newton) has shrunk to x_tol_abs + x_tol_rel * |x|, or the
residual magnitude has fallen to f_tol. An exactly-zero residual always
converges regardless of tolerances.
§Fields and valid ranges
x_tol_abs— absolute abscissa tolerance, in the abscissa’s own units. Must be>= 0. Guards the casex ≈ 0, where a purely relative tolerance can never be met.x_tol_rel— relative abscissa tolerance, dimensionless,>= 0.f_tol— residual tolerance, in the residual’s own units,>= 0. Default0.0, i.e. disabled: with no knowledge of the residual’s scale, a nonzero default would be a guess. Set it when you know what “small enough” means for your function; leaving it at zero simply means the abscissa tolerance decides.max_iterations— hard cap. On reaching it a lane reportsRootStatus::MaxIterationsand its best iterate. Must be>= 1.
A negative tolerance is not rejected; it simply can never be met, and the
lane will report RootStatus::MaxIterations. That is a truthful outcome
rather than a silent success.
§Defaults
x_tol_abs = 1e-12, x_tol_rel = 1e-12, f_tol = 0.0,
max_iterations = 100. One hundred iterations is comfortable for Brent
(typically 6-12) and adequate for bisection over any bracket narrower than
about 2^100 tolerances.
§Example
use outram_foam_basic_lib::math::parallel::RootSettings;
// Struct-update syntax keeps the defaults you did not mean to change.
let s = RootSettings {
max_iterations: 200,
..RootSettings::default()
};
assert_eq!(s.x_tol_rel, 1e-12);
assert_eq!(s.max_iterations, 200);Fields§
§x_tol_abs: f64Absolute abscissa tolerance, in the abscissa’s units. >= 0.
x_tol_rel: f64Relative abscissa tolerance, dimensionless. >= 0.
f_tol: f64Residual tolerance, in the residual’s units. 0.0 disables it.
max_iterations: u32Maximum iterations per lane before reporting
RootStatus::MaxIterations. >= 1.