Changes in v2.13 - Jonathan "Duke" Leto
September 2015
    * Fix bug where as_list() did not work correctly for non-square matrices.
      Reported by Elia Liitiäinen in RT #116968

Changes in v2.12 - Jonathan "Duke" Leto
December 2014
    * Added as_list() function. (Ivan Baidakou (basiliscos))

Changes in v2.11 - Jonathan "Duke" Leto
January 2014
    * Add maximum/minimum functions. (Alberto Simões)
    * Add reshape constructor. (Alberto Simões)

Changes in v2.10 - Jonathan "Duke" Leto
November 2013
    * Fix tests on Windows, thanks to Russell Jenkins <>

Changes in v2.09 - Jonathan "Duke" Leto
November 2011
    * as_latex() now works and is tested properly

Changes in v2.08 - Jonathan "Duke" Leto
April 11 2011
    * Fix t/matlab.t failing on Windows (RT #64629)
    * Applied patch from RT #51669 (POD rendering)
    * Applied patch from RT #61334 (fix croak in new_from_string)
    * Make reference check less strict in _new_from_row_or_cols (requested by MJD)

Changes in v2.06 - leto 
Sun Apr 13 19:57:25 EDT 2008 
    * added submatrix() (exactly the same behavior as sec() from PDL, for 2-D matrices )
        Backstory: I was reading through "Mastering Algorithms with Perl" and
        it says that it is not possible to do this in Math::MatrixReal without 
        iterating through all the elements of the matrix.  Now it is wrong.
    * t/submatrix.t created
    * t/decompose_LR.t created
    * !!!NEED documentation for submatrix()

Changes in v2.05 - leto 
Fri Feb 29 21:58:47 EST 2008 
    * fix accidental use of "our" that broke old (like 5.5) Perl's
      Thanks to for the first FAILed report
    * added $matrix->display_precision($n) to easily change the output 
        to something a bit easier to read 
        $a->display_precision(0) is useful for printing integer matrices nicely
    * NEED print_precision() docs near stringify

    * t/display_precision.t created
    * example/ directory created with some benchmark scripts

Changes in v2.04 - leto 
Sat Feb 23 20:59:08 EST 2008 
    * fixed pod errors
    * $a->length does row+col vectors now
    * converted all tests except ext1.t to Test::More and added some overall Kwalitee 
    * fixed error with doing $string = $matrix . "\nStuff\n";
    * new funcion new_tridiag 
    * $matrix->min and $matrix->max now return the min/max element of a matrix
    * new function new_random added which looks like (with default options shown )

    # returns $n x $m matrix of real numbers between 0 and 10
	new_random($n,$m, { symmetric => 0, tridiag => 0, bounded_by => [0,10], integer => 0 ) 

	new_random($n, %options ) # returns a square matrix

      This has proven to be pretty useful in the unit tests of Math::MatrixReal so I figured 
      others may want an easy way to generate a random matrix of your own flavor

    * t/rand.t created
    * t/tridiag.t created
    * t/stringify.t created
    * t/minimax.t created
    * t/positive.t created
    * t/gsm.t created
    * t/similar.t created

Changes in v2.03 - leto 
Sun Jan 27 13:19:55 EST 2008 
    * now using Module::Build, so Math::MatrixReal should in theory be able to
      compile on systems without make, please test and let me know!
    * new concatenation operator ".", i.e $c = $a . $b concatenates two
      matrices side-by-side
    * t/concat.t created
    * new function assign_row
    * beginning of a test suite overhaul (converting to Test::More )

Changes in v2.02 - leto
Sat Jun 09 12:29:08 EDT 2007 
    * Fixed the overloading for the division operator which did not recognize $a/2, reported
	by Daniel Brooks <>
    * Added support for matrix division notation, so that $a/$b = $a*$b**(-1) when $a and $b are square matrices
    * t/div.t created

Changes in v2.01 - msouth
Fri Aug 19 23:40:24 EDT 2005
    * Changed versioning format to leading zero after the
      dot to make more minor versions possible this time
    * Integration of Math::MatrixReal::Ext1 0.07
        * merged new_from_cols and new_from_rows into one private
          function which is called by wrappers with the old
        * added tests to exercise all of the known failure modes
          in new_from_{rows,cols} calls
    * Fixes for POD
        * added a much needed =over 4 to the start of the POD
        * removed tabs
    * reformatted indentation of the all of the code to 4 space
      indent (from a mixture of tabs, 8 space, 4 space, and 2 space)

Changes in v1.9 - leto
Wed May 15 03:19:34 EST 2002 
	* as_yacas() function added
	* t/yacas.t created
	* Fixed issue with infinity norm and Irix, thanks to 
	  Allen Smith <> and the CPAN testers

Changes in v1.8 -- leto
Sat Mar 23 00:13:48 EST 2002 
	* as_matlab() function added
	* as_scilab() function added
	* t/matlab.t created
	* is_row_vector() function added
	* is_col_vector() function added
	* t/isrowcol.t created
	* norm_p() function added
	* norm_frobenius () function added
	* t/vecnorm.t created

Changes in v1.7 -- leto
Fri Mar 15 13:09:49 EST 2002 
	* each() and each_diag() are now one-based for consistency
	* removed _trace() comments
	* as_latex() function created
	* t/latex.t created
	* t/bool.t created
	* t/periodic.t created
	* t/rank.t created
	* new_from_string() shouldn't care about the case of the scientific E
		notation (pointed out by Jim Bowery <>)
	* t/scinotation.t created
	* is_idempotent() function added
	* is_periodic() function added
	* rank_LR() function added
	* make is_orthogonal return 0 instead of croak when matrix
		is not quadratic

Changes in v1.6 -- leto
Sat Feb 16 09:46:51 EST 2002 
	* is_skew_symmetric() function added
	* fixed logic error is sym_eigenvalues ( didn't notice if not square! )
	* spectral_radius() function added
	* is_binary() function added
	* is_LR() function added
	* t/spectral.t created
	* t/binary.t created
	* t/is_LR.t created
	* t/gramian.t created
	* is_skew_symmetric() tests added to t/symmetric.t
	* is_gramian() function added

Changes in v1.5 -- leto
Sat Jan 12 04:20:48 EST 2002 
	* t/inverse.t test 6 was numerically instable, commented out
		I ran it 10000 times and got values from 1e-2 to 1e-16,
		this caused the test to randomly fail, because it checked
		that the value was less than 1e-10
		I did not notice this problem because my default perl install
	* changed epsilon to be 1e-8 in ( was 1e-10)

Changes in v1.4 -- leto
Jan 10 2002
	* Steffen Beyer gave maintainer-ship to Jonathan Leto
	* exponent() function added
	* trace() function added
	* "**" and "**="  overloaded to exponent()
	* $matrix ** -1 is now a quick way to compute the inverse, if it exists
	* new_from_rows and new_from_cols integrated from Math::MatrixReal::Ext1
	* is_diagonal() function added
	* is_tridiagonal() function added
	* each() function added
	* each_diag() function added
	* put functions used by all the test scripts into instead
		of all of them having copy+paste code
	* t/inverse.t created 
	* t/diag.t created 
	* t/exponent.t created
	* t/trace.t created
	* t/ext1.t created
	* some documentation spelling errors corrected
	* perl operators exp(),sin(),cos() overloaded 
		only works with diagonal matrices for now
	* new_diag() function added
	* is_upper_triangular() function added
	* is_lower_triangular() function added
	* t/triang.t created
	* t/det.t created
	* inverse() function added
	* det() function added
		should be much faster for diagonal and triangular matrices
	* tri_diagonalize() tri_eigenvalues() and now do real tridiag check, as per TODO
	* t/minor.t created
	* t/cofactor.t created
	* t/adjoint.t created
	* t/quadratic.t created
	* norm_sum() function added
	* t/norm.t created
	* check if $rows and $cols are integers in new()
	* t/condition.t created
	* t/product.t created
	* eigenvalues() function added
	* t/eigen_NxN.t - added test for eigenvalues()
	* swap_row() function added
	* swap_col() function added
	* t/swap.t created
	* t/orthogonal.t created
	* is_orthogonal() function added
Version 1.3 included the eigenvalues/eigenvectors computation methods,
added by Rodolphe Ortalo. Some test/bench programs were added also,
especially for these methods.

The documentation of the "new_from_string()" method was also slightly
changed because it had proven to be incomplete and misleading.

Version 1.2 changed the "new()" and "new_from_string()" methods so
that they don't fail anymore if an empty class name is given to them
(instead, "Math::MatrixReal" is used as the default).

Version 1.1 fixed a bug in the "kleene()" method.

Version 1.0 was the initial release.