home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / numana01.zip / SRC / TESTS / EIGENTES.MOD < prev    next >
Text File  |  1996-08-16  |  3KB  |  117 lines

  1. MODULE EigenTest;
  2.  
  3.         (********************************************************)
  4.         (*                                                      *)
  5.         (*              Test of Matrices module                 *)
  6.         (*                                                      *)
  7.         (*  Programmer:         P. Moylan                       *)
  8.         (*  Last edited:        16 August 1996                  *)
  9.         (*  Status:             Working                         *)
  10.         (*                                                      *)
  11.         (********************************************************)
  12.  
  13. IMPORT Cx;
  14.  
  15. FROM Mat IMPORT
  16.     (* proc *)  Zero, Unit, Write, Add, Sub, Mul,
  17.                 Random, Eigenvalues;
  18.  
  19. (*
  20. FROM Windows IMPORT
  21.     (* type *)  Window, Colour, FrameType, DividerType,
  22.     (* proc *)  OpenWindow, CloseWindow;
  23. *)
  24.  
  25. FROM MiscM2 IMPORT
  26.     (* proc *)  SelectWindow, WriteString, WriteLn, PressAnyKey;
  27.  
  28. (************************************************************************)
  29.  
  30. CONST NMAX = 10;
  31.  
  32. (************************************************************************)
  33.  
  34. PROCEDURE EigenvalueTest (A: ARRAY OF ARRAY OF LONGREAL;  N: CARDINAL);
  35.  
  36.     (* Calculates and writes the eigenvalues of the leading NxN submatrix of A. *)
  37.  
  38.     VAR W: ARRAY [1..NMAX] OF LONGCOMPLEX;
  39.         j: [1..NMAX];
  40.  
  41.     BEGIN
  42.         WriteString ("Matrix A is");  WriteLn;
  43.         Write (A, N, N, 10);
  44.  
  45.         WriteString ("The eigenvalues of A are");  WriteLn;
  46.         Eigenvalues (A, W, N);
  47.         FOR j := 1 TO N DO
  48.             WriteString ("    ");  Cx.Write (W[j], 10);  WriteLn;
  49.         END (*FOR*);
  50.  
  51.         PressAnyKey;
  52.  
  53.     END EigenvalueTest;
  54.  
  55. (************************************************************************)
  56.  
  57. PROCEDURE Test (A: ARRAY OF ARRAY OF LONGREAL);
  58.  
  59.     (* Eigenvalue test using all of A. *)
  60.  
  61.     BEGIN
  62.         EigenvalueTest (A, HIGH(A[0])+1);
  63.     END Test;
  64.  
  65. (************************************************************************)
  66.  
  67. PROCEDURE RunAllTests;
  68.  
  69.     (* A collection of eigenvalue calculations. *)
  70.  
  71.     TYPE M2 = ARRAY [1..2],[1..2] OF LONGREAL;
  72.          M3 = ARRAY [1..3],[1..3] OF LONGREAL;
  73.  
  74.     VAR A: ARRAY [1..NMAX],[1..NMAX] OF LONGREAL;
  75.         (*j: CARDINAL;*)
  76.  
  77.     BEGIN
  78.         WriteString ("EIGENVALUES OF A SQUARE MATRIX");
  79.         WriteLn;
  80.  
  81.         (* Try a random A matrix. *)
  82.  
  83.         Random (A, 5, 5);
  84.         EigenvalueTest (A, 5);
  85.  
  86.         (* Try unit matrices of various sizes. *)
  87.         (* Skipped - these all passed without trouble. *)
  88.  
  89.         (*
  90.         Unit (A, NMAX);
  91.         FOR j := 1 TO NMAX DO
  92.             EigenvalueTest (A, j);
  93.         END (*FOR*);
  94.         *)
  95.  
  96.         (* A few more judiciously selected matrices. *)
  97.  
  98.         Test (M2{{0.0, 1.0}, {1.0, 0.0}});
  99.         Test (M2{{0.0, 1.0}, {-1.0, 0.0}});
  100.         Test (M2{{0.0, 1.0}, {-2.0, -3.0}});
  101.         Test (M2{{0.0, -2.0}, {1.0, -3.0}});
  102.  
  103.         Test (M3{{0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}, {-6.0, -11.0, -6.0}});
  104.  
  105.         (* Summary: every test so far gives the right answer. *)
  106.  
  107.     END RunAllTests;
  108.  
  109. (************************************************************************)
  110. (*                              MAIN PROGRAM                            *)
  111. (************************************************************************)
  112.  
  113. BEGIN
  114.     RunAllTests;
  115. END EigenTest.
  116.  
  117.