0.9.25 2005-03-26

       - namespace gMatVec replaced by new name GNU_gama

       - source codes located in new directory 'matvec'


0.9.24 2004-08-30

       - introduced dependency using qualified names, variation 1 (g++-3.4)

         see D.Vandervoorde & N.M.Josuttis, C++ Templates, Addison-Wesley 2003:

           // Variation 1:
           template<typename T>
           class DD1 : public Base<T> {
             public:
               void f() { this->basefield = 0; }  // lookup delayed
           };
             
           // Variation 2:
           template<typename T>
           class DD2 : public Base<T> {
             public:
               void f() { Base<T>::basefield = 0; }
           };
           
           // Variation 3:
           template<typename T>
           class DD3 : public Base<T> {
             public:
               using Base<T>::basefield;    // (1) dependent name now in scope
               void f() { basefield = 0; }  // (2) fine
           };


0.9.23 2004-06-21

       - all occurrences of keyword 'class' in template type definitions
         replaced by keyword 'typename'


0.9.22 2003-07-27

       - added missing `typename' keyword in template definitions


0.9.21 2002-11-13

       - in MatVecBase class added functions Abs, Sign (forgotten
         calls to function fabs() replaced by Abs)
        

0.9.20 2002-09-16

       - Added new class BandMat2<> as an alternative to BandMat<>

         In BandMat<> so called `diagonal storage scheme' is
         implemented , ie rectangular array of dim*(band+1)
         elements. In BandMat2<> only nonzero elements of upper
         triangular part are stored by rows. This represents a slower
         access to individual matrix elements but on the other hand
         there is no memory overhead (in GNU GaMa for large full
         covariance matrices such an overhead is not acceptable).

         CurrentlyBandMat2<> does not implement member functions
         invBand(), triDiag() and eigenVal()


0.9.19 2002-07-11

       - Three tests for convergence in svd.h had to be rewritten to
         explicitly use a temporary variable s2:

            <    if ((s1 + ABS(rv1[L])) == s1) goto test_for_convergence;
            ---  
            >    s2 = s1 + ABS(rv1[L]); 
            >    if (s1 == s2) goto test_for_convergence;
                 
            <    if (s1 + (ABS(W[L1])) == s1) break;
            ---  
            >    s2 = s1 + ABS(W[L1]); 
            >    if (s1 == s2) break;
                 
            <    if (s1 + (ABS(f)) == s1) goto test_for_convergence;
            ---  
            >    s2 = s1 + ABS(f); 
            >    if (s1 == s2) goto test_for_convergence;

         Convergence problems occured sometimes with GNU g++ 2.95.2
         and Borland C++ 5.5 (bcc32) compilers (but not with the MS
         VC++ 6.0 compiler).

         Acording to `info gcc' on 68000 and x86 systems this results
         from the fact that the floating point registers hold a few
         more bits of precision than fit in a `double' in memory.
         Compiled code moves values between memory and floating point
         registers at its convenience, and moving them into memory
         truncates them.
     
         This insidious bug was detected thanks to the thorough testing 
         and analysis by Christopher T. Fallen <ctfallen@math.ukans.edu>

       - removed unused functions VecBase::length() and VecBase::length_sq()

0.9.18 2002-04-10

       - Added new class Jacobian. Template class Jacobian computes
         Jacobian matrix for the given argument of a vector
         function. Derivatives are numerically computed from a
         Lagrange polynomial of degree 2*n with equidistant arguments.
     
         For example for degree 4 Lagrange's formula L4(x) goes
         through points y1=f(x-2h), y2=f(x-h), y3=f(x), y4=f(x+h) and
         y5=f(x+2h).  The derivative L'4(x) = 2/24*y1 - 4/6*y2 +
         4/6*y4 - 2/24*y5.

0.9.17 2002-03-19

       - bug in BandMat::cholDec() [ test "if (Tol > b0)..." failed if
         the first element of the matrix was zero; replaced by new test
         "if (Tol >= b0) ..."; Jan Pytel]

0.9.16 2002-02-22

       - added Mat<> / Vec<> iterators

