Revision history for Perl extension Math::Polynomial::Solve.
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
- Function poly_roots() now uses the QR Hessenberg method by
default. To return to the old version's behavior, use
set_hessenberg(0).
- Update tests and documentation to reflect this.
- Update Dr. Nickalls's e-mail address and his paper's url.
2.12 Jan 28 2009
- Add "requires" item in Build.PL to insist on a Math::Complex
version greater than 1.36. This makes the Complex.txt file
unnecessary since I won't have to explain about the old
bug in the Im() function.
2.11 Feb 19 2007
- Andy Stein sent me cubic.m, an update to Herman Bruyninckx's
matlab script. The script is in the eg directory.
- Change all debugging code to use Smart::Comments.
Replaces not only debug print statements but also the
show_matrix() subroutine.
- Found some "$var = $var op ..." code that is now
"$var op= ..." in hqr_eigen_hessenberg().
- More documentation changes.
- Found a spot where $#coefficients was used where @coefficients
would be less likely to cause an infinite loop.
Sep 5 2008
- Added some quadratic tests.
2.10 Jul 4 2006
- Released.
2.00 Feb 18 2004
- For some idiotic reason, I thought that I had already uploaded the
module to CPAN. Time to rectify that mistake.
- Well, as long as I'm here, reviewed the code again, and found some
inconsistant epsilon comparisons ('<' vs. '<='). Changed them all
to '<'.
- Double-checked the links too. Dr. Nickalls's article keeps moving
around
Apr 3 2006
- Upgraded the test files to use Test::Simple.
- Moved the internal structure of the module directory around
to match the current layout made by the current h2xs.
- Added a Build.PL file.
- Generated a Meta.yml file and a Makefile.PL from Build.PL
- Added new tests to cubic.t to cover catastrophic
cancellation conditions.
- Re-factored an expression in the ($dis < -$epsilon) branch
of cubic_roots(), in preparation for tracking down the
cancellation error. This is the branch that was failing
the tests for certain values of the leading coefficient
(a negative, for one thing). Wouldn't you know, the tests
passed after doing this. I suspect that this will not be the
final chapter in this story.
- Updated the link to www.2dcurves.com in the documentation.
Jun 26 2006
- Added a test to poly1.t (x**5 + x + 1). Nothing special
except that it's solvable in radicals, and there was an
article on Galois theory that missed that.
1.99 April 30 2003
- More documentation changes, including updating links to Dr.
Nickalls's paper.
- Added many, many more tests.
- Added the set_ and get_hessenberg() functions.
- Put some code that was in a text file in one of the helper
perl files.
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
- Web site address of Karl's Calculus Tutor has changed. Document
changed with it.
- Code that popped off leading zero coefficients was flawed.
Negative values could get popped off too since the check was
$coefficients[0] <= $epsilon
instead of
abs($coefficients[0]) <= $epsilon.
- Began writing code for symbolic solutions.
- And then I got the e-mail from Nick Ing-Simmons.
1.00 Wed Feb 14 17:51:04 2001
- original version