1SECTION : 1.2.3              (MAY 1974)                          PAGE 1      
        
        
        
 AUTHOR   : C.G. VAN DER LAAN.        
        
        
 CONTRIBUTORS : H.FIOLET, C.G. VAN DER LAAN.    
        
        
 INSTITUTE: MATHEMATICAL CENTRE.      
        
        
 RECEIVED: 730928.
        
        
 BRIEF DESCRIPTION :        
        
     THIS SECTION CONTAINS THE PROCEDURES COMCOLCST AND COMROWCST.  
     COMCOLCST MULTIPLIES THE COMPLEX COLUMN-VECTOR GIVEN IN ARRAY  
     AR,AI[L:U,J:J] BY XR+I*XI.       
     COMROWCST MULTIPLIES THE COMPLEX ROW-VECTOR GIVEN IN ARRAY     
     AR,AI[I:I,L:U] BY XR+I*XI.       
        
        
 KEYWORDS :       
        
     COMPLEX VECTOR OPERATIONS,       
     MULTIPLICATION.        
        
 SUBSECTION: COMCOLCST.     
        
 CALLING SEQUENCE :         
        
     THE HEADING OF THE PROCEDURE READS:        
     "PROCEDURE" COMCOLCST(L,U,J,AR,AI,XR,XI);  
     "VALUE" L,U,J,XR,XI;"INTEGER" L,U,J;"REAL" XR,XI;    
     "ARRAY" AR,AI;         
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     L,U:       <ARITHMETIC EXPRESSION>;        
                LOWER AND UPPER BOUND OF THE COLUMN VECTOR;         
     J:         <ARITHMETIC EXPRESSION>;        
                COLUMN-INDEX OF THE COLUMN VECTOR;        
     AR,AI:     <ARRAY IDENTIFIER>;   
                "ARRAY" AR,AI[L:U,J:J]
                ENTRY:      
                AR : REAL PART,       
                AI : IMAGINARY PART OF THE COLUMN VECTOR  
                EXIT:       
                THE TRANSFORMED COMPLEX COLUMN; 
     XR,XI:     <ARITHMETIC EXPRESSION>;        
                ENTRY:      
                XR: REAL PART OF THE MULTIPLICATION FACTOR;         
                XI: IMAGINARY PART OF THE MULTIPLICATION FACTOR.    
        
        
 PROCEDURES USED: COMMUL = CP34341.   
1SECTION : 1.2.3              (DECEMBER 1975)                     PAGE 2      
        
        
        
 RUNNING TIME: ROUGHLY PROPORTIONAL TO (U-L+1). 
        
        
 LANGUAGE: ALGOL 60.        
        
        
 SUBSECTION: COMROWCST.     
        
        
 CALLING SEQUENCE :         
        
     THE HEADING OF THE PROCEDURE READS:        
     "PROCEDURE" COMROWCST(L, U, I, AR, AI, XR, XI);      
     "VALUE" L, U, I, XR, XI; "INTEGER" L, U, I; "REAL" XR, XI;     
     "ARRAY" AR, AI;        
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     L,U:       <ARITHMETIC EXPRESSION>;        
                LOWER AND UPPER BOUND OF THE ROW VECTOR;  
     I:         <ARITHMETIC EXPRESSION>;        
                ROW-INDEX OF THE ROW VECTOR;    
     AR,AI:     <ARRAY IDENTIFIER>;   
                "ARRAY"AR,AI[I:I,L:U];
                ENTRY:      
                AR : REAL PART,       
                AI : IMAGINARY PART OF THE ROW VECTOR     
                EXIT:       
                THE TRANSFORMED COMPLEX ROW;    
     XR,XI:     <ARITHMETIC EXPRESSION>;        
                XR: REAL PART OF THE MULTIPLICATION FACTOR;         
                XI: IMAGINARY PART OF THE MULTIPLICATION FACTOR.    
        
        
 PROCEDURES USED: COMMUL = CP34341.   
        
        
 RUNNING TIME: ROUGHLY PROPORTIONAL TO (U-L).   
        
        
 LANGUAGE: ALGOL 60.        
1SECTION : 1.2.3              (MAY 1974)                          PAGE 3      
        
        
        
 SOURCE TEXT(S) : 
0"CODE" 34352;    
     "PROCEDURE" COMCOLCST(L,U,J,AR,AI,XR,XI);  
     "VALUE" L,U,J,XR,XI;"INTEGER" L,U,J;"REAL" XR,XI;    
     "ARRAY" AR,AI;         
     "BEGIN"      
     "PROCEDURE" COMMUL(AR,AI,BR,BI,RR,RI);"CODE" 34341;  
     "FOR" L:=L "STEP" 1 "UNTIL" U "DO"         
     COMMUL(AR[L,J],AI[L,J],XR,XI,AR[L,J],AI[L,J]);       
     "END" COMCOLCST;       
         "EOP"    
0"CODE" 34353;    
     "PROCEDURE" COMROWCST(L, U, I, AR, AI, XR, XI);      
     "VALUE" L, U, I, XR, XI; "INTEGER" L, U, I; "REAL" XR, XI;     
     "ARRAY" AR, AI;        
     "BEGIN"      
         "PROCEDURE" COMMUL(AR,AI,BR,BI,RR,RI);"CODE" 34341;        
     "FOR" L:= L "STEP" 1 "UNTIL" U "DO" COMMUL(AR[I,L], AI[I,L], XR,         
     XI, AR[I,L], AI[I,L]); 
     "END" COMROWCST;       
         "EOP"    
 
1SECTION : 1.2.4              (MAY 1974)                          PAGE 1
 
 
 
 AUTHOR   : C.G. VAN DER LAAN.
 
 
 CONTRIBUTORS : H.FIOLET, C.G. VAN DER LAAN.
 
 
 INSTITUTE: MATHEMATICAL CENTRE.
 
 
 RECEIVED : 731016.
 
 
 BRIEF DESCRIPTION:
 
     THIS SECTION CONTAINS THREE PROCEDURES:
 
     COMMATVEC CALCULATES THE SCALAR PRODUCT OF A COMPLEX ROWVECTOR
     GIVEN IN ARRAY AR,AI[I:I,L:U] AND THE COMPLEX VECTOR GIVEN IN
     ARRAY BR,BI[L:U].
     HSHCOMCOL TRANSFORMS A COMPLEX VECTOR INTO A VECTOR
     PROPORTIONAL TO A UNIT VECTOR;
     HSHCOMPRD PREMULTIPLIES A COMPLEX MATRIX WITH A COMPLEX
     HOUSEHOLDER MATRIX.
     HSHCOMCOL AND HSHCOMPRD ARE AUXILIARY PROCEDURES FOR PREMULTIPLYING
     A COMPLEX MATRIX OR VECTOR WITH A COMPLEX HOUSEHOLDER MATRIX;
 
 
 KEYWORDS:
 
     COMPLEX SCALAR PRODUCTS.
     HOUSEHOLDER TRANSFORMATION
 
 
 SUBSECTION: COMMATVEC.
 
 
 CALLING SEQUENCE:
 
     THE HEADING OF THE PROCEDURE READS:
     "PROCEDURE" COMMATVEC(L, U, I, AR, AI, BR, BI, RR, RI);
     "VALUE" L, U, I; "INTEGER" L, U, I; "REAL" RR, RI;
     "ARRAY" AR, AI, BR, BI;
 
     THE MEANING OF THE FORMAL PARAMETERS IS:
     L,U :   <ARITHMETIC EXPRESSION>;
             LOWER AND UPPER BOUND OF THE VECTORS;
     I :     <ARITHMETIC EXPRESSION>;
             ROW-INDEX OF THE  ROW VECTORS AR AND AI;
     AR,AI:  <ARRAY IDENTIFIER>;
             "ARRAY" AR,AI[I:I,L:U];
             ENTRY:
             AR: REAL PART AND
             AI: IMAGINARY PART OF THE MATRIX;
