2006-08-14  Brian Gough  <bjg@network-theory.co.uk>

	* balancemat.c: balance a general matrix D^-1 A D for rows and
	columns

2006-04-24  Brian Gough  <bjg@network-theory.co.uk>

	* svdstep.c apply_givens.c householder.c: perform linear
	operations with level-1 blas when compiled with USE_BLAS.
	
2006-02-10  Brian Gough  <bjg@network-theory.co.uk>

	* cholesky.c (quiet_sqrt): added a quiet_sqrt to allow checking
	for positive definiteness without a runtime error

2005-08-22  Brian Gough  <bjg@network-theory.co.uk>

	* svd.c (gsl_linalg_SV_decomp_jacobi): reorganised convergence
	tests to increase robustness in the presence of extended precision
	registers.

2005-06-22  Brian Gough  <bjg@network-theory.co.uk>

	* svd.c (gsl_linalg_SV_decomp_jacobi): increased number of sweeps
	to MAX(5*N,12) and track numerical errors for better termination

2005-02-02  Brian Gough  <bjg@network-theory.co.uk>

	* svd.c (gsl_linalg_SV_decomp_jacobi): changed M<N test to correct
	matrix A instead of Q.

2004-12-23  Brian Gough  <bjg@network-theory.co.uk>

	* qr.c (gsl_linalg_R_svx): added missing function

2004-09-13  Brian Gough  <bjg@network-theory.co.uk>

	* test.c: added tests for LQ, P^TLQ solvers

	* ptlq.c: added support for PA = LQ decompositions

	* lq.c: added support for A = LQ decompositions

2004-05-30  Brian Gough  <bjg@network-theory.co.uk>

	* test.c (test_LU_solve): increase test tolerance to accommodate
	gcc-3.3.3 w/ bounds checking

