File MATRIX2.ZIP from The Programmer’s Corner in
Category Files from Magazines
Improved Matrix OPs from Byte, APR 89.
File Name File Size Zip Size Zip Type
M16.DAT 6001 904 deflated
M16X.DAT 6376 911 deflated
M3.DAT 30 27 deflated
M32.DAT 23778 3709 deflated
M32X.DAT 24520 3715 deflated
M3X.DAT 39 25 deflated
M4.DAT 49 37 deflated
M4X.DAT 61 34 deflated
M8.DAT 217 118 deflated
M8X.DAT 1701 351 deflated
MATRIX2.DOC 4229 1758 deflated
MATRIX2.EXE 24128 15090 deflated
MATRIX2.PAS 10513 2751 deflated

## Contents of the MATRIX2.DOC file

To print this file enter TYPE MATRIX2.DOC > PRN from DOS.

MATRIX2

MATRIX2 is basically a matrix inversion program to which the
equation solutions have been added. It is configured for up to
32 equations.

Rather than using Gaussian elimination (triangularizing the
input matrix), the program iterates a matrix inversion using
Newton's method. This is desribed in .

The significant point is that even though no inverse can be
found for an equation set which includes dependent (or the same)
equations, a solution is found which satisfies the input
equations. (This may be obvious but it surprised me.)

Examples are included on the disk, where they are named mn.dat
where n is an integer. The files mnx.dat have the first equation
repeated, and do not give an invertible matrix. Even so the
program finds a valid solution. Thus if your problem requires
any solution to 3 equations in 4 variables, repeat one of the
three equations, and run the program. I would like to be able to
I suspect, based on the few examples herein, that the program
finds the smallest (vector magnitude?) valid solution.

No proof is offerd (or claimed) that the program always finds a
solution which checks. In fact this is clearly impossible for an
input which includes the same equation with different input
solutions, that is parallel lines. In this case the program
apparently finds solutions which solve the independent equations
and averages the input solutions of the parelles lines.

As a check, the output solution vector is plugged back into the
input equations to see if the input solution vector is correctly
computed.

The program monitors a solution error which is the largest
element in the difference matrix I-M*MI where MI is the computed
inverse of M, and I is the identity matrix. For large (over 8)
matrices which apparently invert, this value is typically on the
order of ten to the minus 14 - 16. For small invertible
matrices, it is 0. For matrices mnx.dat which clearly don't
invert, the error is in the range 0.1 - 0.9. The program
includes a warning when the error is greater than 1e-8. This
should caution to continue the iteration, and, if the solution
has converged, recognize that is is not unique.

The program allows input from the keyboard or a disk file. In
the disk file mode it also records the answer. Use the NUL file
to avoid this output.

The program does 20 iterations plus it continues iterating as
long as the error is decreasing. For all but the m32x.dat this
sufficient for convergence. There is a continue option which
allows additional iterations in blocks of 5 plus the tests for
decreasing error. The number of iterations and the solution
error are monitored on the screen.

The program is compiled in Turbo Pascal v5.0. It uses double
precision (8 byte) variables. My machine has an 8087 numerical
processor, however the code for 8087 emulation should be
included; I just don't have any way to try it. With the 8087 the
32 equation matrix takes about 7 minutes on my IBM PC.

I have included the Pascal source code. Any user is welcome to
use and modify the program except for commercial purposes. I
claim all rights to the program, and I disclaim all
responsiblity for the results of using the program whether or
not it gives correct answers. You use the program at your own
risk. I do sincerely thank you for your interest.

William M. Hutchinson
11470 E. Calle Aurora
Tucson, Az. 85748
602-290-8187

 'The Inversion of Large Matrices', Thomas E. Phipps, BYTE
(magazine), April, 1986.

December 10, 2017