1SECTION : 1.2.4              (MAY 1974)                          PAGE 2
 
 
 
     BR,BI : <ARRAY IDENTIFIER>;
             "ARRAY" BR,BI[L:U];
             ENTRY:
             BR: REAL PART AND
             BI: IMAGINARY PART OF THE VECTOR;
     RR,RI:  <VARIABLE>;
             EXIT:
             RR: THE REAL PART AND
             RI: THE IMAGINARY PART OF THE SCALAR PRODUCT.
 
 
 PROCEDURES USED:MATVEC=CP34011.
 
 
 RUNNING TIME: PROPORTIONAL TO U-L.
 
 
 LANGUAGE: ALGOL 60.
 
 
 SUBSECTION: HSHCOMCOL.
 
 CALLING SEQUENCE:
 
     THE HEADING OF THE PROCEDURE READS:
     "BOOLEAN" "PROCEDURE" HSHCOMCOL(L, U, J, AR, AI, TOL, K, C, S, T);
     "VALUE" L, U, J, TOL; "INTEGER" L, U, J; "REAL" TOL, K, C, S, T;
     "ARRAY" AR, AI;
 
     HSHCOMCOL DELIVERS THE FOLLOWING BOOLEAN VALUE:
     IF AR[L+1,J]**2+AI[L+1,J]**2+...+AR[U,J]**2+AI[U,J]**2>TOL THEN
     A TRANSFORMATION IS PERFORMED AND HSHCOMCOL:="TRUE",OTHERWISE
     HSHCOMCOL:="FALSE" AND THE VECTOR TO BE TRANSFORMED IS CONSIDERED
     TO BE PROPORTIONAL TO THE DESIRED UNIT VECTOR AND NO
     TRANSFORMATION IS PERFORMED.
 
     THE MEANING OF THE FORMAL PARAMETERS IS:
     L,U,J:  <ARITHMETIC EXPRESSION>;
             THE COMPLEX VECTOR  TO BE TRANSFORMED, MUST BE GIVEN IN
             THE J-TH COLUMN FROM ROW L UNTIL ROW U OF A COMPLEX
             MATRIX;
     AR,AI:  <ARRAY IDENTIIER>;
             "ARRAY" AR,AI[L:U,J:J];
             ENTRY:
             THE REAL PART AND THE IMAGINARY PART OF THE VECTOR TO BE
             TRANSFORMED MUST BE GIVEN IN THE ARRAYS AR AND AI,
             RESPECTIVELY;
             EXIT:
             THE REAL PART AND THE IMAGINARY PART OF THE VECTOR U,
             OF THE HOUSEHOLDER MATRIX I-UU"/T (WHERE " DENOTES
             CONJUGATING AND TRANSPOSING)ARE DELIVERED IN THE ARRAYS
             AR AND AI,RESPECTIVELY,PROVIDED A TRANSFORMATION IS
             PERFORMED.IF NO TRANSFORMATION IS PERFORMED THE ARRAYS
             AR AND AI ARE UNALTERED;
1SECTION : 1.2.4              (DECEMBER 1979)                          PAGE 3
 
 
 
     TOL:    <ARITHMETIC EXPRESSION>;
             ENTRY: A TOLERANCE;
                (E.G. THE SQUARE OF THE MACHINE PRECISION TIMES A NORM
                 OF THE MATRIX IN CONSIDERATION);
     T:      <ARITHMETIC EXPRESSION>;
             EXIT:
             INFORMATION CONCERNING THE TRANSFORMATION,I.E. THE SCALAR
             T OF THE HOUSEHOLDER MATRIX ,PROVIDED A TRANSFORMATION IS
             PERFORMED.OTHERWISE,T:=-1;
     K,C,S:  <VARIABLE>;
             EXIT:
             THE MODULUS , COSINE AND SINE OF THE ARGUMENT OF THE
             FIRST ELEMENT OF THE TRANSFORMED VECTOR ARE DELIVERED IN
             K,C AND S,RESPECTIVELY,PROVIDED A TRANSFORMATION IS
             PERFORMED.OTHERWISE THE MODULUS,COSINE AND SINE OF THE
             ARGUMENT OF THE COMPLEX NUMBER AR[L,J]+AI[L,J]*I ARE
             DELIVERED.
 
 PROCEDURES USED:
 
     CARPOL=CP34344,
     TAMMAT=CP34014.
 
 
 RUNNING TIME: PROPORTIONAL TO U-L.
 
 
 METHOD AND PERFORMANCE:
 
     SEE WILKINSON(1965,P.49,50).
 
 
 LANGUAGE: ALGOL 60.
 
 
1SECTION : 1.2.4              (DECEMBER 1975)                     PAGE 4
 
 
 
 SUBSECTION: HSHCOMPRD.
 
 
 CALLING SEQUENCE:
 
     THE HEADING OF THE PROCEDURE READS:
     "PROCEDURE" HSHCOMPRD(I, II, L, U, J, AR, AI, BR, BI, T);
     "VALUE" I, II, L, U, J, T; "INTEGER" I, II, L, U, J; "REAL" T;
     "ARRAY" AR, AI, BR, BI;
 
     THE MEANING OF THE FORMAL PARAMETERS IS:
     I,II,L,U:   <ARITHMETIC EXPRESSION>;
                 ENTRY:
                 THE COMPLEX MATRIX TO BE PREMULTIPLIED, MUST BE GIVEN
                 IN THE L-TH TO    U-TH COLUMN FROM ROW I TO    ROW II
                 OF A COMPLEX MATRIX;
     J:          <ARITHMETIC EXPRESSION>;
                 ENTRY:
                 THE COMPLEX VECTOR V OF THE HOUSEHOLDER MATRIX
                 I-VV"/T,WHERE " DENOTES TRANSPOSING AND CONJUGATING,
                 MUST BE GIVEN IN THE J-TH COLUMN FROM ROW I TO    ROW
                 II OF A COMPLEX MATRIX GIVEN IN (BR,BI);
     AR,AI:      <ARRAY IDENTIFIER>;
                 "ARRAY" AR,AI[I:II,L:U];
                 ENTRY:
                 THE REAL PART AND THE IMAGINARY PART OF THE MATRIX TO
                 BE PREMULTIPLIED,MUST BE GIVEN IN THE ARRAYS AR AND
                 AI,RESPECTIVELY;
                 EXIT:
                 THE REAL PART AND THE IMAGINARY PART OF THE
                 RESULTING MATRIX ARE DELIVERED IN THE ARRAYS AR AND
                 AI,RESPECTIVELY;
     BR,BI:      <ARRAY IDENTIFIER>;
                 "ARRAY" BR,BI[I:II,J:J];
                 ENTRY:
                 THE REAL PART AND THE IMAGINARY PART OF THE COMPLEX
                 VECTOR V OF THE HOUSEHOLDER MATRIX MUST BE GIVEN IN
                 THE ARRAYS BR AND BI,RESPECTIVELY;
                 (E.G. AS DELIVERED BY HSHCOMCOL);
     T:          <ARITHMETIC EXPRESSION>;
                 ENTRY:
                 THE SCALAR T OF THE HOUSEHOLDER MATRIX;
                 (E.G. AS DELIVERED BY HSHCOMCOL);
 
 
