home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / numana01.zip / DEF / MAT.DEF < prev    next >
Text File  |  1996-08-15  |  6KB  |  133 lines

  1. DEFINITION MODULE Mat;
  2.  
  3.         (********************************************************)
  4.         (*                                                      *)
  5.         (*                 Matrix arithmetic                    *)
  6.         (*   We can handle matrices with up to 8191 elements    *)
  7.         (*                                                      *)
  8.         (*  Programmer:         P. Moylan                       *)
  9.         (*  Last edited:        15 August 1995                  *)
  10.         (*  Status:             OK                              *)
  11.         (*                                                      *)
  12.         (*      Portability problem: I've had to use an XDS     *)
  13.         (*      language extension (open arrays) here; I        *)
  14.         (*      haven't yet figured out how to do the job       *)
  15.         (*      in ISO standard Modula-2.                       *)
  16.         (*                                                      *)
  17.         (********************************************************)
  18.  
  19.  
  20. <* m2extensions+ *>
  21.  
  22. TYPE
  23.     EltType = LONGREAL;
  24.     ArrayPtr = POINTER TO ARRAY OF ARRAY OF EltType;
  25.  
  26. (************************************************************************)
  27. (*                   CREATING AND DESTROYING MATRICES                   *)
  28. (************************************************************************)
  29.  
  30. PROCEDURE NewArray (N, M: CARDINAL): ArrayPtr;
  31.  
  32.     (* Creates an NxM matrix. *)
  33.  
  34. PROCEDURE DisposeArray (VAR (*INOUT*) V: ArrayPtr;  N, M: CARDINAL);
  35.  
  36.     (* Deallocates an NxM matrix. *)
  37.  
  38. (************************************************************************)
  39. (*                          ASSIGNMENTS                                 *)
  40. (************************************************************************)
  41.  
  42. PROCEDURE Zero (VAR (*OUT*) M: ARRAY OF ARRAY OF EltType;  r, c: CARDINAL);
  43.  
  44.     (* Creates an r by c matrix with all zero entries. *)
  45.  
  46. PROCEDURE Unit (VAR (*OUT*) M: ARRAY OF ARRAY OF EltType;  N: CARDINAL);
  47.  
  48.     (* Creates an N by N unit matrix. *)
  49.  
  50. PROCEDURE Random (VAR (*OUT*) M: ARRAY OF ARRAY OF EltType;  r, c: CARDINAL);
  51.  
  52.     (* Creates an r by c matrix with random entries. *)
  53.  
  54. PROCEDURE Copy (A: ARRAY OF ARRAY OF EltType;  r, c: CARDINAL;
  55.                          VAR (*OUT*) B: ARRAY OF ARRAY OF EltType);
  56.  
  57.     (* Copies an rxc matrix A to B. *)
  58.  
  59. (************************************************************************)
  60. (*                      THE BASIC MATRIX OPERATIONS                     *)
  61. (************************************************************************)
  62.  
  63. PROCEDURE Add (A, B: ARRAY OF ARRAY OF EltType;  r, c: CARDINAL;
  64.                       VAR (*OUT*) C: ARRAY OF ARRAY OF EltType);
  65.  
  66.     (* Computes C := A + B.  All matrices are rxc. *)
  67.  
  68. PROCEDURE Sub (A, B: ARRAY OF ARRAY OF EltType;  r, c: CARDINAL;
  69.                       VAR (*OUT*) C: ARRAY OF ARRAY OF EltType);
  70.  
  71.     (* Computes C := A - B.  All matrices are rxc.  *)
  72.  
  73. PROCEDURE Mul (A, B: ARRAY OF ARRAY OF EltType;  r, c1, c2: CARDINAL;
  74.                       VAR (*OUT*) C: ARRAY OF ARRAY OF EltType);
  75.  
  76.     (* Computes C := A*B, where A is rxc1 and B is c1xc2. *)
  77.  
  78. PROCEDURE ScalarMul (A: EltType;  B: ARRAY OF ARRAY OF EltType;  r, c: CARDINAL;
  79.                                   VAR (*OUT*) C: ARRAY OF ARRAY OF EltType);
  80.  
  81.     (* Computes C := A*B, where B is rxc. *)
  82.  
  83. (************************************************************************)
  84. (*                      SOLVING LINEAR EQUATIONS                        *)
  85. (************************************************************************)
  86.  
  87. PROCEDURE GaussJ (A, B: ARRAY OF ARRAY OF EltType;
  88.                      VAR (*OUT*) X: ARRAY OF ARRAY OF EltType;
  89.                      N, M: CARDINAL);
  90.  
  91.     (* Solves the equation AX = B by Gauss-Jordan elimination.  In the  *)
  92.     (* present version A must be square and nonsingular.                *)
  93.     (* This approach to solving the equation is not the best available  *)
  94.     (* - see below - but is included here anyway since it is popular.   *)
  95.     (* Dimensions: A is NxN, B is NxM.                                  *)
  96.  
  97. PROCEDURE Solve (A, B: ARRAY OF ARRAY OF EltType;
  98.                     VAR (*OUT*) X: ARRAY OF ARRAY OF EltType;
  99.                     N, M: CARDINAL);
  100.  
  101.     (* Solves the equation AX = B.  In the present version A must be    *)
  102.     (* square and nonsingular.                                          *)
  103.     (* Dimensions: A is NxN, B is NxM.                                  *)
  104.  
  105. PROCEDURE Invert (A: ARRAY OF ARRAY OF EltType;
  106.                      VAR (*OUT*) X: ARRAY OF ARRAY OF EltType;
  107.                      N: CARDINAL);
  108.  
  109.     (* Inverts an NxN nonsingular matrix. *)
  110.  
  111. (************************************************************************)
  112. (*                           EIGENVALUES                                *)
  113. (************************************************************************)
  114.  
  115. PROCEDURE Eigenvalues (A: ARRAY OF ARRAY OF EltType;
  116.                           VAR (*OUT*) W: ARRAY OF LONGCOMPLEX;
  117.                           N: CARDINAL);
  118.  
  119.     (* Finds all the eigenvalues of an NxN matrix.    *)
  120.     (* This procedure does not modify A.              *)
  121.  
  122. (************************************************************************)
  123. (*                          SCREEN OUTPUT                               *)
  124. (************************************************************************)
  125.  
  126. PROCEDURE Write (M: ARRAY OF ARRAY OF EltType;  r, c: CARDINAL;  places: CARDINAL);
  127.  
  128.     (* Writes the rxc matrix M to the screen, where each column *)
  129.     (* occupies a field "places" characters wide.               *)
  130.  
  131. END Mat.
  132.  
  133.