2004-05-26  Brian Gough  <bjg@network-theory.co.uk>

	* householder.c (gsl_linalg_householder_hm):
	(gsl_linalg_householder_mh):
	(gsl_linalg_householder_hm1): added blas code (but ifdef'd out)

	* test.c (test_SV_decomp_dim): skip NaNs in test
	(test_SV_decomp_mod_dim): skip NaNs in test

2004-04-26  Brian Gough  <bjg@network-theory.co.uk>

	* test.c (test_TDN_solve): increased tolerance for tests
	(test_TDN_cyc_solve): increased tolerance for tests

2004-03-15  Brian Gough  <bjg@network-theory.co.uk>

	* tridiag.c: (gsl_linalg_solve_symm_tridiag):
	(gsl_linalg_solve_tridiag):
	(gsl_linalg_solve_symm_cyc_tridiag):
	(gsl_linalg_solve_cyc_tridiag): use GSL_ERROR macro to report
	errors, make size restrictions tighter (no unused elements allowed
	to be passed in).

2004-03-06  Brian Gough  <bjg@network-theory.co.uk>

	* test.c (test_SV_decomp_mod_dim): added tests for SV_decomp_mod

	* svd.c (gsl_linalg_SV_decomp): handle the case N=1 (SVD of a
	column vector)
	(gsl_linalg_SV_decomp_mod): handle the case N=1 (SVD of a column
	vector)

2004-03-05  Brian Gough  <bjg@network-theory.co.uk>

	* test.c (test_SV_decomp): add tests with inf/nan

	* svd.c (gsl_linalg_SV_decomp): handle nans in block reduction

	* balance.c: handle infinity/nan when scaling input matrix

2003-07-24  Brian Gough  <bjg@network-theory.co.uk>

	* tridiag.c (solve_cyc_tridiag_nonsym): fixed declarations of i so
	they do not shadow each other

2003-05-30  Brian Gough  <bjg@network-theory.co.uk>

	* householder.c (gsl_linalg_householder_hv): converted to use blas
	routines

2003-05-08  Brian Gough  <bjg@network-theory.co.uk>

	* test.c: added tests for QR_QRsolve and QRPT_QRsolve

	* qrpt.c (gsl_linalg_QRPT_QRsolve): fixed dgemv to use CblasTrans
	when computing Q^T b

	* qr.c (gsl_linalg_QR_QRsolve): fixed dgemv to use CblasTrans when
	computing Q^T b

Fri Oct 18 17:46:30 2002  Brian Gough  <bjg@network-theory.co.uk>

	* householdercomplex.c (gsl_linalg_complex_householder_transform):
	return tau = 0 to prevent division by zero for beta_r = 0

Mon Aug 12 20:12:55 2002  Brian Gough  <bjg@network-theory.co.uk>

	* bidiag.c (gsl_linalg_bidiag_unpack_B): fixed to copy
 	superdiagonal and not subdiagonal, as was incorrectly done
 	previously.

Sun Jun 16 11:57:00 2002  Brian Gough  <bjg@network-theory.co.uk>

	* svd.c (gsl_linalg_SV_decomp): keep track of maximum value
 	correctly when sorting singular values

	* test.c (test_SV_decomp): add 3x3 of SVD

	* svdstep.c (chase_out_intermediate_zero): handle case of dk=0
	(chase_out_trailing_zero): handle case of dn=0

Wed Apr 17 20:04:11 2002  Brian Gough  <bjg@network-theory.co.uk>

	* tridiag.c (gsl_linalg_solve_tridiag):
	(gsl_linalg_solve_cyc_tridiag): added tridiagonal solvers for
 	non-symmetric case (David Necas <yeti@physics.muni.cz>)

Mon Apr 15 19:55:40 2002  Brian Gough  <bjg@network-theory.co.uk>

	* tridiag.c (solve_cyc_tridiag): corrected typographical error in
 	Engeln-Mullges Algorithm 4.35, step 1.7 (f_(n-1) should be
 	alpha_(n-1))

Thu Sep 13 12:26:17 2001  Brian Gough  <bjg@network-theory.co.uk>

	* test.c (test_SV_decomp): added brute force testing of 2x2 svd

	* svdstep.c (svd2): fixed bug where singular values in 2x2 svd
 	were not ordered correctly.

Mon Sep 10 22:35:24 2001  Brian Gough  <bjg@network-theory.co.uk>

	* test.c (test_LUc_solve): added a test for complex LU

Tue Sep  4 17:22:58 2001  Brian Gough  <bjg@network-theory.co.uk>

	* luc.c: added LU decomposition for complex matrices

Wed Aug 29 16:34:50 2001  Brian Gough  <bjg@network-theory.co.uk>

	* svd.c (gsl_linalg_SV_decomp_jacobi): make sure all singular
 	vectors are zero, not just first.

	* svdstep.c (svd2): added explicit calculation of 2x2 svd, fixes
 	bug that prevents convergence.

Thu Aug  2 18:19:08 2001  Brian Gough  <bjg@network-theory.co.uk>

	* svdstep.c (trailing_eigenvalue): chose better value of mu when
 	dt=0.

Sun Jul  8 18:03:05 2001  Brian Gough  <bjg@network-theory.co.uk>

	* qrpt.c (gsl_linalg_QRPT_decomp): fix bug where null column
 	caused division by zero in norm-update calculation

Sun Jul  1 22:43:22 2001  Brian Gough  <bjg@network-theory.co.uk>

	* modified to use new-style vector views, affects most
 	functions

Wed Jun 20 13:38:24 2001  Brian Gough  <bjg@network-theory.co.uk>

	* svd.c (gsl_linalg_SV_decomp): added error checking

Tue Jun 19 23:19:49 2001  Brian Gough  <bjg@network-theory.co.uk>

	* svd.c (gsl_linalg_SV_decomp): Golub-Reinsch svd, has more
 	deterministic convergence
	(gsl_linalg_SV_decomp_mod):  Golub-Reinsch with
 	Preconditioning, much more efficient for M>>N

	* balance.c (gsl_linalg_balance_columns): balances (or
 	"equilibrates") the columns of a matrix

Sun Jun 17 21:49:03 2001  Brian Gough  <bjg@network-theory.co.uk>

	* givens.c: split out apply_givens functions into separate file
 	apply_givens.c

Wed Jun 13 23:41:34 2001  Brian Gough  <bjg@network-theory.co.uk>

	* qr.c (gsl_linalg_QR_decomp): simplified reverse loop

	* bidiag.c: bidiagonalisation of a matrix (needed for
 	Golub-Reinsch SVD)

Wed Jun  6 12:36:58 2001  Brian Gough  <bjg@network-theory.co.uk>

	* householdercomplex.c: split out complex functions into a
 	separate file to reduce linking dependencies

	* qrpt.c (gsl_linalg_QRPT_decomp): provide workspace as an
 	argument, to avoid allocating it on each call
	(gsl_linalg_QRPT_decomp2): provide workspace as an argument, to
 	avoid allocating it on each call

	* qr.c (gsl_linalg_QR_decomp): provide workspace as an argument,
 	to avoid allocating it on each call

Thu May 17 17:01:45 2001  Brian Gough  <bjg@network-theory.co.uk>

	* qr.c (gsl_linalg_QR_lssolve): added least squares solver

Sat Apr 28 00:39:53 2001  Brian Gough  <bjg@network-theory.co.uk>

	* qr.c (gsl_linalg_QR_update): fixed QR update to work correctly
 	with rectangular matrices where M > N

Mon Apr 23 10:29:01 2001  Brian Gough  <bjg@network-theory.co.uk>

	* tridiag.c: removed EFAULT test since this should only apply to
 	non-null invalid pointers

Fri Apr 13 20:43:38 2001  Brian Gough  <bjg@network-theory.co.uk>

	* test.c: replaced uses of matmult by dgemm

Sun Oct 22 13:56:30 2000  Brian Gough  <bjg@network-theory.co.uk>

	* householder.c (gsl_linalg_householder_transform): changed calls
 	to gsl_hypot() to hypot() so that the system function is used in
 	preference (the configure script will define hypot to gsl_hypot if
 	hypot is unavailable)

	* svd.c (gsl_linalg_SV_decomp): changed calls to gsl_hypot() to
 	hypot()

Sat Oct 21 15:54:56 2000  Brian Gough  <bjg@network-theory.co.uk>

	* tridiag.c (solve_tridiag): prevent out-of-bounds array access
 	for small N (attempt to access element[N-2] when N is 1).

Tue Sep 19 21:42:13 2000  Brian Gough  <bjg@network-theory.co.uk>

	* qrpt.c (gsl_linalg_QRPT_decomp2): added convenience function to
 	compute q,r unpacked decomposition directly

Wed Aug 16 19:50:35 2000  Brian Gough  <bjg@network-theory.co.uk>

	* svd.c (gsl_linalg_SV_decomp): take more care with singular
 	values, set the associated vectors to zero

Sun Aug 13 16:39:40 2000  Brian Gough  <bjg@network-theory.co.uk>

	* qrpt.c (gsl_linalg_QRPT_decomp): fixed obvious bug in selection
 	of column with max norm

Wed May 31 19:42:59 2000  Brian Gough  <bjg@network-theory.co.uk>

	* test.c (test_QR_update): increased tolerances on results to
 	allow tests to pass with other compilers

Wed May  3 21:19:45 2000  Brian Gough  <bjg@network-theory.co.uk>

	* cholesky.c: added cholesky decomposition/solve from Thomas
 	Walter. Modified for GSL.

Fri Apr 28 17:13:00 2000  Brian Gough  <bjg@network-theory.co.uk>

	* renamed all matrices to use upper case variable names, e.g. A

Thu Apr 27 20:31:46 2000  Brian Gough  <bjg@network-theory.co.uk>

	* test.c: tightened up accuracy of the decomp test

	* test_la.c: renamed to test.c for consistency
	(test_QR_decomp): added the "moler" matrix as a test for SVD

	* svd.c (gsl_linalg_SV_decomp): improved the convergence criterion
 	for rank deficient case.

Wed Apr 26 19:37:46 2000  Brian Gough  <bjg@network-theory.co.uk>

	* renamed rhs -> b, and solution -> x throughout for consistency

Mon Apr 24 17:04:52 2000  Brian Gough  <bjg@network-theory.co.uk>

	* test_la.c (main): added tests for MxN matrices
	
	* test_la.c (main): added tests for SV decomposition and solve.

	* svd.c (gsl_linalg_SV_decomp): made use of vector row/column
 	functions, tidied up the algorithm a bit. Use a standard tolerance
 	of 10*GSL_DBL_EPSILON.
	(gsl_linalg_SV_solve): added a least squares solver

Sun Apr 23 21:18:04 2000  Brian Gough  <bjg@network-theory.co.uk>

	* gsl_linalg.h, svd.c (gsl_linalg_SV_decomp): changed function
 	name to new naming convention

	* qr.c (gsl_linalg_QR_unpack): fixed index ranges for rectangular
 	case when unpacking R

Sat Apr 22 15:05:21 2000  Brian Gough  <bjg@network-theory.co.uk>

	* matrix.c: removed, equivalent functions now in matrix directory

Sat Mar 11 17:36:33 2000  Brian Gough  <bjg@network-theory.co.uk>

	* multiply.c: removed _impl from these functions since all the
 	errors they can return are fatal.

Wed Feb 16 12:03:00 2000  Brian Gough  <bjg@network-theory.co.uk>

	* multiply.c (gsl_la_matmult_mod_impl): fixed error in transposed
 	matrix memory access, expressions should always be of the form
	M->data[i*M->size2 + j] even when i,j are transposed.

	Safer to replace matrix access by gsl_matrix_set and
 	gsl_matrix_get, which is what I have done now. Shouldn't be any
 	cost in the production version of the library where we have
 	inlines and range checking off.

Tue Feb 15 17:46:19 2000  Brian Gough  <bjg@network-theory.co.uk>

	* tridiag.h (solve_cyc_tridiag): fixed typo in header, was
 	solve_cyctridiag, missing _.

	* converted all functions to use gsl_permutation instead of
 	gsl_vector_int

Fri Oct  1 15:51:02 1999  Brian Gough  <bjg@network-theory.co.uk>

	* temporary changes resulting from changes to block/vector/matrix
 	organization

Fri Aug  6 14:42:23 1999  Brian Gough  <bjg@network-theory.co.uk>

	* linalg_simple.c: include <string.h> to declare memcpy

