spindalis 0.4.6

A bioinformatics-focused library for numerical modeling, optimisation, and simulation written in Rust
Documentation
use spindalis::derivatives::simple_derivative;
use spindalis::polynomials::{eval_simple_polynomial, parse_simple_polynomial};
use spindalis::solvers::{SolveMode, newton_raphson_method};

fn main() {
    let polynomial = "0.5x^3 - 3.9x^2 + 6x - 1.5";
    let guesses = [0.0, 1.0, 2.0];
    let parsed = parse_simple_polynomial(polynomial).unwrap();

    println!("The polynomial being evaluated is {polynomial}");
    for guess in guesses {
        let result = newton_raphson_method(
            &parsed,
            simple_derivative,
            eval_simple_polynomial,
            guess,
            1000,
            1e-5,
            SolveMode::Root,
        );
        match result {
            Ok(x) => println!(
                "Starting at {guess}, root found: ({x:.5}, {:.5})",
                eval_simple_polynomial(x, &parsed).abs()
            ),
            Err(e) => eprintln!("{e:?}"),
        }
    }

    let guesses = [0.0, 5.0];
    for guess in guesses {
        let result = newton_raphson_method(
            &parsed,
            simple_derivative,
            eval_simple_polynomial,
            guess,
            10000,
            1e-5,
            SolveMode::Extrema,
        );
        match result {
            Ok(x) => println!(
                "Starting at {guess}, extrema found: ({x:.5}, {:.5})",
                eval_simple_polynomial(x, &parsed)
            ),
            Err(e) => eprintln!("{e:?}"),
        }
    }
}