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: ; LOWER AND UPPER BOUND OF THE COLUMN VECTOR; J: ; COLUMN-INDEX OF THE COLUMN VECTOR; AR,AI: ; "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: ; 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: ; LOWER AND UPPER BOUND OF THE ROW VECTOR; I: ; ROW-INDEX OF THE ROW VECTOR; AR,AI: ; "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: ; 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 : ; LOWER AND UPPER BOUND OF THE VECTORS; I : ; ROW-INDEX OF THE ROW VECTORS AR AND AI; AR,AI: ; "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" BR,BI[L:U]; ENTRY: BR: REAL PART AND BI: IMAGINARY PART OF THE VECTOR; RR,RI: ; 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: ; 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" 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: ; ENTRY: A TOLERANCE; (E.G. THE SQUARE OF THE MACHINE PRECISION TIMES A NORM OF THE MATRIX IN CONSIDERATION); T: ; 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: ; 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: ; 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: ; 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" 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" 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: ; 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: ; LOWER AND UPPER BOUND OF THE VECTORS; J: ; COLUMN-INDEX OF THE COLUMN VECTORS BR AND BI; AR,AI: ; "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" BR,BI[L:U,J:J]; ENTRY: BR : REAL PART OF THE COLUMN VECTOR, BI : IMAGINARY PART OF THE COLUMN VECTOR. XR,XI: ; 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: ; LOWER AND UPPER BOUND OF THE VECTORS; I,J: ; I: COLUMN-INDEX OF THE COLUMN VECTORS AR AND AI; J: COLUMN-INDEX OF THE COLUMN VECTORS BR AND BI; AR,AI: ; "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" BR,BI[L:U,J:J] ENTRY: BR : REAL PART OF THE COLUMN VECTOR, BI : IMAGINARY PART OF THE COLUMN VECTOR. XR,XI: ; 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: ; LOWER AND UPPER BOUND OF THE VECTORS; I: ; ROW-INDEX OF THE ROW VECTORS AR AND AI; AR,AI: ; "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" BR,BI[L:U] ENTRY: BR : REAL PART OF THE VECTOR, BI : IMAGINARY PART OF THE VECTOR XR,XI: ; 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" 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: ; THE NUMBER OF ROWS OF ARRAY A; N1, N2: ; THE LOWER AND UPPER BOUND OF THE COLUMN INDICES OF ARRAY A; IM: ; "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" 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:; 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: ; THE ORDER OF THE MATRIX; LW: ; THE NUMBER OF LOWER CODIAGONALS; AR,AI: ; "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:; 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:; ENTRY:AR,AI ARE THE REAL PART AND THE IMAGINARY PART OF THE COMPLEX NUMBER,RESPECTIVELY; PR,PI;; 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:; ENTRY:AR,AI ARE THE REAL PART AND THE IMAGINARY PART OF THE COMPLEX NUMBER ,RESPECTIVELY; R,C,S:; 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:; ENTRY:AR,BR ARE THE REAL PARTS OF THE COMPLEX NUMBERS AND AI,BI ARE THE IMAGINARY PARTS OF THE COMPLEX NUMBERS; RR,RI: ; 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:; ENTRY:XR,YR ARE THE REAL PARTS OF THE NUMERATOR AND THE DENOMINATOR,RESPECTIVELY AND XI,YI ARE THE CORRESPONDING IMAGINARY PARTS; ZR,ZI: ; 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