************************************************************************
*      This is Version 4.1 of Regularization Tools for Matlab 7.3      *
*----------------------------------------------------------------------*
*                      Per Christian Hansen, IMM                       *
************************************************************************

Revisions in Version 1.1

07/14/92
Fixed a bug in l_curve (beta2 was not computed correct).
Fixed the same bug in gcv and lagrange.
Fixed a bug in mtsvd (beta was never computed).

09/11/92
Fixed a typo in l_curve.
Added more pause statements in regudemo as a courtesy to PC users.

Revisions in Version 1.2

09/17/92
Fixed non-standard use of zeros and ones.
Added more comments to the test problems.

Revisions in Version 1.3

11/05/92
Changed routines cg and pcg, based on an algorithm from Louis's book,
to routines cgls and pcgls based on an algorithm from Bjorck's book.

02/09/93
New subroutine names: changed cg, pcg, and tls to cgls, pcgls, and ttls.

02/26/93
Minor bug in fil_fac corrected.

03/12/93:
Fixed minor bug in plot_lc.

03/16/93:
Added H1 lines to all routines.
Renamed squire to foxgood.
Routine ttls now computes the correct TLS residual. 
Hold state is now restored after all plots. 
Error messages in l_corner and l_curve if Spline Toolbox is not available. 
 
04/21/93: 
Modified gen_form and std_form. 
 
05/26/93: 
Modified input chech in lanc_b, lsqr, and plsqr. 
Changed to sparse storage of L. 
 
06/12/93: 
Fixed bug in gen_form for square L_p. 
 
06/23/93: 
Added ttls filter factors to fil_fac. 
 
10/29/93: 
Added 10 dummy subroutines for the case when Spline Toolbox is not installed. 
 
--------------------------------------------------------------------- 
|      Changes after Regu Tools 2.0 has appeared in NumerAlgo.      | 
--------------------------------------------------------------------- 
 
02/01/94: 
Fixed bug in cgls (s -> s2). 
 
08/03/94: 
Expanded stopping criterion in newton. 
 
08/09/94: 
Revised comment lines in maxent. 
 
10/07/94: 
Removed superfluorus statements in mtsvd. 
 
11/01/94: 
Modified get_l slightly such that the sign of L*x is correct. 
 
02/09/95: 
Revised qr in csd, l_curve and mtsvd to compute "economy size" decomposition. 
Renamed csd to csdecomp (csd is now a function in the Signal Proc. Toolbox). 
Revised gsvd to call csdecomp. 
 
11/08/95: 
Fixed bug in csdecomp when p=1. 
 
03/22/96: 
Changed tsvd and tgsvd to allow k=0. 
 
10/08/96: 
Changed tgsvd to allow a square L. 
 
10/22/96: 
Changed tikhonov to allow a square L. 
 
04/17/97: 
Replaced (..==NaN) with isnan(..) in bsvd. 
Added initialization of U2t in csdecomp. 
 
04/21/97: 
Changed variable name "case" to "example" in deriv2. 
Changed meshdom to meshgrid in spikes, and deleted the flipud command. 
Changed variable xi to eta in picard. 
 
06/30/97: 
Removed function bsvd (obsolete with sparse format of bidiagonal matrices). 
Changed to sparse format of bidiagonal matrix in bidiag. 
Changed to sparse format of bidiagonal matrix in lanc_b. 
Added function regutm. 
 
07/02/97: 
Added reorthogonalization of normal eq. residual vectors to cgls and pcgls. 
Fixed bug in pcgls when computing filter factors. 
 
07/29/97: 
Changed variable name in pinit. 
Modified lsolve, ltsolve, and std_form according to simpler formulas. 
 
09/18/97: 
Added blur test problem. 
Deleted mgs, and included the MGS process in get_l. 
 
11/11/97: 
Modified gen_hh to compensate for Matlab's signum function. 
 
12/22/97: 
Replaced gsvd with cgsvd, and deleted csdecomp. 
Added more output arguments to dsvd, mtsvd, tgsvd, tikhonov, and tsvd. 
Added method = 'ttls' to fil_fac. 
Improved the plots in gcv, lagrange, picard, plot_lc, and quasiopt. 
Added input parameter x_0 to tikhonov. 
 
12/29/97: 
Added call to fmin in gcv, l_curve, and quasiopt. 
Corrected bugs in discrep and lsqi. 
Modified heb_new and newton to work with lambda instead of lambda squared. 
 
02/05/98: 
Added d==0 to get_l. 
 
04/16/98: 
Modified l_corner and spleval to be consistent with Spline Toolbox v. 2.0. 
 
--------------------------------------------------------------------- 
|      Changes after Regu Tools 3.0 has appeared in NumerAlgo.      | 
--------------------------------------------------------------------- 
 
04/30/99: 
Fixed bug in l_corner (nargin==8).

02/21/01, compatibility changes to Matlab 6:
Changed fmin to fminbnd in gcv, l_corner and quasiopt.
Changed gcv, lagrange, lcfun, l_curve and plot_lc to work correct 
   for complex problems. 
Changed the use of exist in l_corner and l_curve. 
Renamed lsqr and plsqr to lsqr_b and plsqr_b, respectively. 
Changed regudemo accordingly.

09/13/01:
Corrected help lines in heat and l_curve.
Removed option reorth=2 in lsqr_b and plsqr_b.
Changed bidiag, gen_hh, lanc_b, lsqr_b and plsqr_b to work correct
   for complex problems.

12/12/02:
Fixed bug in l_corner (for m>n and p<n).

04/14/03:
Changed eta to solution seminorm in dsvd and tikhonov in the
   general-form case.
Changed eta to solution seminorm in tgsvd.
Changed cgsvd, dsvd, tgsvd and tikhonov to allow for an underdetermined
   A matrix.
   
12/16/03:
Fixed a bug i gcv.

10/21/06:
Fixed NaN-problem in ilaplace.

04/19/07:
Fixed a bug in tgsvd.

07/23/07:
Fixed a bug in reorthogonalization procedure in cgls.

09/21/07:
Added new test problems: gravity and tomo.
Added new parameter-choice methods: corner and ncp.
Added new iterative regularization methods: art, mr2, pmr2, prrgmres,
   rrgmres, and splsqr.
Changed l_curve and l_corner to use the new function corner if the
   Spline Toolbox is not available.
Incorporated heb_new and newton as subfunctions in lsqi and discrep.
Removed the function pythag and changed lsqr_b and plsqr_b accordingly.
Changed discrep and lsqi to allow for an underdetermined A matrix.

02/24/08:
Fixed bugs in gcvfun and tgsvd.

03/09/08:
Renamed ilaplace to i_laplace (to avoid name overlap with the
   Symbolic Math Toolbox).
Added output argument W to cgsvd.