Revision history for Perl extension Math::Polynomial::Solve.

2.61

     Feb 21 2011
        - %iteration hash was checked in poly_tolerance(). Changed
          to checking %tolerance, which makes much more sense.
     Jan 27 2011
        - README wasn't up to date.
        - Added some more keywords in Build.PL.
        - Documentation changes to grammar, spelling, and L<>s.
2.60
     Dec 15 2010
        - Moved fltcmp() from the test directory to the module, and
          added it to the :utility list. Added a "fltcmp" key to the
          %tolerance list.
        - Changed all of the test files to use the module's fltcmp();
        - More documentation clean-up!
        - Released!
     Dec 14 2010
        - Created and documented poly_tolerance(), letting the user
          set the tolerance value for laguerre().
        - Documentation clean-up.
2.55_4
     Dec 3 2010
        - Function laguerre() now works with a better tolerance value.
        - Added a %tolerance hash for the iterative functions. Currently
          only laguerre() makes use of it, and I may change the way of
          handling later.
        - Fixed poly_iteration() - iteration limits weren't getting
          changed.
        - Checking the t directory, I found four or so test files that
          weren't in the MANIFEST file. Fixed that.
     Nov 30 2010
        - New version of laguerre() now takes multiple x-values.
        - Documented the changes in poly_evaluate().
     Nov 18 2010
        - Function poly_evaluate() can now detect whether it is being passed
          an array of x-values, or a single x-value. Return checks to see if
          an array of y-values is wanted, or a single value.
     Nov 17 2010
        - Add function poly_iteration() to make iteration limits adjustable.
        - Add function laguerre() for use by sturm_bisection_roots().
     Nov 7 2010
        - Add function sturm_bisection_roots(). Not complete yet.
        - De-Fortran'd some loops in hqr_eigen_hessenberg(). Now uses
          the range operator, '..'.
2.55_3
     Oct 22 2010
        - The Sturm functions sturm_sign_minus_inf() and sturm_sign_minus_inf()
          had been documented as exported, but they weren't. They are now.
        - Documentation for the Sturm functions was cut short - either I had
          accidentally chopped it, or I left off writing it and forgot to get
          back to it. Took a stab at completing it.
        - Added function sturm_real_root_range_count().
        - Added test file sturm2.t to the t directory, and to the MANIFEST.
     Oct 19 2010
        - The keyword metadata key isn't an argument to the Module::Build
          constructor, it's part of the meta_merge hash which is an
          argument to the constructor. Fixed that.
        - Document the varsubst option in poly_option().
        - Made the variable substitution method more efficient by
          actually removing primes from the list as they're checked.
          Extended the prime list that gets checked.
     Oct 18 2010
        - Aaaaaaand of course I forgot to put varsubst.t in the MANIFEST.
        - Updated Module::Build on my system. Maybe get keywords in
          META.yml now?
2.55_2
     Oct 18 2010
        - Got the variable substitution code in, and created test file
          varsubst.t. Undocumented for now.
     Oct 15 2010
        - More documentation improvments, as I clear away old
          numeric vs. classical confusion, and add documentation
          for poly_option().
        - Read the latest Module::Build documentation, and decided
          to try the keyword item in Build.PL.
     Oct 12 2010
        - Added division.pl to the eg directory and to the MANIFEST.
        - Was removing leading zeros in poly_nonzero_term_count(),
          which is pretty pointless. Removed those lines of code.
2.55_1
     Oct 12 2010
        - And one more document change: I found a call to set_hessenberg(0)
          where we now want poly_option(hessenberg => 0);
     Oct 8 2010
        - Added rootf.t to test directory and MANIFEST; it tests poly_roots()
          with the option "root_function" set.
        - Changes to the poly_option() function for better
          option handling.
        - Change test files poly0.t and polyfp0.t (which used
          set_hessenberg($value)) to now use
          poly_option(hessenberg => $value) instead.
     Oct 5 2010
        - Documentation change to EXPORT section. Instead of listing
          exported functions, link to the head3 Functions sections,
          which are now organized by tag (see Sep 28 2010).
        - Added the poly_option() function.
     Sep 28 2010
        - Documentation improvement by categorizing the functions by
          tag and improving the Sturm sequence explanation.
2.54
     Sep 7 2010
        - Documentation updates. Time to release the module.
     Sep 2 2010
        - Added an %option variable. Currently its fields are hessenberg,
          varsubs, and roots; hessenberg (which has replaced
          $use_hessenberg) is in use, the other two might not even keep
          their names the same.
        - Let epsilon() function change the calculated machine epsilon
          value. This is probably something you want to do rarely, if at all.
2.53_3
     Aug 31 2010
        - Added early return to poly_sturm_chain() when it's passed a
          constant or a linear equation (yeah, I know, but one still has to
          check).
        - A couple more tests each for sturm0.t and sturm1.t.
        - Finally used (and then fixed) sturm_sign_chain().
        - Expose some more internal functions under the :sturm tag, and
          document them.
