# Nonlinear Algorithms and Software

Up ] [ Nonlinear ] Linear ] Integration ] Roots ] XBCD_Math ] Parsers ]

A variety of nonlinear solvers can be found on this website. Some are ported from FORTRAN to C, e.g. from MINPACK, and others have been custom written for some special benefit -- generally performance.

## Ports of Polynomial Root Finders

### Jenkins-Traub Method

This port of the Jenkins-Traub method to C++ language can also be downloaded from other pages on this web site. A link is included here for convenience.

### Bairstow's Method

This method for finding real and complex roots of real polynomials is particularly well suited for engineering applications. In those applications, the problem of roots with high multiplicity rarely arise. Since the method involves reduction of the polynomial to quadratic factors, it can be implemented without the need for complex math support. (Complex roots appear in conjugate pairs, and the corresponding quadratic has real coefficients.)A simple DOS application for finding all roots of polynomials with real coefficients based on Bairstow's method is available for download here.

## Original C/C++ Code

### Newton's Method for Nonlinear Systems of Equations

This archive contains nonlinear Newton solvers for equations involving double precision numeric types. The archive includes a set of solvers with different features, a linear solver using Gaussian elimination and a header file. Here is a complex version.

### Nonlinear Least Squares Solver

This archive includes a nonlinear least squares solver used for parameter estimation. It takes a target function (model), a vector of parameter estimates, and returns a vector of parameters giving the best fit in a least squares sense. A complex version is also available.

### Broyden's Method

Broyden's method is a robust alternative to Newton's method for solving systems of nonlinear equations. A C version of Broyden's method is available on this site. The 'zip' archive includes the Broyden solver, a supporting Gaussian elimination linear solver, and a simple test program.

A complex version of Broyden's method has also been created. Complex Broyden solvers appear to be fairly rare, as I have been unable to find any other versions elsewhere. This archive includes the complex Broyden solver, a supporting complex Gaussian elimination linear solver, and a simple test program.

### Polynomial Roots

A separate page devoted to polynomial root finding can be reached from the navigation bar above or here.