~peterpall/maxima/+git/maxima.code:aberth-root-solver

Last commit made on 2021-05-06
Get this branch:
git clone -b aberth-root-solver https://git.launchpad.net/~peterpall/maxima/+git/maxima.code

Branch merges

Branch information

Name:
aberth-root-solver
Repository:
lp:~peterpall/maxima/+git/maxima.code

Recent commits

9ac4e9e... by Raymond Toy <email address hidden>

Fix typo.

8b60e8c... by Raymond Toy <email address hidden>

Add copyright and license; clean up code

Add a copyright and license to the file.

Indent some comments and add a few others with relevant links.

e096695... by Raymond Toy <email address hidden>
2ea6599... by Raymond Toy <email address hidden>

Add docstring for aberth_roots

The docstring for aberth_roots describes how to use it and the various
options controlling the behavior.

Also moved an extraneous debugging print that isn't needed now.

8bdf705... by Raymond Toy <email address hidden>

Remove debugging print from laguerre-refine

b37c6d4... by Raymond Toy <email address hidden>

Add Laguerre refinement

For each root, use Laguerre's method to refine the roots a little.

This is enabled if aberth_laguerre_refine is true. The maximum number
of Laguerre iterations is aberth_laguerre_iterations.

7664906... by Raymond Toy <email address hidden>

Fix some errors in scale-poly with bfloats.

Need to call bigfloat:truncate instead of cl:truncate.

393dc9d... by Raymond Toy <email address hidden>

Add reference link for scaling algorithm.

bb344dc... by Raymond Toy <email address hidden>

Scale the polynomial roots

Computes a scaling of the roots to reduce the dynamic range among the
roots. This modifies the coefficients of the polynomial used to find
the roots. The scaling is then applied to the result to get the
correct roots.

Really helps with product(x-10^-k,k,1,8). Before, the algorithm
converged immediately with incorrect roots. After, the roots are
accurate to 15 digits except 10^-7 which is accurate to about 10
digits.

3b62aab... by Raymond Toy <email address hidden>

Refine convergence criterion for Rouche algorithm.

Previously, we converged if |f(x)/f'(x)| was less than eps. Change this
to be a relative condition: |f(x)/f'(x)| <= eps*x. This helps when
the roots are very small.