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
Text File  |  2000-06-30  |  2KB  |  78 lines

  1. MODULE MTINVERT; 
  2.  
  3. (* Program to test speed of floating point matrix inversion.  *) 
  4. (* The program will form a matrix with ones' in every member, *) 
  5. (* except the diagonals which will have values of 2.          *) 
  6.  
  7.   FROM RealInOut IMPORT WriteReal;
  8.   FROM InOut
  9.     IMPORT WriteLn, WriteString;
  10.  
  11.  
  12.   CONST 
  13.     MAX = 20; 
  14.  
  15.   TYPE 
  16.     MATRIX = ARRAY [1..MAX], [1..MAX] OF REAL; 
  17.  
  18.   VAR 
  19.     J, K, L: INTEGER; 
  20.     DET, PIVOT, TEMPO: REAL; 
  21.     A: MATRIX; 
  22.  
  23. BEGIN 
  24.  
  25. (* Creating test matrix *) 
  26.  
  27.   FOR J := 1 TO MAX DO 
  28.  
  29.     FOR K := 1 TO MAX DO 
  30.  
  31.       A[J, K] := 1.0
  32.     END; 
  33.     A[J, J] := 2.0; 
  34.  
  35.   END; 
  36.  
  37.   (* The test below will ensure that the user does not spend   *) 
  38.   (* a lot of time looking at a rather obvious matrix when its *) 
  39.   (* size is large.                                            *) 
  40.  
  41.   WriteString('Starting matrix invertion'); 
  42.   WriteLn; 
  43.  
  44.   DET := 1.0; 
  45.   FOR J := 1 TO MAX DO 
  46.  
  47.     PIVOT := A[J, J]; 
  48.     DET := DET*PIVOT; 
  49.     A[J, J] := 1.0; 
  50.     FOR K := 1 TO MAX DO 
  51.  
  52.       A[J, K] := A[J, K]/PIVOT
  53.     END; 
  54.  
  55.     FOR K := 1 TO MAX DO 
  56.  
  57.       IF K <> J THEN 
  58.  
  59.         TEMPO := A[K, J]; 
  60.         A[K, J] := 0.0; 
  61.         FOR L := 1 TO MAX DO 
  62.  
  63.           A[K, L] := A[K, L]-A[J, L]*TEMPO
  64.         END; 
  65.  
  66.       END
  67.     END; 
  68.  
  69.   END; 
  70.   (* End of outer for-loop *) 
  71.  
  72.   WriteLn; 
  73.   WriteString('Determinant = '); 
  74.   WriteReal(DET,14); WriteLn; 
  75.  
  76. END MTINVERT.
  77.  
  78.