home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
LANGUAGS
/
MODULA2
/
MTMOD2.LBR
/
MTINVE.MZD
/
MTINVE.MOD
Wrap
Text File
|
2000-06-30
|
2KB
|
78 lines
MODULE MTINVERT;
(* Program to test speed of floating point matrix inversion. *)
(* The program will form a matrix with ones' in every member, *)
(* except the diagonals which will have values of 2. *)
FROM RealInOut IMPORT WriteReal;
FROM InOut
IMPORT WriteLn, WriteString;
CONST
MAX = 20;
TYPE
MATRIX = ARRAY [1..MAX], [1..MAX] OF REAL;
VAR
J, K, L: INTEGER;
DET, PIVOT, TEMPO: REAL;
A: MATRIX;
BEGIN
(* Creating test matrix *)
FOR J := 1 TO MAX DO
FOR K := 1 TO MAX DO
A[J, K] := 1.0
END;
A[J, J] := 2.0;
END;
(* The test below will ensure that the user does not spend *)
(* a lot of time looking at a rather obvious matrix when its *)
(* size is large. *)
WriteString('Starting matrix invertion');
WriteLn;
DET := 1.0;
FOR J := 1 TO MAX DO
PIVOT := A[J, J];
DET := DET*PIVOT;
A[J, J] := 1.0;
FOR K := 1 TO MAX DO
A[J, K] := A[J, K]/PIVOT
END;
FOR K := 1 TO MAX DO
IF K <> J THEN
TEMPO := A[K, J];
A[K, J] := 0.0;
FOR L := 1 TO MAX DO
A[K, L] := A[K, L]-A[J, L]*TEMPO
END;
END
END;
END;
(* End of outer for-loop *)
WriteLn;
WriteString('Determinant = ');
WriteReal(DET,14); WriteLn;
END MTINVERT.