1SECTION : 1.2.4              (MAY 1974)                          PAGE 5
 
 
 
 PROCEDURES USED:
 
     TAMMAT   =CP34014,
     ELMCOMCOL=CP34377.
 
 
 RUNNING TIME: PROPORTIONAL TO (U-L)*(II-I).
 
 
 LANGUAGE: ALGOL 60.
 
 
 REFERENCE:
 
     WILKINSON,J.H(1965):
     THE ALGEBRAIC EIGENVALUE PROBLEM,
     CLARENDON PRESS,OXFORD.
 
 
 EXAMPLE OF USE:
 
    AS A FORMAL TEST OF THE PROCEDURES HSHCOMCOL AND HSHCOMPRD THE
    FOLLOWING MATRIX:
      3   4*I
      4*I 5
    IS TRANSFORMED INTO UPPER TRIANGULAR FORM.
 
 "BEGIN""INTEGER"I;"REAL"K,C,S,T;
    "ARRAY"AR,AI[1:2,1:2];
    "BOOLEAN""PROCEDURE" HSHCOMCOL(L,U,J,AR,AI,TOL,K,C,S,T);"CODE"34355;
    "PROCEDURE"HSHCOMPRD(I,II,L,U,J,AR,AI,BR,BI,T);"CODE"34356;
    AR[1,1]:=3;AR[1,2]:=AR[2,1]:=0;AR[2,2]:=5;
    AI[1,1]:=0;AI[1,2]:=AI[2,1]:=4;AI[2,2]:=0;
    "IF"HSHCOMCOL(1,2,1,AR,AI,("-14*5)**2,K,C,S,T)"THEN"
    HSHCOMPRD(1,2,2,2,1,AR,AI,AR,AI,T);
    OUTPUT(61,"(""("AFTER USE HSHCOMCOL,HSHCOMPRD:")",/,
     2(2(-D.D,+D.D,"("*I")",BB),/)")",
     AR[1,1],AI[1,1],AR[1,2],AI[1,2],AR[2,1],AI[2,1],AR[2,2],AI[2,2]);
    OUTPUT(61,"(""("K,   C,   S,   T,")",/,3(-D.DB),-DD.D,/,")",K,C,S,
     T);
 "END"
 
 OUTPUT:
 AFTER USE HSHCOMCOL,HSHCOMPRD:
  8.0+0.0*I   0.0+1.6*I
  0.0+4.0*I   6.2+0.0*I
 K,   C,   S,   T,
  5.0 -1.0  0.0  40.0
 
 
1SECTION : 1.2.4              (MAY 1974)                          PAGE 6
 
 
 
 SOURCE TEXT(S) :
0"CODE" 34354;
     "PROCEDURE" COMMATVEC(L, U, I, AR, AI, BR, BI, RR, RI);
     "VALUE" L, U, I; "INTEGER" L, U, I; "REAL" RR, RI;
     "ARRAY" AR, AI, BR, BI;
     "BEGIN" "REAL" "PROCEDURE" MATVEC(L,U,I,A,B);"CODE" 34011;
         "REAL" MV;
         MV:= MATVEC(L, U, I, AR, BR) - MATVEC(L, U, I, AI, BI);
         RI:= MATVEC(L, U, I, AI, BR) + MATVEC(L, U, I, AR, BI);
         RR:=MV
     "END" COMMATVEC;
         "EOP"
0"CODE" 34355;
     "BOOLEAN" "PROCEDURE" HSHCOMCOL(L, U, J, AR, AI, TOL, K, C, S, T);
     "VALUE" L, U, J, TOL; "INTEGER" L, U, J; "REAL" TOL, K, C, S, T;
     "ARRAY" AR, AI;
     "BEGIN" "REAL" VR, DEL, MOD, H, ARLJ, AILJ;
         "PROCEDURE" CARPOL(AR,AI,R,C,S);"CODE" 34344;
         "REAL" "PROCEDURE" TAMMAT(L,U,I,J,A,B);"CODE" 34014;
         VR:= TAMMAT(L + 1, U, J, J, AR, AR) + TAMMAT(L + 1, U,
         J, J, AI, AI); ARLJ:= AR[L,J]; AILJ:= AI[L,J];
         CARPOL(ARLJ, AILJ, MOD, C, S); "IF" VR > TOL "THEN"
         "BEGIN" VR:= VR + ARLJ ** 2 + AILJ ** 2; H:= K:= SQRT(VR);
             T:= VR + MOD * H;
             "IF" ARLJ = 0 "AND" AILJ = 0 "THEN" AR[L,J]:= H "ELSE"
             "BEGIN" AR[L,J]:= ARLJ + C * K; AI[L,J]:= AILJ + S * K;
                 S:= - S
             "END";
             C:= - C; HSHCOMCOL:= "TRUE"
         "END"
         "ELSE"
         "BEGIN" HSHCOMCOL:= "FALSE"; K:= MOD; T:= - 1 "END"
     "END" HSHCOMCOL;
         "EOP"
0"CODE" 34356;
     "PROCEDURE" HSHCOMPRD(I, II, L, U, J, AR, AI, BR, BI, T);
     "VALUE" I, II, L, U, J, T; "INTEGER" I, II, L, U, J; "REAL" T;
     "ARRAY" AR, AI, BR, BI;
     "BEGIN"
         "PROCEDURE" ELMCOMCOL(L,U,I,J,AR,AI,BR,BI,XR,XI);"CODE" 34377;
         "REAL" "PROCEDURE" TAMMAT(L,U,I,J,A,B);"CODE" 34014;
     "FOR" L:= L "STEP" 1 "UNTIL" U "DO" ELMCOMCOL(I, II, L, J, AR, AI,
     BR, BI, ( - TAMMAT(I, II, J, L, BR, AR) - TAMMAT(I, II, J,
     L, BI, AI)) / T, (TAMMAT(I, II, J, L, BI, AR) - TAMMAT(I,
     II, J, L, BR, AI)) / T);
     "END" HSHCOMPRD;
         "EOP"
1SECTION : 1.2.5              (MAY 1974)                          PAGE 1
 
 
 
 AUTHOR   : C.G. VAN DER LAAN.
 
 
 CONTRIBUTORS : H.FIOLET , C.G. VAN DER LAAN.
 
 
 INSTITUTE: MATHEMATICAL CENTRE.
 
 
 RECEIVED : 730813.
 
 
 BRIEF DESCRIPTION :
 
     THIS  SECTION  CONTAINS THE PROCEDURES ELMCOMVECCOL, ELMCOMCOL  AND
     ELMCOMROWVEC.
     ELMCOMVECCOL  ADDS  XR+I*XI  TIMES THE COMPLEX  COLUMN VECTOR GIVEN
     IN  ARRAY BR,BI[L:U,J:J]  TO  THE  COMPLEX VECTOR  GIVEN  IN  ARRAY
     AR,AI[L:U].
     ELMCOMCOL ADDS  XR+I*XI  TIMES THE  COMPLEX COLUMN VECTOR  GIVEN IN
     ARRAY  BR,BI[L:U,J:J]  TO THE COMPLEX COLUMN VECTOR GIVEN IN  ARRAY
     AR,AI[L:U,I:I].
     ELMCOMROWVEC ADDS  XR+I*XI  TIMES THE COMPLEX VECTOR GIVEN IN ARRAY
     BR,BI[L:U] TO THE COMPLEX ROW VECTOR GIVEN IN ARRAY AR,AI[I:I,L:U].
 
 
 KEYWORDS :
 
     COMPLEX VECTOR OPERATIONS ,
     ELIMINATION.
 
 
 SUBSECTION : ELMCOMVECCOL.
 
 
 CALLING SEQUENCE :
 
     THE HEADING OF THE PROCEDURE READS :
     "PROCEDURE" ELMCOMVECCOL(L,U,J,AR,AI,BR,BI,XR,XI);
     "VALUE" L,U,J,XR,XI;
     "INTEGER" L,U,J;"REAL" XR,XI;"ARRAY" AR,AI,BR,BI;
 
     THE MEANING OF THE FORMAL PARAMETERS IS :
     L,U:       <ARITHMETIC EXPRESSION>;
                LOWER AND UPPER BOUND OF THE VECTORS;
     J:         <ARITHMETIC EXPRESSION>;
                COLUMN-INDEX OF THE COLUMN VECTORS BR AND BI;
     AR,AI:     <ARRAY IDENTIFIER>;
                "ARRAY" AR,AI[L:U]
                ENTRY:
                AR : REAL PART OF THE VECTOR,
                AI : IMAGINARY  PART  OF  THE  VECTOR.
                EXIT:
                THE RESULTING VECTOR (SEE ALSO BRIEF DESCRIPTION);
1SECTION : 1.2.5              (DECEMBER 1979)                          PAGE 2
 
 
 
     BR,BI:     <ARRAY IDENTIFIER>;
                "ARRAY" BR,BI[L:U,J:J];
                ENTRY:
                BR : REAL PART OF THE COLUMN VECTOR,
                BI : IMAGINARY PART OF THE COLUMN  VECTOR.
     XR,XI:     <ARITHMETIC EXPRESSION>;
                ENTRY:
                XR: REAL PART OF THE ELIMINATION FACTOR;
                XI: IMAGINARY PART OF THE ELIMINATION FACTOR .
 
 
 PROCEDURES USED : ELMVECCOL = CP34021 .
 
 
 RUNNING TIME : ROUGHLY PROPORTIONAL TO (U-L) .
 
 
 LANGUAGE: ALGOL 60.
 
 
 SUBSECTION : ELMCOMCOL.
 
 
 CALLING SEQUENCE :
 
     THE HEADING OF THE PROCEDURE READS :
     "PROCEDURE" ELMCOMCOL(L,U,I,J,AR,AI,BR,BI,XR,XI);
     "VALUE" L,U,I,J,XR,XI;
     "INTEGER" L,U,I,J;"REAL" XR,XI;"ARRAY" AR,AI,BR,BI;
 
     THE MEANING OF THE FORMAL PARAMETERS IS :
     L,U:       <ARITHMETIC EXPRESSION>;
                LOWER AND UPPER BOUND OF THE VECTORS;
     I,J:       <ARITHMETIC EXPRESSION>;
                I: COLUMN-INDEX OF THE COLUMN VECTORS AR AND AI;
                J: COLUMN-INDEX OF THE COLUMN VECTORS BR AND BI;
     AR,AI:     <ARRAY IDENTIFIER>;
                "ARRAY" AR,AI[L:U,I:I]
                ENTRY:
                AR : REAL PART OF THE COLUMN VECTOR,
                AI : IMAGINARY PART OF THE COLUMN VECTOR.
                EXIT:
                THE RESULTING VECTOR (SEE ALSO BRIEF DESCRIPTION);
     BR,BI:     <ARRAY IDENTIFIER>;
                "ARRAY" BR,BI[L:U,J:J]
                ENTRY:
                BR : REAL PART OF THE COLUMN VECTOR,
                BI : IMAGINARY PART OF THE COLUMN VECTOR.
     XR,XI:     <ARITHMETIC EXPRESSION>;
                ENTRY:
                XR: REAL PART OF THE ELIMINATION FACTOR;
                XI: IMAGINARY PART OF THE ELIMINATION FACTOR .
1SECTION : 1.2.5              (MAY 1974)                          PAGE 3
 
 
 
 PROCEDURES USED : ELMCOL = CP34023 .
 
 
 RUNNING TIME : ROUGHLY PROPORTIONAL TO (U-L) .
 
 
 LANGUAGE: ALGOL 60.
 
 
 SUBSECTION : ELMCOMROWVEC .
 
 
 CALLING SEQUENCE :
 
     THE HEADING OF THE PROCEDURE READS :
     "PROCEDURE" ELMCOMROWVEC(L,U,I,AR,AI,BR,BI,XR,XI);
     "VALUE" L,U,I,XR,XI;
     "INTEGER" L,U,I;"REAL" XR,XI;"ARRAY" AR,AI,BR,BI;
 
     THE MEANING OF THE FORMAL PARAMETERS IS :
     L,U:       <ARITHMETIC EXPRESSION>;
                LOWER AND UPPER BOUND OF THE VECTORS;
     I:         <ARITHMETIC EXPRESSION>;
                ROW-INDEX OF THE ROW VECTORS AR AND AI;
     AR,AI:     <ARRAY IDENTIFIER>;
                "ARRAY" AR,AI[I:I,L:U]
                ENTRY:
                AR : REAL PART OF THE ROW VECTOR,
                AI : IMAGINARY PART OF THE ROW VECTOR.
                EXIT:
                THE RESULTING VECTOR (SEE ALSO BRIEF DESCRIPTION);
     BR,BI:     <ARRAY IDENTIFIER>;
                "ARRAY" BR,BI[L:U]
                ENTRY:
                BR : REAL PART OF THE VECTOR,
                BI : IMAGINARY PART OF THE VECTOR
     XR,XI:     <ARITHMETIC EXPRESSION>;
                ENTRY:
                XR: REAL PART OF THE ELIMINATION FACTOR;
                XI: IMAGINARY PART OF THE ELIMINATION FACTOR .
 
 
 PROCEDURES USED : ELMROWVEC = CP34027 .
 
 
 RUNNING TIME : ROUGHLY PROPORTIONAL TO (U-L) .
 
 
 LANGUAGE: ALGOL 60.
 
 
1SECTION : 1.2.5              (MAY 1974)                          PAGE 4
 
 
 
 EXAMPLE OF USE :
 
     "BEGIN"
     "COMMENT" EXAMPLE OF USE ELMCOMCOL;
     "PROCEDURE" ELMCOMCOL(L,U,I,J,AR,AI,BR,BI,XR,XI);"CODE" 34377;
     "REAL" "ARRAY" AR,AI[1:2,1:2];
     "INTEGER" I,J;
     "PROCEDURE" OUT(K);"INTEGER" K;
     OUTPUT(61,"("2(-D,+D,"("*I  ")"),/")",
               AR[K,1],AI[K,1],AR[K,2],AI[K,2]);
     AR[1,1]:=+1;AR[1,2]:=-9;AR[2,1]:=-1;AR[2,2]:=-1;
     AI[1,1]:=+2;AI[1,2]:=+2;AI[2,1]:=+2;AI[2,2]:=-2;
     OUTPUT(61,"(""("INPUT MATRIX:")",/")");
     "FOR" I:=1,2 "DO" OUT(I);
     ELMCOMCOL(1,2,2,1,AR,AI,AR,AI,1,-4);
     OUTPUT(61,"("/,"("MATRIX AFTER ELIMINATION:")",/")");
     OUTPUT(61,"("-D,+D,"("*I")",4B,Z,D/")",
               AR[1,1],AI[1,1],AR[1,2],AI[1,2]);
     OUT(2)
     "END"
 
     OUTPUT:
     INPUT MATRIX:
      1+2*I  -9+2*I
     -1+2*I  -1-2*I
 
     MATRIX AFTER ELIMINATION:
      1+2*I     0
     -1+2*I   6+4*I    .
 
 
1SECTION : 1.2.5              (MAY 1974)                          PAGE 5
 
 
 
 SOURCE TEXT(S) :
0"CODE" 34376;
     "PROCEDURE" ELMCOMVECCOL(L,U,J,AR,AI,BR,BI,XR,XI);
     "VALUE" L,U,J,XR,XI;
     "INTEGER" L,U,J;"REAL" XR,XI;"ARRAY" AR,AI,BR,BI;
     "BEGIN"
     "PROCEDURE" ELMVECCOL(L,U,I,A,B,X);"CODE" 34021;
         ELMVECCOL(L,U,J,AR,BR,XR);
         ELMVECCOL(L,U,J,AR,BI,-XI);
         ELMVECCOL(L,U,J,AI,BR,XI);
         ELMVECCOL(L,U,J,AI,BI,XR)
     "END" ELMCOMVECCOL;
         "EOP"
0"CODE" 34377;
     "PROCEDURE" ELMCOMCOL(L,U,I,J,AR,AI,BR,BI,XR,XI);
     "VALUE" L,U,I,J,XR,XI;
     "INTEGER" L,U,I,J;"REAL" XR,XI;"ARRAY" AR,AI,BR,BI;
     "BEGIN"
     "PROCEDURE" ELMCOL(L,U,I,J,A,B,X);"CODE" 34023;
         ELMCOL(L,U,I,J,AR,BR,XR);
         ELMCOL(L,U,I,J,AR,BI,-XI);
         ELMCOL(L,U,I,J,AI,BR,XI);
         ELMCOL(L,U,I,J,AI,BI,XR)
     "END" ELMCOMCOL;
         "EOP"
0"CODE" 34378;
     "PROCEDURE" ELMCOMROWVEC(L,U,I,AR,AI,BR,BI,XR,XI);
     "VALUE" L,U,I,XR,XI;
     "INTEGER" L,U,I;"REAL" XR,XI;"ARRAY" AR,AI,BR,BI;
     "BEGIN"
     "PROCEDURE" ELMROWVEC(L,U,I,A,B,X);"CODE" 34027;
         ELMROWVEC(L,U,I,AR,BR,XR);
         ELMROWVEC(L,U,I,AR,BI,-XI);
         ELMROWVEC(L,U,I,AI,BR,XI);
         ELMROWVEC(L,U,I,AI,BI,XR)
     "END" ELMCOMROWVEC;
         "EOP"
1SECTION : 0.0                (MARCH 1977)                        PAGE 0
1SECTION : 0.0                (MARCH 1977)                        PAGE 0
        
1SECTION : 1.2.9              (DECEMBER 1975)                     PAGE 1      
        
        
        
 AUTHORS  :       
        
     T.J. DEKKER, W. HOFFMANN (COMSCL),         
     C.G. VAN DER LAAN (SCLCOM).      
        
        
 CONTRIBUTORS:    
        
     W. HOFFMANN, S.P.N. VAN KAMPEN (COMSCL),   
     H. FIOLET, C.G. VAN DER LAAN (SCLCOM).     
        
        
 INSTITUTE: MATHEMATICAL CENTRE.      
        
        
 RECEIVED: 731030.
        
        
 BRIEF DESCRIPTION:         
        
     THIS SECTION CONTAINS TWO PROCEDURES :     
        
     COMSCL NORMALIZES  THE REAL AND  COMPLEX EIGENVECTORS
     GIVEN COLUMNWISE IN A TWO-DIMENSIONAL ARRAY; THE IMAGINARY PARTS OF      
     THE CORRESPONDING  EIGENVALUES MUST  BE GIVEN IN A  ONE-DIMENSIONAL      
     ARRAY;       
     THE EIGENVECTORS ARE  NORMALIZED IN SUCH A WAY THAT, IN EACH EIGEN-      
     VECTOR, AN ELEMENT OF MAXIMUM MODULUS EQUALS 1;      
     THE NORMALIZED EIGENVECTORS ARE DELIVERED IN THE GIVEN ARRAY.  
        
     SCLCOM NORMALIZES THE (NON-NULL) COLUMNS OF A COMPLEX MATRIX   
     IN SUCH A WAY THAT IN EACH COLUMN AN ELEMENT OF MAXIMUM ABSOLUTE         
     VALUE BECOMES EQUAL TO ONE.      
        
        
 KEYWORDS:        
        
     NORMALIZATION,         
     SCALING OF COMPLEX EIGENVECTORS, 
     COMPLEX SCALING.       
        
        
1SECTION : 1.2.9              (DECEMBER 1975)                     PAGE 2      
        
        
        
 SUBSECTION : COMSCL.       
        
        
 CALLING SEQUENCE:
        
     THE HEADING OF THE PROCEDURE IS: 
     "PROCEDURE" COMSCL(A, N, N1, N2, IM); "VALUE" N, N1, N2;       
     "INTEGER" N, N1, N2; "ARRAY" A, IM;        
     "CODE" 34193;
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     A:      <ARRAY IDENTIFIER>;      
             "ARRAY" A[1:N,N1:N2];    
             ENTRY: EACH REAL  EIGENVECTOR MUST BE  GIVEN IN A COLUMN OF      
                    ARRAY  A, WHOSE  CORRESPONDING  ELEMENT OF  ARRAY IM      
                    EQUALS 0;         
                    THE REAL  AND IMAGINARY  PART OF EACH COMPLEX EIGEN-      
                    VECTOR MUST BE GIVEN IN CONSECUTIVE COLUMNS OF ARRAY      
                    A, WHOSE CORRESPONDING  ELEMENTS OF ARRAY IM ARE NOT      
                    EQUAL TO 0;       
             EXIT:  THE NORMALIZED EIGENVECTORS (I.E. IN EACH EIGEN-
                    VECTOR AN ELEMENT  OF MAXIMUM MODULUS  EQUALS 1) ARE      
                    DELIVERED IN THE CORRESPONDING COLUMNS OF A;    
     N:      <ARITHMETIC EXPRESSION>; 
             THE NUMBER OF ROWS OF ARRAY A;     
     N1, N2: <ARITHMETIC EXPRESSION>; 
             THE LOWER AND UPPER BOUND OF THE COLUMN INDICES OF ARRAY A;      
     IM:     <ARRAY IDENTIFIER>;      
             "ARRAY" IM[N1:N2];       
             THE IMAGINARY PARTS OF THE EIGENVALUES, OF WHICH THE EIGEN-      
             VECTORS ARE GIVEN IN THE CORRESPONDING COLUMNS OF  ARRAY A,      
             MUST BE GIVEN IN ARRAY IM.         
        
        
 PROCEDURES USED: NONE.     
        
 RUNNING TIME: PROPORTIONAL TO N * (N2 - N1 + 1).         
        
        
 LANGUAGE: ALGOL 60.        
        
        
 METHOD AND PERFORMANCE: SEE REF [1]. 
        
        
 REFERENCES:      
        
     [1].T.J. DEKKER AND W. HOFFMANN. 
         ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 2.
         MC TRACT 23, 1968, MATH. CENTR., AMSTERDAM.      
        
        
 EXAMPLE OF USE:  
     THE PROCEDURE COMSCL IS USED IN COMEIG1, SECTION 3.3.1.2.2.    
1SECTION : 1.2.9              (DECEMBER 1975)                     PAGE 3      
        
        
        
 SUBSECTION : SCLCOM.       
        
        
 CALLING SEQUENCE:
        
     THE HEADING OF THE PROCEDURE READS:        
     "PROCEDURE"SCLCOM(AR,AI,N,N1,N2);
     "VALUE"N,N1,N2;"INTEGER"N,N1,N2;"ARRAY"AR,AI;        
     "CODE" 34360;
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     AR,AI:  <ARRAY IDENTIFIER>;      
             "ARRAY" AR,AI[1:N,N1:N2];
             ENTRY:         
             THE REAL PART AND THE IMAGINARY PART OF THE MATRIX OF  
             WHICH THE COLUMNS ARE TO BE SCALED MUST BE GIVEN IN THE
             ARRAYS AR AND AI,RESPECTIVELY;     
             EXIT:
             THE REAL PART AND THE IMAGINARY PART OF THE MATRIX WITH
             SCALED COLUMNS  ARE DELIVERED IN THE ARRAYS AR AND AI, 
             RESPECTIVELY;  
     N,N1,N2:<ARITHMETIC EXPRESSION>; 
             N    : ORDER OF THE MATRIX;        
             N1,N2: THE N1-TH TO    N2-TH COLUMN VECTORS ARE TO BE  
             SCALED.        
        
        
 PROCEDURES USED: COMCOLCST = CP34352.
        
        
 RUNNING TIME: PROPORTIONAL TO N*(N2-N1).       
        
        
 LANGUAGE: ALGOL 60.        
        
        
 EXAMPLE OF USE: SEE EIGCOM (SECTION 3.3.2.2.2).
        
        
1SECTION : 1.2.9              (DECEMBER 1975)                     PAGE 4      
        
        
        
 SOURCE TEXT(S) : 
        
 "CODE" 34193;    
     "COMMENT" MCA 2423;    
     "PROCEDURE" COMSCL(A, N, N1, N2, IM); "VALUE" N, N1, N2;       
     "INTEGER" N, N1, N2; "ARRAY" A, IM;        
     "BEGIN" "INTEGER" I, J, K;       
         "REAL" S, U, V, W; 
        
         "FOR" J:= N1 "STEP" 1 "UNTIL" N2 "DO"  
         "BEGIN" S:= 0; "IF" IM[J] ^= 0 "THEN"  
             "BEGIN" "FOR" I:= 1 "STEP" 1 "UNTIL" N "DO"  
                 "BEGIN" U:= A[I,J] ** 2 + A[I,J + 1] ** 2;         
                     "IF" U > S "THEN" "BEGIN" S:= U; K:= I "END"   
                 "END";     
                 "IF" S ^= 0 "THEN"   
                 "BEGIN" V:= A[K,J] / S; W:= - A[K,J + 1] / S;      
                     "FOR" I:= 1 "STEP" 1 "UNTIL" N "DO"  
                     "BEGIN" U:= A[I,J]; S:= A[I,J + 1];  
                         A[I,J]:= U * V - S * W;
                         A[I,J + 1]:= U * W + S * V       
                     "END"  
                 "END";     
                 J:= J + 1  
             "END"
             "ELSE"         
             "BEGIN" "FOR" I:= 1 "STEP" 1 "UNTIL" N "DO"  
                 "IF" ABS(A[I,J]) > ABS(S) "THEN" S:= A[I,J];       
                 "IF" S ^= 0 "THEN"   
                 "FOR" I:= 1 "STEP" 1 "UNTIL" N "DO" A[I,J]:= A[I,J] / S      
             "END"
         "END"    
     "END" COMSCL;
         "EOP"    
0"CODE" 34360;    
     "PROCEDURE" SCLCOM(AR, AI, N, N1, N2); "VALUE" N, N1, N2;      
     "INTEGER" N, N1, N2; "ARRAY" AR, AI;       
     "BEGIN" "INTEGER" I, J, K;       
         "REAL" S, R;       
         "PROCEDURE" COMCOLCST(L,U,J,AR,AI,XR,XI);"CODE" 34352;     
         "FOR" J:= N1 "STEP" 1 "UNTIL" N2 "DO"  
         "BEGIN" S:= 0;     
             "FOR" I:= 1 "STEP" 1 "UNTIL" N "DO"
             "BEGIN" R:= AR[I,J] ** 2 + AI[I,J] ** 2; "IF" R > S "THEN"       
                 "BEGIN" S:= R; K:= I "END"     
             "END";         
             "IF" S ^= 0 "THEN" COMCOLCST(1, N, J, AR, AI, AR[K,J] /
             S, - AI[K,J] / S)        
         "END"    
     "END" SCLCOM;
         "EOP"    
1SECTION : 1.2.8              (DECEMBER 1975)                     PAGE 1      
        
        
        
 AUTHOR   : C.G. VAN DER LAAN.        
        
        
 CONTRIBUTORS : H.FIOLET, C.G. VAN DER LAAN.    
        
        
 INSTITUTE: MATHEMATICAL CENTRE.      
        
        
 RECEIVED: 731016.
        
        
 BRIEF DESCRIPTION:         
        
     COMEUCNRM CALCULATES THE EUCLIDEAN NORM OF A COMPLEX MATRIX    
     WITH LW LOWER CODIAGONALS.       
        
        
 KEYWORDS:        
        
     EUCLIDEAN NORM,        
     COMPLEX MATRIX.        
        
        
 CALLING SEQUENCE:
        
     THE HEADING OF THE PROCEDURE READS:        
     "REAL" "PROCEDURE" COMEUCNRM(AR, AI, LW, N); "VALUE" N, LW;    
     "INTEGER" N, LW; "ARRAY" AR, AI; 
        
     COMEUCNRM DELIVERS THE EUCLIDEAN NORM OF A COMPLEX MATRIX WITH LW        
             LOWER CODIAGONALS;       
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     N:      <ARITHMETIC EXPRESSION>; 
             THE ORDER OF THE MATRIX; 
     LW:     <ARITHMETIC EXPRESSION>; 
             THE NUMBER OF LOWER CODIAGONALS;   
     AR,AI:  <ARRAY IDENTIFIER>;      
             "ARRAY" AR,AI[1:N,1:N];  
             ENTRY:         
             THE REAL PART AND THE IMAGINARY PART OF THE COMPLEX    
             MATRIX,WITH LW LOWER CODIAGONALS,MUST BE GIVEN IN THE  
             ARRAYS AR AND AI,RESPECTIVELY.     
        
        
        
1SECTION : 1.2.8              (DECEMBER 1975)                     PAGE 2      
        
        
        
 PROCEDURES USED: MATTAM = CP34015.   
        
        
 RUNNING TIME: PROPORTIONAL TO N**2.  
        
        
 LANGUAGE: ALGOL 60.        
        
        
 EXAMPLE OF USE:SEE EIGVALCOM OR EIGCOM (SECTION 3.3.2.2.2).        
        
        
 SOURCE TEXT(S) : 
0"CODE" 34359;    
     "REAL" "PROCEDURE" COMEUCNRM(AR, AI, LW, N); "VALUE" N, LW;    
     "INTEGER" N, LW; "ARRAY" AR, AI; 
     "BEGIN" "INTEGER" I, L;
         "REAL" "PROCEDURE" MATTAM(L,U,I,J,A,B);"CODE" 34015;       
         "REAL" R;
         R:= 0;   
         "FOR" I:= 1 "STEP" 1 "UNTIL" N "DO"    
         "BEGIN" L:= "IF" I > LW "THEN" I - LW "ELSE" 1;  
             R:= MATTAM(L, N, I, I, AR, AR) + MATTAM(L, N, I,       
             I, AI, AI) + R;
         "END";   
         COMEUCNRM:= SQRT(R)
     "END" COMEUCNRM;       
         "EOP"    
1SECTION: 0.0                 (JANUARY 1976)                      PAGE 0      
1SECTION: 0.0                 (JANUARY 1976)                      PAGE 0      
1SECTION : 1.3.1             (MAY 1974)                           PAGE 1      
        
        
        
 AUTHOR: C.G. VAN DER LAAN. 
        
        
 INSTITUTE: MATHEMATICAL CENTRE.      
        
        
 RECEIVED: 730815.
        
        
 BRIEF DESCRIPTION:         
        
 THIS SECTION CONTAINS THREE PROECEDURES:       
     COMABS CALCULATES THE MODULUS OF A COMPLEX NUMBER.   
     COMSQRT CALCULATES THE SQUARE ROOT OF A COMPLEX NUMBER         
     CARPOL TRANSFORMS A COMPLEX NUMBER GIVEN IN CARTESIAN COORDINATES        
     INTO POLAR COORDINATES 
        
        
 KEYWORDS:        
        
     COMPLEX NUMBER.        
     MODULUS.     
     SQUARE ROOT. 
     TRANSFORMATION.        
     CARTESIAN COORDINATES. 
     POLAR COORDINATES.     
        
        
 SUBSECTION: COMABS.        
        
 CALLING SEQUENCE:
        
     THE HEADING OF THE PROCEDURE READS:        
     "REAL""PROCEDURE"COMABS(XR,XI);  
     "VALUE"XR,XI;"REAL"XR,XI;        
        
     COMABS DELIVERS THE MODULUS OF THE COMPLEX NUMBER XR + I * XI; 
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     XR,XI:<ARITHMETIC EXPRESSION>;   
           ENTRY:XR,XI ARE THE REAL PART AND THE IMAGINARY PART     
                 OF THE COMPLEX NUMBER,RESPECTIVELY.      
        
        
 PROCEDURES USED: NONE.     
        
        
 LANGUAGE: ALGOL 60.        
        
1SECTION : 1.3.1             (MAY 1974)                           PAGE 2      
        
        
        
 EXAMPLE OF USE:  
        
 "BEGIN"
 "REAL""PROCEDURE"COMABS(XR,XI);      
 "CODE"34340;     
 OUTPUT(61,"(""("THE MODULUS OF .3+.4*I EQUALS")",-D.DD")",         
       COMABS(.3,.4))       
 "END"  
        
 THE MODULUS OF .3+.4*I EQUALS 0.50   
        
        
 SUBSECTION : COMSQRT.      
        
        
 CALLING SEQUENCE:
        
     THE HEADING OF THE PROCEDURE READS:        
     "PROCEDURE"COMSQRT(AR,AI,PR,PI); 
     "VALUE"AR,AI;"REAL"AR,AI,PR,PI;  
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     AR,AI:<ARITHMETIC EXPRESSION>;   
           ENTRY:AR,AI ARE THE REAL PART AND THE IMAGINARY PART     
                 OF THE COMPLEX NUMBER,RESPECTIVELY;      
     PR,PI;<VARIABLE>;      
           EXIT:THE REAL PART AND THE IMAGINARY PART OF THE SQUARE ROOT       
                ARE DELIVERED IN PR AND PI,RESPECTIVELY.  
        
        
 PROCEDURES USED: NONE.     
        
        
 LANGUAGE: ALGOL 60.        
        
        
 METHOD AND PERFORMANCE:    
        
     THE REPRESENTATION OF THE RESULTING COMPLEX NUMBER IS CHOSEN SUCH        
     THAT ITS REAL PART IS NONNEGATIVE;THE PROCEDURE IS PROTECTED   
     AGAINST INTERMEDIATE OVERFLOW.   
        
        
 EXAMPLE OF USE:  
        
 "BEGIN""REAL"R,I;
 "PROCEDURE"COMSQRT(AR,AI,PR,PI);     
 "CODE"34343;     
 COMSQRT(-3,4,R,I);         
 OUTPUT(61,"(""("THE SQUARE ROOT OF -3+4*I IS")",-D.DD,+D.DD,"("*I")"         
       ")",R,I);  
 "END"  
        
 THE SQUARE ROOT OF -3+4*I IS 1.00+2.00*I       
1SECTION : 1.3.1             (MAY 1974)                           PAGE 3      
        
        
        
 SUBSECTION : CARPOL.       
        
        
 CALLING SEQUENCE:
        
     THE HEADING OF THE PROCEDURE READS:        
     "PROCEDURE"CARPOL(AR,AI,R,C,S);  
     "VALUE"AR,AI;"REAL"AR,AI,R,C,S;  
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     AR,AI:<ARITHMETIC EXPRESSION>;   
           ENTRY:AR,AI ARE THE REAL PART AND THE IMAGINARY PART OF THE        
                 COMPLEX NUMBER ,RESPECTIVELY;  
     R,C,S:<VARIABLE>;      
           EXIT:THE MODULUS OF THE COMPLEX NUMBER IS DELIVERED IN R 
                AND THE COSINE AND THE SINE OF THE ARGUMENT ARE     
                DELIVERED IN C AND S,RESPECTIVELY;        
                WHEN AR=AI=0 THEN C:=1 AND R:=S:=0.       
        
        
 PROCEDURES USED: NONE.     
        
        
 LANGUAGE: ALGOL 60.        
        
        
 EXAMPLE OF USE:  
        
 "BEGIN""REAL"R,C,S;        
 "PROCEDURE"CARPOL(AR,AI,R,C,S); "CODE"34344;     
 CARPOL(.3,.4,R,C,S);       
 OUTPUT(61,"(""("THE POLAR COORDINATES OF .3+.4*I ARE:")",/,        
              "("MODULUS:")",-D.DD,/, 
              "("COSINE OF ARGUMENT:")",-D.DD,/,
              "("SINE OF ARGUMENT:")",-D.DD")",R,C,S)     
 "END"  
        
 THE POLAR COORDINATES OF .3+.4*I ARE:
 MODULUS: 0.50    
 COSINE OF ARGUMENT: 0.60   
 SINE OF ARGUMENT: 0.80     
        
        
1SECTION : 1.3.1             (MAY 1974)                           PAGE 4      
        
        
        
 SOURCE TEXT(S):  
0"CODE"34340;     
 "REAL" "PROCEDURE" COMABS(XR,XI);"VALUE" XR,XI;"REAL" XR,XI;       
 "BEGIN" XR:= ABS(XR); XI:= ABS(XI);  
 COMABS:= "IF" XI > XR "THEN" SQRT((XR/XI)**2+1)*XI       
 "ELSE" "IF" XI= 0 "THEN" XR "ELSE" SQRT((XI/XR)**2+1)*XR 
 "END" COMABS;    
         "EOP"    
0"CODE"34343;     
 "PROCEDURE" COMSQRT(AR,AI,PR,PI);    
 "VALUE" AR,AI; "REAL" AR,AI,PR,PI;   
 "IF" AR=0 & AI= 0 "THEN" PR:= PI:=0 "ELSE"     
 "BEGIN" "REAL" BR,BI,H;    
 BR:= ABS(AR); BI:= ABS(AI);
 H:= "IF" BI < BR "THEN"    
 ("IF" BR<1 "THEN" SQRT((SQRT((BI/BR)**2+1)*.5+.5)*BR)    
 "ELSE" SQRT((SQRT((BI/BR)**2+1)*.125+.125)*BR)*2)        
 "ELSE" "IF" BI<1 "THEN" SQRT((SQRT((BR/BI)**2+1)*BI+BR)*2)*.5      
 "ELSE" "IF" BR+1= 1 "THEN" SQRT(BI*.5)         
 "ELSE" SQRT(SQRT((BR/BI)**2+1)*BI*.125+BR*.125)*2;       
 "IF" AR >= 0 "THEN"        
 "BEGIN" PR:= H; PI:= AI/H*.5 "END"   
 "ELSE" "BEGIN" PI:= "IF" AI >= 0 "THEN" H "ELSE" -H;     
 PR:= BI/H*.5     
 "END"  
 "END" COMSQRT;   
         "EOP"    
        
 "CODE"34344;     
 "PROCEDURE"CARPOL(AR,AI,R,C,S);      
 "VALUE" AR,AI; "REAL" AR,AI,R,C,S;   
 "IF" AR=0&AI=0 "THEN"      
   "BEGIN" C:=1;R:=S:=0 "END"         
 "ELSE" "BEGIN"   
    R:="IF" ABS(AR)>ABS(AI) "THEN"    
     ABS(AR)*SQRT(1+(AI/AR)**2)       
    "ELSE" ABS(AI)* SQRT(1+(AR/AI)**2);         
    C:=AR/R;S:=AI/R         
 "END"CARPOL;     
         "EOP"    
        
1SECTION : 1.3.2             (MAY 1974)                           PAGE 1      
        
        
        
 AUTHOR: C.G. VAN DER LAAN. 
        
        
 INSTITUTE: MATHEMATICAL CENTRE.      
        
        
 RECEIVED: 730815.
        
        
 BRIEF DESCRIPTION:         
        
     THIS SECTION CONTAINS TWO PROCEDURES :     
     COMMUL CALCULATES THE PRODUCT OF TWO COMPLEX NUMBERS.
     COMDIV CALCULATES THE QUOTIENT OF TWO COMPLEX NUMBERS.         
        
        
 KEYWORDS:        
        
     COMPLEX MULTIPLICATION.
     COMPLEX DIVISION.      
        
        
 SUBSECTION COMMUL.         
        
 CALLING SEQUENCE:
        
     THE HEADING OF THE PROCEDURE READS:        
     "PROCEDURE"COMMUL(AR,AI,BR,BI,RR,RI);      
     "VALUE"AR,AI,BR,BI;"REAL"AR,AI,BR,BI,RR,RI;
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     AR,AI,BR,BI:<ARITHMETIC EXPRESSION>;       
                 ENTRY:AR,BR ARE THE REAL PARTS OF THE COMPLEX      
                       NUMBERS AND AI,BI ARE THE IMAGINARY PARTS OF 
                       THE COMPLEX NUMBERS;     
     RR,RI:      <VARIABLE>;
                 EXIT:THE REAL PART AND THE IMAGINARY PART OF THE   
                      RESULTING COMPLEX NUMBER ARE DELIVERED IN RR AND        
                      RI,RESPECTIVELY.
        
 PROCEDURES USED: NONE.     
        
 LANGUAGE: ALGOL 60.        
        
1SECTION : 1.3.2             (DECEMBER 1975)                      PAGE 2      
        
        
        
 EXAMPLE OF USE:  
        
     "BEGIN""REAL"R,I;      
     "PROCEDURE"COMMUL (AR,AI,BR,BI,RR,RI);     
     "CODE"34341; 
     COMMUL(.1,.2,.3,.4,R,I);         
     OUTPUT(61,"(""("(.1+.2*I)*(.3+.4*I)=")",-D.DD,+D.DD,"("*I")"")",R,I      
     "END"        
        
     (.1+.2*I)*(.3+.4*I)=-0.05+0.10*I 
        
        
 SUBSECTION : COMDIV.       
        
        
 CALLING SEQUENCE:
        
     THE HEADING OF THE PROCEDURE READS:        
     "PROCEDURE"COMDIV(XR,XI,YR,YI,ZR,ZI);      
     "VALUE"XR,XI,YR,YI;"REAL"XR,XI,YR,YI,ZR,ZI;
        
     THE MEANING OF THE FORMAL PARAMETERS IS:   
     XR,XI,YR,YI:<ARITHMETIC EXPRESSION>;       
                 ENTRY:XR,YR ARE THE REAL PARTS OF THE NUMERATOR    
                       AND THE DENOMINATOR,RESPECTIVELY AND XI,YI ARE         
                       THE CORRESPONDING IMAGINARY PARTS; 
     ZR,ZI:      <VARIABLE>;
                 EXIT:THE REAL PART AND THE IMAGINARY PART OF THE   
                      RESULTING COMPLEX NUMBER ARE DELIVERED IN RR  
                      AND RI,RESPECTIVELY.      
        
        
 RUNNING TIME:    
        
     AT MOST SIX MULTIPLICATIONS AND/OR DIVISIONS ARE USED.         
        
        
 LANGUAGE: ALGOL 60.        
        
        
 METHOD AND PERFORMANCE:    
        
     THE PROCEDURE IS NOT PROTECTED AGAINST DIVISION BY ZERO.       
        
        
1SECTION : 1.3.2             (MAY 1974)                           PAGE 3      
        
        
        
 EXAMPLE OF USE:  
        
 "BEGIN""REAL"R,I;
 "PROCEDURE"COMDIV(XR,XI,YR,YI,ZR,ZI);
 "CODE"34342;     
 COMDIV(-.05,.1,.1,.2,R,I); 
 OUTPUT(61,"(""("(-.05+.1*I)/(.1+.2*I)=")",-D.DD,+D.DD,"("*I")"")"  
        ,R,I)     
 "END"  
        
 (-.05+.1*I)/(.1+.2*I)= 0.30+0.40*I   
        
        
 SOURCE TEXT(S):  
        
 "CODE"34341;     
 "PROCEDURE" COMMUL(AR,AI,BR,BI,RR,RI);         
 "VALUE" AR,AI,BR,BI; "REAL" AR,AI,BR,BI,RR,RI; 
 "BEGIN" RR:= AR * BR - AI * BI;      
 RI:= AR * BI + AI * BR     
 "END" COMMUL;    
         "EOP"    
0"CODE"34342;     
 "PROCEDURE" COMDIV(XR,XI,YR,YI,ZR,ZI);         
 "VALUE" XR,XI,YR,YI;"REAL" XR,XI,YR,YI,ZR,ZI;  
 "BEGIN" "REAL" H,D;        
 "IF" ABS(YI) < ABS(YR) "THEN"        
 "BEGIN" "IF" YI= 0 "THEN"  
 "BEGIN" ZR:= XR/YR; ZI:= XI/YR "END" "ELSE"    
 "BEGIN" H:= YI/YR; D:= H*YI + YR;    
 ZR:= (XR + H * XI)/D; ZI:= (XI-H*XR)/D         
 "END"  
 "END" "ELSE"     
 "BEGIN" H:= YR/YI; D:= H*YR + YI;    
 ZR:= (XR*H + XI)/D; ZI:= (XI*H - XR)/D         
 "END"  
 "END" COMDIV;    
         "EOP"    
1SECTION : 0.0                (MARCH 1977)                        PAGE 0
1SECTION : 0.0                (MARCH 1977)                        PAGE 0