0.9.15 2001-12-20

       - removed a bug in void SymMat::invert() [missing return statement 
         at the end of block for handling dimension 1; Leos Mervart] 
 
0.9.14 2001-10-25

       - removed bugs from TransMat;

0.9.13 2001-05-05

       - list initialisation for Mat<> and Vec<> 

0.9.12 2001-03-24

       GNU General Public Licence
       ##########################

0.9.11 2001-02-30

       - svd.h bug corrected (occasional problems with convergence)

0.9.10 2001-02-25

       - GNU Lesser General Public Licence

0.9.9  2001-01-18

       - corrected bug in VecBase::norm_Linf()
 
0.9.8  2000-08-17

       - explicit use of MemRep::iterator (and const_iterator) --- egcs 2.95.2

       s/VecBase<Float, Exc>::iterator/MemRep<Float, Exc>::iterator/g
       s/SymMat<Float, Exc>::iterator/MemRep<Float, Exc>::iterator/g
       s/TransVec<Float, Exc>::iterator/MemRep<Float, Exc>::iterator/g
       s/TransMat<Float, Exc>::iterator/MemRep<Float, Exc>::iterator/g
       s/Mat<Float, Exc>::iterator/MemRep<Float, Exc>::iterator/g
       s/Vec<Float, Exc>::iterator/MemRep<Float, Exc>::iterator/g

0.9.7  2000-03-24

       - removed implicit values of template arguments in declaration
       of TransMat in mat.h

0.9.6  2000-02-07

       - defined invert() for SymMat 

0.9.5  2000-02-02

       - new header file gmatvec.h for basic common matrix/vector classes
       - header file matsvd.h renamed to svd.h; matgso.h renamed to gso.h
       - header file matbase.h splited into matbase.h, mat.h and transmat.h
       - header file vecbase.h splited into vecbase.h, vec.h and transvec.h

       - added the following functions to gain better compatibility with
       GNU Goose / GALA:

          MatVecBase::operator/=(Float); 
          MatVecBase::set_all(Float);    // renamed from init(Float);
          MatVecBase::set_zero(); 

          VecBase::dot(const VecBase&) const;
          VecBase::length_sq() const;
          VecBase::length()    const;
          VecBase::norm_L1()   const;
          VecBase::norm_L2()   const;
          VecBase::norm_Linf() const;

          MatBase::min_rc() const;
          MatBase::max_rc() const;
          MatBase::set_diagonal(Float d)
          MatBase::set_identity();
          virtual MatBase::transpose();
          virtual MatBase::invert();

          Mat::transpose();       
          Mat::invert();

0.9.4  2000-02-01

       - rewritten function inv(Mat<>&) using SVD
       - added enumeration Singular in inderr.h  

0.9.3  2000-01-22

       number of allowed iterations in diagonalization of bidiagonal
       matrix in SVD raised from 30 to 300 (i.e. to infinity; 30 is
       not enough) 

0.9.2  2000-01-19

       MatVec template library renamed to gMatVec; reason - smeg knows

0.9.1  2000-01-01

       - forgotten built in type `double' in template

0.9.0  2000-01-01

       - new class Exception
       - default templates arguments (Float=double, Exc=Exception)
       - removed underscores from class names

0.8.0  1999-09-24

       in class SVD_ new names q_xx(), q_bb(), q_bx() of functions
       for computing weight coefficients (was cov_??)
        

0.7.3  1999-06-22

       added class GSO_ for solving linear least squares problems with
       possibly rank deficient matrices

0.7.2  1999-06-10

        added new enum value BadRegularization (inderr.h)

        SVD_::min_subset_x()

          added new test if (defect < n_min) ... BadRegularization
          in test if (s == 0) changed ZeroDivision to BadRegularization

        added test bool SVD_::lindep(Index) for linearly dependent columns

0.7.1  1999-05-17

        class Vec_ (vecbase.h): added missing operators

          Vec_& operator*=(Float f)       { mul(f, *this); return *this; }
          Vec_& operator+=(const Vec_ &x) { add(x, *this); return *this; }
          Vec_& operator-=(const Vec_ &x) { sub(x, *this); return *this; }



