### 8 releases

Uses old Rust 2015

0.0.8 | Dec 21, 2022 |
---|---|

0.0.7 | Jun 17, 2021 |

0.0.6 | Dec 22, 2019 |

0.0.5 | Jan 17, 2019 |

0.0.1 | Mar 23, 2015 |

#**17** in Math

**61,137** downloads per month

Used in **62** crates
(23 directly)

**BSD-2-Clause**

155KB

3K
SLoC

Library of well known algorithms for numerical root finding.

## 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

## Usage

`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 polynom
`fn` `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`-``8``f64``)``.``ok``(``)`
`}``,`
`Roots``::`Two`(`roots`)` `=>` `{`
`//` Two roots found, High precision required
`find_root_brent``(`roots`[``0``]``,`roots`[``1``]``,`enormous_function`,``&``mut` 1e`-``15``f64``)``.``ok``(``)`
`}``,`
`Roots``::`One`(`roots`)` `=>` `{`
`//` One root found, Low precision is enough
`find_root_secant``(`roots`[``0``]``-``1``f64``,`roots`[``0``]``+``1``f64``,`enormous_function`,``&``mut` 1e`-``3``f64``)``.``ok``(``)`
`}``,`
`_` `=>` `None``,`
`}`
`}``,`
`_` `=>` `None``,`
`}`
`}`