SVD_SNOWFALL
Singular Value Decomposition of Snowfall Data
SVD_SNOWFALL
is a FORTRAN77 library which
demonstrates the use of the Singular Value Decomposition (SVD)
to analyze a set of historical snowfall data,
with plots created by GNUPLOT.
The snowfall data consists of records for the winters of
18901891 to 20142015, of the snowfall in inches, over the months from
October to May, as measured at Michigan Tech.
This data can be regarded as an 8 by 125 matrix A.
Applying the singular value decomposition produces the
factors
A = U * S * V'
and it is the purpose of this library to consider what these
factors indicate about the snowfall data.
The sample problem writes files that can be processed by GNUPLOT
to create plots.
Licensing:
The computer code and data files described and made available on this web page
are distributed under
the GNU LGPL license.
Languages:
SVD_SNOWFALL is available in
a C version and
a C++ version and
a FORTRAN77 version and
a FORTRAN90 version and
a MATLAB version.
Related Data and Programs:
FINGERPRINTS,
a dataset directory which
contains a few images of fingerprints.
GNUPLOT,
FORTRAN77 programs which
illustrate how a program can write data and command files
so that gnuplot can create plots of the program results.
SVD_BASIS,
a FORTRAN90 program which
computes a reduced basis for a collection of data vectors using the SVD.
SVD_DEMO,
a FORTRAN77 program which
demonstrates the singular value decomposition (SVD) for a simple example.
SVD_TRUNCATED,
a FORTRAN90 program which
demonstrates the computation of the reduced or truncated
Singular Value Decomposition (SVD)
of an M by N rectangular matrix, in cases where M < N or N < M.
TIME_SERIES,
a dataset directory which
contains examples of files describing time series.
Reference:

Edward Anderson, Zhaojun Bai, Christian Bischof, Susan Blackford,
James Demmel, Jack Dongarra, Jeremy Du Croz, Anne Greenbaum,
Sven Hammarling, Alan McKenney, Danny Sorensen,
LAPACK User's Guide,
Third Edition,
SIAM, 1999,
ISBN: 0898714478,
LC: QA76.73.F25L36

Gene Golub, Charles VanLoan,
Matrix Computations,
Third Edition,
Johns Hopkins, 1996,
ISBN: 080184513X,
LC: QA188.G65.

David Kahaner, Cleve Moler, Steven Nash,
Numerical Methods and Software,
Prentice Hall, 1989,
ISBN: 0136272584,
LC: TA345.K34.

Lloyd Trefethen, David Bau,
Numerical Linear Algebra,
SIAM, 1997,
ISBN: 0898713617,
LC: QA184.T74.
Source Code:
Examples and Tests:
The snowfall data itself must be read into the program from a file:
The second test function writes "command" and "data" files that can be used
by gnuplot to create plots.
The third test function writes "command" and "data" files that can be used
by gnuplot to create plots.
The fourth test function writes "command" and "data" files that can be used
by gnuplot to create plots of the first 6 U modes, which form a basis
for average snowfall as a function of the month.
The fifth test function writes "command" and "data" files that can be used
by gnuplot to create plots of the first 6 V modes, which form a basis
for total yearly snowfall behavior as a function of the year.

vmode_commands.txt,
a command file.

vmode_data.txt,
a data file.

vmode1.png,
basis vector 1 for total yearly snowfall as a function of year.

vmode2.png,
basis vector 2 for total yearly snowfall as a function of year.

vmode3.png,
basis vector 3 for total yearly snowfall as a function of year.

vmode4.png,
basis vector 4 for total yearly snowfall as a function of year.

vmode5.png,
basis vector 5 for total yearly snowfall as a function of year.

umode6.png,
basis vector 6 for snowfall as a function of month.
List of Routines:

CH_CAP capitalizes a single character.

CH_EQI is a case insensitive comparison of two characters for equality.

CH_TO_DIGIT returns the integer value of a base 10 digit.

DAXPY computes constant times a vector plus a vector.

DDOT forms the dot product of two vectors.

DNRM2 returns the euclidean norm of a vector.

DROT applies a plane rotation.

DROTG constructs a Givens plane rotation.

DSCAL scales a vector by a constant.

DSVDC computes the singular value decomposition of a matrix.

DSWAP interchanges two vectors.

FILE_COLUMN_COUNT counts the number of columns in the first line of a file.

FILE_ROW_COUNT counts the number of row records in a file.

GET_UNIT returns a free FORTRAN unit number.

R8COL_NORMALIZE_LI normalizes an R8COL with the column infinity norm.

R8COL_REVERSE reverses the order of columns in an R8COL.

R8MAT_COPY copies an R8MAT.

R8MAT_DATA_READ reads data from an R8MAT file.

R8MAT_HEADER_READ reads the header from an R8MAT file.

R8MAT_MM multiplies two R8MAT's.

R8MAT_MMT multiplies computes C = A * B' for two R8MAT's.

R8MAT_PRINT prints an R8MAT.

R8MAT_PRINT_SOME prints some of an R8MAT.

R8MAT_SVD_LINPACK gets the SVD of a matrix using a call to LINPACK.

R8ROW_REVERSE reverses the order of the rows of an R8MAT.

R8VEC_CUM0 computes the cumulutive sums of an R8VEC.

R8VEC_PRINT prints an R8VEC.

R8VEC_SUM sums the entries of an R8VEC.

S_LEN_TRIM returns the length of a string to the last nonblank.

S_TO_R8 reads an R8 from a string.

S_TO_R8VEC reads an R8VEC from a string.

S_WORD_COUNT counts the number of "words" in a string.

TIMESTAMP prints out the current YMDHMS date as a timestamp.
You can go up one level to
the FORTRAN77 source codes.
Last revised on 06 May 2013.