\chapter{Revision History}
\section{Version 1.1}
Version 1.0 was released last March. I have used it throughout
the year to write a little language and several other matrix
programs. It has been very stable and run for several hundred
hours on the machines I use. I thought about a few things during
the year that seemed reasonable to add.

This upgrade of YAMP provides several new functions, and
an improvement or two:
\begin{itemize}
        \item an in ram version that works for all but the tiny memory
          model. 

        \item User code for the in-ram and virtual memory model is identical.

        \item Important: I removed the initialization to 0 of virtual matrices, so
          programs written in YAMP 1.0 must be adapted if they use
          the assumption that a matrix starts as a zero matrix. This
          increases the speed considerably.

        \item A copy constructor that allows statements like
          "VMatrix V = Inv(Tran(X)*X);" to work as expected. Version 1.0
          had a problem with this because it did not have a copy
          constructor.

        \item Many new functions: determinant, cholesky
          decomposition, QR decomposition, singular valued
          decomposition, generalized inverse, a nearly fast
          fourier transform (and inverse), vec, vecdiag,
          diag, shape, sum, sum of squares, cumulative
          summation, max, min, and elemetary row and column
          operations.

        \item A make file for constructing a library from YAMP.

        \item SGREP has been removed, since the functions above have
          been provided.

        \item The header virt.h has been documented so that it can be
          used as a quick reference.
\end{itemize}
About the only other thing I can think of needing in a matrix package 
is a graphics object. I'm still working on it and hope to finish
it by this Spring or Summer. This is still one of my after hours
hobby type projects, so I can't promise much. 

\section{Version 1.2}
Version 1.1 was released in December of 1991. It was a bit of
rush job. The new version fixes some of the problems and adds
the graphics object. \footnote{My Christmas present from my wife
was the time to do this over the holiday vacation.} The
improvements include

\begin{itemize}
    \item A graphic object for X-Y plots. This requires Borland
          graphics interface files. 

    \item A 15 to 20 percent speed improvement using a deep-copy
          trick on the stack. The stack now stores references
          to the vectors in virtual matrices instead of copying
          the matrix.

    \item An Index function for generating index matrices.

    \item Important, The virtual matrix copy constructor 
          performs garbage collection by calling cleanstack(). 
          This means functions that use copy constructors 
          should also call Inclevel() before using 
          the copy constructor.

    \item Some bugs were fixed in the string operators '+'. 
          The names in Mexp, Mlog, Mabs, etc were fixed. 
          The make files work now for building a Borland 
          library. I also got sloppy and left out some 
          documentation files. 
\end{itemize}

\section{Version 1.3}
Version 1.3 has some more fixes and new features.

\begin{itemize}
    \item Added a statistical distribution function module.
          It has the 4 main families of continuous distributions
          used in applied statistics. The module also has 
          the inverses.

    \item  Bug Fix: Scalar subtraction, M-a, was corrected. It
           produced a-M since I just cut and pasted the M-a
           routine above it. See Virtram.cpp or virtdsk.cpp 
           for the fix. You should also check for this in any
           earlier versions of YAMP. It was in version 1.0 through 
           version 1.2.
\end{itemize}
 

\section{Version 1.4}
I keep telling myself YAMP is finished, but here is the next version.

\begin{itemize}
  \item Added division of a scalar by a matrix a/M.

  \item Fixed Index so it counts downward correctly

  \item Fixed a memory leak in the disk version copy
          constructor. The hdr in the vdoub constructor
          needed to be purged in the copy constructor, then
          recreated by SetupVectors. This was not a problem
          in the ram version.

  \item Added Microsoft V7.0 compatability to all but the
          graphics module. A new graphics module is being
          developed for MSC.

  \item Minor speed improvements using the define NO\_CHECKING.
          The range check in m(i,j), and Garbage() are skipped
          at compile time if NO\_CHECKING is defined. Garbage() is
          still called, but the checks are not executed. Use
          this option in finished code.
\end{itemize}          

\section{Version 1.5}
\begin{itemize}

   \item Fixed the non-central t distribution. I also modified the 
         logarithms in the distribution function modules. The
         singular error is trapped and the value -HUGE\_VAL is
         returned. This avoids output to standard error, which 
         is a real nuisance in Windows programs.

    \item Improved the accuracy of the singular valued 
          decomposition. It now works on a 10 dimensional
          Hilbert matrix to 4 decimal accuracy. 

\end{itemize}

\section{Version 1.6}
\begin{itemize}

    \item Switched the EGA/VGA background/foreground color to facilitate
          screen grabs into word processors. The background color
          is white and the foreground is black. This works in a
          full screen Windows DOS session when the printscreen button is
          pressed.

    \item Fixed the example programs so they calculate the correlogram
          and periodogram correctly.

    \item Fixed the Writeb output routine in Virtram.cpp. I left out a
          pair of braces that were not needed in Virtdisk.cpp when I
          copied it over.

    \item Added some code that helps reduce the amount of paging 
          required in FFT. It stores all the elements from a 
          memory page that will be needed in the innermost loop,
          rather than paging twice to get the second piece of data.
          This slows down the in-ram model some, but speeds up
          the disk model.

    \item Up-graded the MSC 7.01 in-ram version. If you are using
          version 7 of MSC then HUGE\_PTR must be defined to be
          \_\_huge. If you are using version 7.01 from the Microsoft
          patches, then HUGE\_PTR must be defined to be \_\_far. The
          problem in version 7.0 seems to have been fixed in the 
          patches for the upgrade to 7.01. For this reason, I have
          left HUGE\_PTR to be \_\_far, since it will work in future
          versions.

    \item Experimenting with GNU GCC v1.05 indicates that YAMP is not
          compatable with it. GCC clobbers some registers during
          the destruction of automatic matrices. I cannot fix this
          problem.

 
    \item SafeHypot works in long doubles now. This is a service
          routine for the singular valued decomposition.

\end{itemize}