2.53_2
     Aug 26 2010
        - Added another cubic test to cubic.t and poly0.t.
     Aug 25 2010
        - CPAN testers found a failing test in sturm0.t for some machines.
          Altered the test to make use of fltcmp(), which I hope will solve
          what I suspect is a precision problem.
        - Made consistent the book references in the Acknowledgements section.
2.53_1
     Aug 23 2010
        - poly_real_roots() becomes poly_real_root_count().
        - Added test files sturm0.t and sturm1.t.
        - Many documentation additions. Of note: the documentation
          notes the FUTURE DEPRECATION of set_hessenberg() and
          get_hessenberg().
        - Set $VERSION to reflect beta condition, particularly
          the (lone) sturm function.
     Aug 14 2010
        - Added poly_real_roots().
     Jul 22 2010
        - Added the functions to create the sign rows, currently named
          sturm_sign_minus_infinity(), sturm_sign_plus_infinity(), and
          sturm_sign_chains().
     Jul 21 2010
        - Added function poly_sturm_chain(). Started a test file for it.
        - Added a test file for the poly_division() function and of course
          made the function available under the :utility tag.
     Jun 24 2010
        - Stefan Petrea suggested adding Sturm's sequence to the module.  After
          looking it up, it seemed like a good idea, so I began by:
        - Added poly_derivative() to the export list and to the :utility tag.
        - Added poly_antiderivative() to the export list and to the :utility
          tag, mostly for completeness's sake, although I may find a legitimate
          use for it.
     Jun 22 2010
        - Added epsilon() to the export list and to the :utility tag. It
          existed in v2.52, I just forgot to add it.
        - Formatting changes to the POD with respect to the functions'
          documentation.

2.52

     Jun 16 2010
        - Added export tags. You can export the analytic functions
          linear_roots(), quadratic_roots(), cubic_roots(), and quartic_roots()
          via the :classical tag; poly_roots(), get_hessenberg(), and
          set_hessenbert() via the :numeric tag; and poly_evaluate() and
          simplified_form() via the :utility tag.
        - Fixed spelling error, mostly in the comments: it's "resolvent" cubic,
          not "resolvant".
        - Documentation upgrade, particularly for poly_roots(), which was
          worded a little funny given the change from the default solving
          method in version 2.50. Added documentation for the new export tags
          and the new functions.
     Jun 15 2010
        - Strunk & White'd the possesive form of Dr. Nickalls's name.
          (I'm not sure how Strunk & White would react to verbing their names.)
          I had randomly dropped the 's' before or after the apostrophe.
        - Opened up the internals a bit by providing a a simplified_form()
          function that removes leading zero coefficients and divides the
          remaining coefficients by the coefficient of the highest power.
     Jun 14 2010
        - Added a poly_evaluate() function to return y values of the
          polynomial at given x values. Partly done for my own testing but
          it's too useful not to provide generally.
2.51
     Jun 1 2010
        - Jean Connelly found a quartic where $g is greater than $epsilon,
          but $g**2 isn't. Since it's the squared value that's used in
          Ferrari's method, we eventually wind up dividing by zero.
          This is a floating point representation sample that slipped
          past my tests (which up to now were all based on integers).
          Changed the check to use $g**2, since that's what we're
          protecting ourselves from anyway.
        - Connelly's case is 0.9216 times an integer coeffecient set. Put
          the integer version in poly0.t, and then created the floating point
          tests in the new file polyfp0.t by taking the poly0.t tests and
          multiplying everything by 0.9216. I'll extend this later.
        - Added Dr. Nickalls's quartic article to the distribution. Both of
          his articles are in the subdirectory "reference".
     Apr 19 2010
        - Bowed to convention and reversed the order of the Change entries.
          (And moved an obviously out-of-place Change entry to its proper
          position).
        - Added Dr. Nickalls's article to the distribution, with his permission.
        - Abandoned backward compatibility with perl version 5.05, which was
          present despite the 5.6 requirement in Build.PL (I was supporting
          the module on a very old server). The module now requires version 5.6,
          which admittedly isn't cutting edge but does allow more modern
          constructs like 'our'.

2.50 Mar 7 2009

2.12 Jan 28 2009

2.11 Feb 19 2007

2.10 Jul 4 2006

2.00 Feb 18 2004

1.99 April 30 2003

1.90 March 17 2003

        Nick Ing-Simmons had been working on a perl binding to the GNU
        Scientific Library that performed, among other things, polynomial
        solving.  He graciously (indeed, FAR beyond the call of duty)
        provided a perl version the Fortran code written by Hiroshi
        Murakami, and gave me permission to use the perl version of the code
        in this module (as Hiroshi Murakami gave permission to Nick Ing-Simmons).
        For further information on his efforts, see Math::GSL::Polynomial.
        Putting in the code resulted in:
        - Some formatting changes.  Sorry, I'm a tab user.
        - Removal of some redundant code.  Math::Polynomial::Solve
          already calculated epsilon, and the wrapper function already
          removed leading zero coefficients.
        - Coefficients to be passed in from higher power to lower,
          rather than the reverse.  This matches current usage in this
          module.
        - Roots to be returned as Complex number objects, rather than paired
          real and imaginary parts.
        - An early return for the really simple case.

1.01

1.00 Wed Feb 14 17:51:04 2001