vorot/roots
Library of well known algorithms for numerical root finding.
{ "createdAt": "2015-03-23T22:13:47Z", "defaultBranch": "master", "description": "Library of well known algorithms for numerical root finding.", "fullName": "vorot/roots", "homepage": null, "language": "Rust", "name": "roots", "pushedAt": "2024-10-20T21:02:21Z", "stargazersCount": 56, "topics": [], "updatedAt": "2025-08-29T01:33:55Z", "url": "https://github.com/vorot/roots"}Library of well known algorithms for numerical root finding.
Features
Section titled “Features”- Iterative approximation:
- Newton-Raphson method
- Secant method
- Regula falsi method (with Illinois modification)
- Brent-Dekker method
- Inverse quadratic approximation
- Recursive Sturm’s method
- Solving polynomial equations
- Linear equation (editors’ choice)
- Quadratic equation
- Cubic equation
- Quartic equation
- Eigenvalues method for higher-degree polynomials
extern crate roots;use roots::Roots;use roots::find_roots_cubic;use roots::find_root_brent;use roots::find_root_secant;
// Find the root of a complex function in the area determined by a simpler polynomfn find_solution<F>(enormous_function: F, root_area_polynom:(f64,f64,f64,f64)) -> Option<f64> where F: Fn(f64) -> f64{ // de-structure polynom coefficients match root_area_polynom { (a3,a2,a1,a0) => { // Find root area by solving the polynom match find_roots_cubic(a3,a2,a1,a0) { // Try to find the root by one of iterative methods Roots::Three(roots) => { // Three roots found, normal case find_root_brent(roots[0],roots[2],enormous_function, &mut 1e-8f64).ok() }, Roots::Two(roots) => { // Two roots found, High precision required find_root_brent(roots[0],roots[1],enormous_function,&mut 1e-15f64).ok() }, Roots::One(roots) => { // One root found, Low precision is enough find_root_secant(roots[0]-1f64,roots[0]+1f64,enormous_function,&mut 1e-3f64).ok() }, _ => None, } }, _ => None, }}