MATMAN
The Matrix Manipulator
MATMAN
is a FORTRAN90 program which
allows an interactive user to define a matrix and carry out
the individual steps of certain algorithms.
The program is intended to do the arithmetic correctly, while forcing
a student to specify the correct sequence of operations to transform
an arbitrary matrix into row echelon form.
MATMAN was developed by Professor Charles Cullen of the University
of Pittsburgh, and John Burkardt, itinerant programmer.
MATMAN features include:
-
Interactivity: students prescribe each row operation;
-
Accuracy: MATMAN does the arithmetic operations;
-
Flexibility: rational, real or decimal arithmetic may be used;
-
Affordability: the price is right (it's freeware);
-
Portability: complete FORTRAN source code available, executes
on IBM (DOS or Windows), Mac (68K or PPC), UNIX, VMS.
-
Repeatability: A transcript file records all work;
-
Improvability: The developers are responsive to user requests.
MATMAN allows the user to:
-
Request a sample problem, or type in a new one;
-
Choose decimal, integer, rational or real arithmetic;
-
Specify row or column operations in a natural form: "R1 <= 3 R1 + R2";
-
Determine if the matrix is in row echelon form;
Licensing:
The computer code and data files described and made available on this web page
are distributed under
the GNU LGPL license.
Languages:
MATMAN is available in
a FORTRAN90 version.
Related Data and Programs:
MATMAN is available in
a FORTRAN77 version and
a FORTRAN90 version.
Source Code:
Examples and Tests:
List of Routines:
-
MAIN is the main program for MATMAN.
-
CH_CAP capitalizes a single character.
-
CH_EQI is a case insensitive comparison of two characters for equality.
-
CH_IS_ALPHA returns TRUE if C is an alphabetic character.
-
CH_IS_DIGIT returns TRUE if a character is a decimal digit.
-
CH_TO_DIGIT returns the value of a base 10 digit.
-
CHANGE allows the user to change an entry in the array.
-
CHRCTF reads an integer or rational fraction from a string.
-
CHRCTG reads an integer, decimal fraction or a ratio from a string.
-
CHRINP requests new input if the LINE buffer is empty.
-
COL_ADD adds a multiple of one column to another.
-
COL_ADD_PARAM gets and checks the column add parameters.
-
COL_APP allows the user to append a column to the matrix.
-
COL_AUTO automatically column reduces the current matrix.
-
COL_DIV divides a column of the matrix by a scale factor.
-
COL_DIV_PARAM gets and checks the column divide parameters.
-
COL_MUL multiplies a column of the matrix by a scale factor.
-
COL_MUL_PARAM gets and checks the column multiply parameters.
-
COL_OP_CHECK checks for commands given in the form of ECO's.
-
COL_SWAP swaps two columns of a matrix.
-
DEC_ADD adds two decimal quantities.
-
DEC_DIGIT_SET allows the user to specify the number of decimal digits.
-
DEC_DIV divides two decimal values.
-
DEC_MUL multiplies two decimals.
-
DEC_PRINT prints out decimal vectors and matrices.
-
DEC_READ reads a decimal, rational or integer, and returns decimal fraction.
-
DEC_ROUND rounds a decimal fraction to a given number of digits.
-
DEC_TO_R8 converts a decimal ITOP * 10^IBOT to an R8.
-
DEC_TO_RAT converts a decimal to a rational representation.
-
DEC_TO_S_LEFT returns a left-justified representation of IVAL * 10**JVAL.
-
DIGIT_TO_CH returns the character representation of a decimal digit.
-
FORM converts from one arithmetic form to another.
-
HELP prints out a brief list of the available commands.
-
I4_DATA stores and retrieves common data items.
-
I4_GCD finds the greatest common divisor of I and J.
-
I4_PRINT prints out integer vectors and matrices.
-
I4_RANDOM returns a random integer in a given range.
-
I4_READ reads an integer from the input buffer.
-
I4_SWAP switches two I4's.
-
I4_TO_S_LEFT converts an I4 to a left-justified string.
-
I4_UNIFORM returns a scaled pseudorandom I4.
-
INIT initializes the data.
-
LA_INP1 accepts the values of the entries of a matrix from the user.
-
LA_OPT checks for row echelon or reduced row echelon form.
-
MAT_APPEND_IDENTITY appends the identity matrix.
-
MAT_PRINT prints out the matrix.
-
MAT_RANDOM sets up a random problem.
-
PROBLEM_SOLVE_RANDOM sets up a random linear system problem.
-
R8_PRINT prints out R8 vectors and matrices.
-
R8_READ "reads" an R8 value from a line of text.
-
R8_SWAP switches two R8's.
-
R8_TO_DEC converts an R8 to a decimal representation.
-
R8_TO_RAT converts a real value to a rational value.
-
R8_TO_S_LEFT represents an R8 using 14 left_justified characters.
-
RAT_ADD adds two rational values.
-
RAT_MUL multiplies two fractions.
-
RAT_PRINT prints out rational vectors or matrices.
-
RAT_READ reads a rational value, expressed as integer, decimal or fraction.
-
RAT_TO_DEC converts a rational value to a decimal value.
-
RAT_TO_R8 converts rational values to R8's.
-
RAT_TO_S_LEFT returns a left-justified representation of IVAL/JVAL.
-
ROW_ADD adds a multiple of one row to another.
-
ROW_ADD_PARAM gets and checks the row add parameters.
-
ROW_AUTO automatically row reduces the current matrix.
-
ROW_DIV divides row IROW of the A matrix by a scale factor.
-
ROW_DIV_PARAM gets and checks the row divide parameters.
-
ROW_MUL multiplies a row of the matrix by a scale factor.
-
ROW_MUL_PARAM gets and checks the row multiply parameters.
-
ROW_OP_CHECK checks for commands given in the form of ERO's.
-
ROW_SWAP swaps two rows of a matrix.
-
S_BLANK_DELETE removes blanks from a string, left justifying the remainder.
-
S_BLANKS_DELETE replaces consecutive blanks by one blank.
-
S_CAP replaces any lowercase letters by uppercase ones in a string.
-
S_CHOP "chops out" a portion of a string, and closes up the hole.
-
S_EQI is a case insensitive comparison of two strings for equality.
-
S_READ extracts a character string from the input buffer.
-
S_TO_DEC reads a number from a string, returning a decimal result.
-
S_TO_I4 reads an I4 from a string.
-
S_TO_R8 reads an R8 from a string.
-
SIZE_SET allows the user to specify the size of a new problem.
-
TIMESTAMP prints the current YMDHMS date as a time stamp.
-
VALUE_READ allows the user to specify one entry in the array.
You can go up one level to
the FORTRAN90 source codes.
Last revised on 26 September 2013.