########################################################################### ########################################################################### 1SECTION Context: 1SECTION : 1.1.1 Vector and matrix initialisation 1SECTION : 1.1.2 Vector and matrix copying 1SECTION : 1.1.3 Vector <-> matrix cut/paste 1SECTION : 1.1.4.1 Scalar products 1SECTION : 1.1.4.2 Matrix/Vector multiplication 1SECTION : 1.1.4.3 Matrix/Matrix multiplication 1SECTION : 1.1.5 Vector arithmetic operations 1SECTION : 1.1.6 Interchange vectors 1SECTION : 1.1.7 Replace raw and column vectors in matrix 1SECTION : 1.1.8 Vector different norms calculation 1SECTION : 1.1.9 Matrix normalization 1SECTION : 1.2.3 Raw and column complex multiplication 1SECTION : 1.2.4 Complex operations 1SECTION : 1.2.5 Complex vector operations 1SECTION : 1.2.7 COMPLEX VECTOR OPERATIONS, ROTATION, HOUSEHOLDER MATRIX. 1SECTION : 1.2.9 Complex vectors normalization 1SECTION : 1.3.1 Module, square root, trigonometric form of complex number 1SECTION : 1.3.2 Multiplication and division of complex numbers 1SECTION : 1.4 Long integer arithmetic 1SECTION : 1.5.1 Double precision arithmetic 1SECTION : 1.5.2 Scalar products of vectors, Matrix-vector multiplication (Double precision) 1SECTION : 1.5.3 Convert Double precision number to ordinary precision 1SECTION : 2.2.1.1 Evaluate polynomials and their derivatives 1SECTION : 2.2.2.1 Orthogonal polynomial evaluation 1SECTION : 2.2.2.2 CHEBYSHEV POLYNOMIALS 1SECTION : 2.2.3.1 Sin/cosine/Fourier series 1SECTION : 2.3 CALCULATE A TERMINATING CONTINUED FRACTION 1SECTION : 2.4.1 Power sum, CHEBYSHEV SUM, SHIFTED CHEBYSHEV SUM, Newton sum 1SECTION : 2.4.3 INDEFINITE INTEGRAL OF A GIVEN CHEBYSHEV SERIES 1SECTION: 3.1.1.1.1.1.1 Matrix TRIANGULAR DECOMPOSITION 1SECTION: 3.1.1.1.1.1.2 DETERMINANT OF A TRIANGULARLY DECOMPOSED MATRIX 1SECTION: 3.1.1.1.1.1.3 Linear system solutions 1SECTION: 3.1.1.1.1.1.4 Inversion of matrices 1SECTION: 3.1.1.1.1.1.5 ITERATIVELY IMPROVED SOLUTION OF A SYSTEM OF LINEAR EQUATIONS 1SECTION: 3.1.1.1.1.2.1 THE CHOLESKY DECOMPOSITION OF A POSITIVE DEFINITE SYMMETRIC MATRIX 1SECTION: 3.1.1.1.1.2.2 THE DETERMINANT OF A SYMMETRIC POSITIVE DEFINITE MATRIX 1SECTION: 3.1.1.1.1.2.3 Special methods of solutions of Linear system 1SECTION: 3.1.1.1.1.2.4 Special methods of matrix inversion 1SECTION: 3.1.1.1.1.3.2 Determinant of a symmetric matrix 1SECTION: 3.1.1.1.1.3.3 Decomposition of symmetric matrix 1SECTION: 3.1.1.2.1.1 LINEAR LEAST SQUARES PROBLEM, HOUSEHOLDER TRIANGULARIZATION. 1SECTION: 3.1.1.2.1.2 LINEAR LEAST SQUARES PROBLEM 1SECTION: 3.1.1.2.1.3 INVERSE OF THE MATRIX S'S 1SECTION: 3.1.1.2.1.4 LINEAR LEAST SQUARES PROBLEM 1SECTION: 3.1.1.3.1.1 SOLUTION OF AN OVERDETERMINED SYSTEM OF LINEAR EQUATIONS 1SECTION 3.1.1.3.1.2 SOLUTION OF AN OVERDETERMINED SYSTEM OF LINEAR EQUATIONS 1SECTION 3.1.1.3.1.3 HOMOGENEOUS EQUATIONS A * X = 0 AND X' * A = 0 1SECTION 3.1.1.3.1.4 PSEUDO-INVERSE OF A MATRIX 1SECTION 3.1.2.1.1.1.1.1 DECOMPOSITION OF A BAND MATRIX BY GAUSSIAN ELIMINATION 1SECTION 3.1.2.1.1.1.1.2 DETERMINANT OF A BAND MATRIX 1SECTION 3.1.2.1.1.1.1.3 SOLUTION OF ONE OR MORE LINEAR SYSTEMS WITH THE SAME COEFFICIENT MATRIX 1SECTION 3.1.2.1.1.1.2.1 SOLUTION OF SYSTEMS OF LINEAR EQUATIONS WITH A TRIDIAGONAL MATRIX 1SECTION 3.1.2.1.1.1.2.3 SOLUTION OF SYSTEMS OF LINEAR EQUATIONS WITH A TRIDIAGONAL MATRIX 1SECTION 3.1.2.1.1.2.1.1 CHOLESKY DECOMPOSITION OF A SYMMETRIC POSITIVE DEFINITE BAND MATRIX 1SECTION 3.1.2.1.1.2.1.2 DETERMINANT OF A SYMMETRIC POSITIVE DEFINITE BAND MATRIX 1SECTION 3.1.2.1.1.2.1.3 SOLUTION OF ONE SYSTEM OF LINEAR EQUATIONS BY CHOLESKY'S SQUARE ROOT METHOD 1SECTION 3.1.2.1.1.2.2.3 SOLVING A SYSTEM OF LINEAR EQUATIONS WITH A SYMMETRIC TRIDIAGONAL MATRIX 1SECTION 3.1.2.2.1 SYMMETRIC AND POSITIVE DEFINITE SYSTEM BY THE METHOD OF CONJUGATE GRADIENTS 1SECTION:3.2.1.1.1 EQUILIBRATES A MATRIX BY MEANS OF A DIAGONAL SIMILARITY TRANSFORMATION 1SECTION:3.2.1.1.2 TRANSFORMS THE EIGENVECTORS OF THE EQUILIBRATED MATRIX INTO THE EIGENVECTORS OF THE ORIGINAL MATRIX 1SECTION:3.2.1.2.1.1 TRANSFORM A REAL SYMMETRIC MATRIX INTO A SIMILAR TRIDIAGONAL ONE, HOUSEHOLDER'S TRANSFORMATION 1SECTION:3.2.1.2.1.2 SIMILARITY TRANSFORMATION, UPPER-HESSENBERG MATRIX. 1SECTION:3.2.1.2.2.1 HERMITIAN MATRIX, TRIDIAGONALIZATION, COMPLEX HOUSEHOLDER'S TRANSFORMATION 1SECTION:3.2.1.2.2.2 COMPLEX EIGENPROBLEM,REDUCTION HESSENBERG FORM,HOUSEHOLDER'S TRANSFORMATION. 1SECTION:3.2.2.1.1 HOUSEHOLDER'S TRANSFORMATION, BIDIAGONALISATION ########################################################################## ########################################################################## 1SECTION : 1.1.1 (DECEMBER 1979) AUTHOR: P.A.BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730715. BRIEF DESCRIPTION: THIS SECTION CONTAINS FIVE PROCEDURES. INIVEC INITIALIZES A ( PART OF A ) VECTOR WITH A CONSTANT. INIMAT INITIALIZES A ( PART OF A ) MATRIX WITH A CONSTANT. INIMATD INITIALIZES ELEMENTS A[I, I+SHIFT], I= LR(1)UR OF A MATRIX. INISYMD INITIALIZES A (PART OF A) CODIAGONAL OF A SYMMETRIC MATRIX, WHOSE UPPERTRIANGLE IS STORED COLUMNWISE IN A ONE-DIMENSIONAL ARRAY. INISYMROW INITIALIZES A (PART OF A) ROW OF A SYMMETRIC MATRIX,WHOSE UPPERTRIANGLE IS STORED COLUMNWISE IN A ONE-DIMENSIONAL ARRAY. KEYWORDS: ELEMENTARY PROCEDURE, VECTOR OPERATIONS, INITIALIZATION. ---------------------------------------------------------------------------- SUBSECTION: INIVEC. CALLING SEQUENCE: HEADING: PROCEDURE INIVEC(L, U, A, X); VALUE L,U,X; INTEGER L,U; REAL X; ARRAY A; CODE 31010; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER INDEX OF THE VECTOR A, RESPECTIVELY; A: ; ARRAY A[L : U], THE ARRAY TO BE INITIALIZED; X: ; INITIALIZATION CONSTANT. LANGUAGE: COMPASS. ---------------------------------------------------------------------------- SUBSECTION: INIMAT. CALLING SEQUENCE: HEADING: PROCEDURE INIMAT(LR, UR, LC, UC, A, X); VALUE LR,UR,LC,UC,X; INTEGER LR,UR,LC,UC; REAL X; ARRAY A; CODE 31011; FORMAL PARAMETERS: LR,UR,LC,UC: ; LOWER AND UPPER ROW-INDEX, AND LOWER AND UPPER COLUMN-INDEX OF THE MATRIX A, RESPECTIVELY; A: ; ARRAY A[LR : UR, LC : UC], THE ARRAY TO BE INITIALIZED; X: ; INITIALIZATION CONSTANT. LANGUAGE: COMPASS. ---------------------------------------------------------------------------- SUBSECTION: INIMATD. CALLING SEQUENCE: HEADING: PROCEDURE INIMATD(LR, UR, SHIFT, A, X); VALUE LR,UR,SHIFT,X; INTEGER LR,UR,SHIFT; REAL X; ARRAY A; CODE 31012; FORMAL PARAMETERS: LR,UR: ; LOWER AND UPPER ROW-INDEX OF THE CODIAGONAL TO BE INITIALIZED; SHIFT: ; DISTANCE BETWEEN DIAGONAL AND CODIAGONAL; A: ; ARRAY A[LR : UR, LR + SHIFT : UR + SHIFT], THE ARRAY TO BE INITIALIZED; X: ; INITIALIZATION CONSTANT. LANGUAGE: COMPASS. ---------------------------------------------------------------------------- SUBSECTION: INISYMD. CALLING SEQUENCE: HEADING: PROCEDURE INISYMD(LR, UR, SHIFT, A, X); VALUE LR,UR,SHIFT,X; INTEGER LR,UR,SHIFT; REAL X; ARRAY A; CODE 31013; FORMAL PARAMETERS: LR,UR: ; LOWER AND UPPER ROW-INDEX OF AN UPPER CODIAGONAL ( OF A SYMMETRIC MATRIX OF ORDER N ) TO BE INITIALIZED; LR AND UR SHOULD SATISFY : LR >= 1, UR <= N; SHIFT: ; DISTANCE BETWEEN DIAGONAL AND CODIAGONAL, (0 =< SHIFT < N); A: ; A ONE-DIMENSIONAL ARRAY A[1 : N * (N+1)//2] CONTAINING THE COLUMNWISE STORED UPPERTRIANGLE OF A SYMMETRIC MATRIX, SUCH THAT THE (I,J) - TH ELEMENT OF THE MATRIX IS A[ (J-1) * J//2 + I ]; J = 1,...,N; I = 1,...,J; X: ; INITIALIZATION CONSTANT. LANGUAGE: ALGOL 60. ---------------------------------------------------------------------------- SUBSECTION: INISYMROW. CALLING SEQUENCE: HEADING: PROCEDURE INISYMROW(L, U, I, A, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A; CODE 31014; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER INDEX OF ROW-ELEMENT TO BE INITIALIZED; I: ; ROW INDEX; A: ; A ONE-DIMENSIONAL ARRAY A[1 : N * (N+1)//2]; ARRAY A SHOULD CONTAIN A COLUMNWISE STORED UPPERTRIANGLE OF A SYMMETRIC MATRIX OF ORDER N, SUCH THAT THE (I,J) - TH ELEMENT OF THE MATRIX IS A[ (J - 1) * J//2 + I ]; J = 1, ... ,N; I = 1, ... ,J. FOR FIXED ORDER N, THE PARAMETERS L, U AND I SHOULD SATISFY THE CONDITIONS : 1 <=L<= N, 1 <=U<= N, 1 <=I<= N ; X: ; INITIALIZATION CONSTANT. ---------------------------------------------------------------------------- SOURCE TEXT(S): THE PROCEDURES INIVEC, INIMAT AND INIMATD ARE WRITTEN IN COMPASS, AN EQUIVALENT ALGOL 60 TEXT OF THESE COMPASS ROUTINES IS GIVEN. CODE 31010; PROCEDURE INIVEC(L, U, A, X); VALUE L,U,X; INTEGER L,U; REAL X; ARRAY A; FOR L:= L STEP 1 UNTIL U DO A[L]:= X; EOP CODE 31011; PROCEDURE INIMAT(LR, UR, LC, UC, A, X); VALUE LR,UR,LC,UC,X; INTEGER LR,UR,LC,UC; REAL X; ARRAY A; BEGIN INTEGER J; FOR LR:= LR STEP 1 UNTIL UR DO FOR J:= LC STEP 1 UNTIL UC DO A[LR, J]:= X END INIMAT; EOP CODE 31012; PROCEDURE INIMATD(LR, UR, SHIFT, A, X); VALUE LR,UR,SHIFT,X; INTEGER LR,UR,SHIFT; REAL X; ARRAY A; FOR LR:= LR STEP 1 UNTIL UR DO A[LR, LR + SHIFT]:= X; EOP CODE 31013; PROCEDURE INISYMD(LR, UR, SHIFT, A, X); VALUE LR,UR,SHIFT,X; INTEGER LR,UR,SHIFT; REAL X; ARRAY A; BEGIN SHIFT:= ABS(SHIFT); UR:= UR + SHIFT + 1; SHIFT:=LR + SHIFT; LR := (SHIFT - 3) * SHIFT // 2 + LR; FOR LR := SHIFT + LR WHILE SHIFT < UR DO BEGIN A[LR]:= X; SHIFT:= SHIFT + 1 END END INISYMD; EOP CODE 31014; PROCEDURE INISYMROW(L, U, I, A, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A; BEGIN INTEGER K; IF L <= I THEN BEGIN K:= (I - 1) * I//2; L := K + L; K := (IF U < I THEN U ELSE I) + K; FOR L:= L STEP 1 UNTIL K DO A[L]:= X; L := I + 1 END; IF U>I THENFOR K:=(L-1)*L//2+I, K+L-1 WHILE L<= U DO BEGIN A[K]:= X; L:= L + 1 END END INISYMROW; EOP ########################################################################## ########################################################################## 1SECTION : 1.1.2 (DECEMBER 1979) AUTHOR: P.A.BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730715. BRIEF DESCRIPTION: THIS SECTION CONTAINS SIX PROCEDURES. DUPVEC COPIES THE VECTOR GIVEN IN ARRAY B[L+SHIFT : U+SHIFT] TO THE VECTOR GIVEN IN ARRAY A[L:U]. DUPVECROW COPIES THE ROW VECTOR GIVEN IN ARRAY B[I:I, L:U] TO THE VECTOR GIVEN IN ARRAY A[L:U]. DUPROWVEC COPIES THE VECTOR GIVEN IN ARRAY B[L:U] TO THE ROW VECTOR GIVEN IN ARRAY A[I:I, L:U]. DUPVECCOL COPIES THE COLUMN VECTOR GIVEN IN ARRAY B[L:U, J:J] TO THE VECTOR GIVEN IN ARRAY A[L:U]. DUPCOLVEC COPIES THE VECTOR GIVEN IN ARRAY B[L:U] TO THE COLUMN VECTOR GIVEN IN ARRAY A[L:U, J:J]. DUPMAT COPIES THE MATRIX GIVEN IN ARRAY B[L:U, I:J] TO THE MATRIX GIVEN IN ARRAY A[L:U, I:J]. KEYWORDS: ELEMENTARY PROCEDURE, VECTOR OPERATIONS, DUPLICATION. ---------------------------------------------------------------------------- SUBSECTION: DUPVEC. CALLING SEQUENCE: HEADING: PROCEDURE DUPVEC(L, U, SHIFT, A, B); VALUE L,U,SHIFT; INTEGER L,U,SHIFT; ARRAY A,B; CODE 31030; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER VECTOR-INDEX, RESPECTIVELY; SHIFT: ; INDEX-SHIFTING PARAMETER; A,B: ; ARRAY A[L : U], B[L + SHIFT : U + SHIFT], B IS COPIED INTO A. LANGUAGE: COMPASS. SUBSECTION: DUPVECROW. CALLING SEQUENCE: HEADING: PROCEDURE DUPVECROW(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; CODE 31031; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER VECTOR ( COLUMN )-INDEX, RESPECTIVELY; I: ; ROW-INDEX OF THE ROW VECTOR B; A,B: ; ARRAY A[L : U], B[I : I, L : U], B IS COPIED INTO A. LANGUAGE: COMPASS. SUBSECTION: DUPROWVEC. CALLING SEQUENCE: HEADING: PROCEDURE DUPROWVEC(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; CODE 31032; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER VECTOR ( COLUMN )-INDEX, RESPECTIVELY; I: ; ROW-INDEX OF THE ROW VECTOR A; A,B: ; ARRAY A[I : I, L : U], B[L : U], B IS COPIED INTO A. LANGUAGE: COMPASS. SUBSECTION: DUPVECCOL. CALLING SEQUENCE: HEADING: PROCEDURE DUPVECCOL(L, U, J, A, B); VALUE L,U,J; INTEGER L,U,J; ARRAY A,B; CODE 31033; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER VECTOR ( ROW )-INDEX, RESPECTIVELY; J: ; COLUMN-INDEX OF THE COLUMN VECTOR B; A,B: ; ARRAY A[L : U], B[L : U, I : I], B IS COPIED INTO A. LANGUAGE: COMPASS. SUBSECTION: DUPCOLVEC. CALLING SEQUENCE: HEADING: PROCEDURE DUPCOLVEC(L, U, J, A, B); VALUE L,U,J; INTEGER L,U,J; ARRAY A,B; CODE 31034; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER VECTOR ( ROW )-INDEX, RESPECTIVELY; J: ; COLUMN-INDEX OF THE COLUMN VECTOR A; A,B: ; ARRAY A[L : U, I : I], B[L : U], B IS COPIED INTO A. LANGUAGE: COMPASS. SUBSECTION: DUPMAT. CALLING SEQUENCE: HEADING: PROCEDURE DUPMAT(L, U, I, J, A, B); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A,B; CODE 31035; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER ROW-INDEX, RESPECTIVELY; I,J: ; LOWER AND UPPER COLUMN-INDEX, RESPECTIVELY; A,B: ; ARRAY A[L : U, I : J], B[L : U, I : J], B IS COPIED INTO A. LANGUAGE: COMPASS. SOURCE TEXT(S): THE FOLLOWING PROCEDURES ARE WRITTEN IN COMPASS, AN EQUIVALENT ALGOL 60 TEXT OF THESE COMPASS ROUTINES IS GIVEN. CODE 31030; PROCEDURE DUPVEC(L, U, SHIFT, A, B); VALUE L,U,SHIFT; INTEGER L,U,SHIFT; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L]:= B[L+SHIFT]; EOP CODE 31031; PROCEDURE DUPVECROW(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L]:= B[I,L]; EOP CODE 31032; PROCEDURE DUPROWVEC(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[I,L]:= B[L]; EOP CODE 31033; PROCEDURE DUPVECCOL(L, U, J, A, B); VALUE L,U,J; INTEGER L,U,J; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L]:= B[L,J]; EOP CODE 31034; PROCEDURE DUPCOLVEC(L, U, J, A, B); VALUE L,U,J; INTEGER L,U,J; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L,J]:= B[L]; EOP CODE 31035; PROCEDURE DUPMAT(L, U, I, J, A, B); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A,B; BEGIN INTEGER K; FOR L:= L STEP 1 UNTIL U DO FOR K:= I STEP 1 UNTIL J DO A[L,K]:= B[L,K] END DUPMAT; EOP ########################################################################## ########################################################################## 1SECTION : 1.1.3 (DECEMBER 1979) AUTHORS: P.A.BEENTJES, C.G. VAN DER LAAN. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730715. BRIEF DESCRIPTION: THIS SECTION CONTAINS FIVE PROCEDURES. MULVEC STORES X TIMES THE VECTOR GIVEN IN ARRAY B[L+SHIFT:U+SHIFT] INTO THE VECTOR GIVEN IN ARRAY A[L:U]. MULROW STORES X TIMES THE ROW VECTOR GIVEN IN ARRAY B[J:J,L:U] INTO THE ROW VECTOR GIVEN IN ARRAY A[I:I,L:U]. MULCOL STORES X TIMES THE COLUMN VECTOR GIVEN IN ARRAY B[L:U,J:J] INTO THE COLUMN VECTOR GIVEN IN ARRAY A[L:U,I:I]. COLCST MULTIPLIES THE COLUMN VECTOR GIVEN IN ARRAY A[L:U,J:J] BY X. ROWCST MULTIPLIES THE ROW VECTOR GIVEN IN ARRAY A[I:I,L:U] BY X. KEYWORDS: ELEMENTARY PROCEDURE, VECTOR OPERATIONS, MULTIPLICATIONS. SUBSECTION: MULVEC. CALLING SEQUENCE: HEADING: PROCEDURE MULVEC(L, U, SHIFT, A, B, X); VALUE L,U,SHIFT,X; INTEGER L,U,SHIFT; REAL X; ARRAY A,B; CODE 31020; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER VECTOR-INDEX, RESPECTIVELY; SHIFT: ; SUBSCRIPT-SHIFTING PARAMETER; A,B: ; ARRAY A[L : U], B[L + SHIFT : U + SHIFT], THE PRODUCT OF THE CONTENTS OF B ARE STORED IN A. X: ; MULTIPLICATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: MULROW. CALLING SEQUENCE: HEADING: PROCEDURE MULROW(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; CODE 31021; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER COLUMN-INDEX, RESPECTIVELY; I,J: ; ROW-INDICES OF THE ROW VECTORS A AND B; A,B: ; ARRAY A[I : I, L : U], B[J : J, L : U], THE CONTENTS OF B MULTIPLIED BY X ARE STORED INTO A. X: ; MULTIPLICATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: MULCOL. CALLING SEQUENCE: HEADING: PROCEDURE MULCOL(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; CODE 31022; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER ROW-INDEX, RESPECTIVELY; I,J: ; COLUMN-INDICES OF THE COLUMN VECTORS A AND B; A,B: ; ARRAY A[L : U, I : I], B[L : U, J : J], THE CONTENTS OF B MULTIPLIED BY X ARE STORED INTO A; X: ; MULTIPLICATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: COLCST. CALLING SEQUENCE: HEADING: PROCEDURE COLCST(L, U, J, A, X); VALUE L,U,J,X; INTEGER L,U,J; REAL X; ARRAY A; CODE 31131; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER ROW-INDEX, RESPECTIVELY; J: ; COLUMN-INDEX; A: ; ARRAY A[L : U, J : J]; X: ; MULTIPLICATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: ROWCST. CALLING SEQUENCE: HEADING: PROCEDURE ROWCST(L, U, I, A, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A; CODE 31132; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER COLUMN-INDEX, RESPECTIVELY; I: ; ROW-INDEX; A: ; ARRAY A[I : I, L : U]; X: ; MULTIPLICATION FACTOR. LANGUAGE: COMPASS. SOURCE TEXT(S): THE FOLLOWING PROCEDURES ARE WRITTEN IN COMPASS, AN EQUIVALENT ALGOL 60 TEXT OF THESE COMPASS ROUTINES IS GIVEN. CODE 31020; PROCEDURE MULVEC(L, U, SHIFT, A, B, X); VALUE L,U,SHIFT,X; INTEGER L,U,SHIFT; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L]:= B[L+SHIFT]*X; EOP CODE 31021; PROCEDURE MULROW(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[I,L]:= B[J,L]*X; EOP CODE 31022; PROCEDURE MULCOL(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L,I]:= B[L,J]*X; EOP CODE 31131; PROCEDURE COLCST(L, U, J, A, X); VALUE L,U,J,X; INTEGER L,U,J; REAL X; ARRAY A; FOR L:= L STEP 1 UNTIL U DO A[L,J]:= A[L,J] * X; EOP CODE 31132; PROCEDURE ROWCST(L, U, I, A, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A; FOR L:= L STEP 1 UNTIL U DO A[I,L]:= A[I,L] * X; EOP ########################################################################## ########################################################################## 1SECTION : 1.1.4.1 (DECEMBER 1975) PAGE 1 AUTHORS: T.J.DEKKER, J.C.P.BUS, J.WOLLESWINKEL. CONTRIBUTORS: P.A.BEENTJES, J.C.P.BUS. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 741215. BRIEF DESCRIPTION: THIS SECTION CONTAINS NINE PROCEDURES. VECVEC:= SCALAR PRODUCT OF THE VECTOR GIVEN IN ARRAY A[L:U] AND ARRAY B[SHIFT + L : SHIFT + U]. MATVEC:= SCALAR PRODUCT OF THE ROW VECTOR GIVEN IN ARRAY A[I:I,L:U] AND THE VECTOR GIVEN IN ARRAY B[L:U]. TAMVEC:= SCALAR PRODUCT OF THE COLUMN VECTOR GIVEN IN ARRAY A[L:U, I:I] AND THE VECTOR GIVEN IN ARRAY B[L:U]. MATMAT:= SCALAR PRODUCT OF THE ROW VECTOR GIVEN IN ARRAY A[I:I,L:U] AND THE COLUMN VECTOR IN ARRAY B[L:U, J:J]. TAMMAT:= SCALAR PRODUCT OF THE COLUMN VECTORS GIVEN IN ARRAY A[L:U, I:I] AND ARRAY B[L:U, J:J]. MATTAM := SCALAR PRODUCT OF THE ROW VECTORS GIVEN IN ARRAY A[I:I,L:U] AND ARRAY B[J:J, L:U]. SEQVEC := SCALAR PRODUCT OF THE VECTORS GIVEN IN ARRAY A[IL : IL + (U+L-1)*(U-L)//2] AND ARRAY B[SHIFT + L : SHIFT + U], WHERE THE ELEMENTS OF THE FIRST VECTOR ARE A[IL+(J+L-1)*(J-L)//2] FOR J = L, ..., U. SCAPRD1:= SCALAR PRODUCT OF THE VECTORS GIVEN IN ARRAY A[MIN(LA, LA + (N - 1) * SA) : MAX(LA,LA + (N - 1) * SA)] AND ARRAY B[MIN(LB, LB + (N - 1) * SB) : MAX(LB,LB + (N - 1) * SB)] WHERE THE ELEMENTS OF THE VECTORS ARE A[LA+(J-1)*SA] AND B[LB+(J-1)*SB] FOR J = 1, ..., N. SYMMATVEC := THE SCALARPRODUCT OF ( A PART OF ) A VECTOR AND ( A PART OF ) A ROW OF A SYMMETRIC MATRIX , WHOSE UPPERTRIANGLE IS GIVEN COLUMNWISE IN AN ONE-DIMENSIONAL ARRAY. KEYWORDS: ELEMENTARY PROCEDURE, VECTOR OPERATIONS, SCALAR PRODUCTS. SUBSECTION: VECVEC. CALLING SEQUENCE: HEADING: REAL PROCEDURE VECVEC(L, U, SHIFT, A, B); VALUE L,U,SHIFT; INTEGER L,U,SHIFT; ARRAY A,B; CODE 34010; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; SHIFT: ; INDEX-SHIFTING PARAMETER OF THE VECTOR B; A,B: ; ARRAY A[L : U], B[L + SHIFT : U + SHIFT]. LANGUAGE: COMPASS. SUBSECTION: MATVEC. CALLING SEQUENCE: HEADING: REAL PROCEDURE MATVEC(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; CODE 34011; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; ROW-INDEX OF THE ROW VECTOR A; A,B: ; ARRAY A[I : I, L : U], B[L : U]. LANGUAGE: COMPASS. SUBSECTION: TAMVEC. CALLING SEQUENCE: HEADING: REAL PROCEDURE TAMVEC(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; CODE 34012; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; COLUMN-INDEX OF THE COLUMN VECTOR A; A,B: ; ARRAY A[L : U, I : I], B[L : U]. LANGUAGE: COMPASS. SUBSECTION: MATMAT. CALLING SEQUENCE: HEADING: REAL PROCEDURE MATMAT(L, U, I, J, A, B); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A,B; CODE 34013; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I,J: ; ROW-INDEX OF THE ROW VECTOR A AND COLUMN-INDEX OF THE COLUMN VECTOR B; A,B: ; ARRAY A[I : I, L : U], B[L : U, J : J]. LANGUAGE: COMPASS. SUBSECTION: TAMMAT. CALLING SEQUENCE: HEADING: REAL PROCEDURE TAMMAT(L, U, I, J, A, B); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A,B; CODE 34014; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I,J: ; COLUMN-INDICES OF THE COLUMN VECTORS A AND B, RESPECTIVELY; A,B: ; ARRAY A[L : U, I : I], B[L : U, J : J]. LANGUAGE: COMPASS. SUBSECTION: MATTAM. CALLING SEQUENCE: HEADING: REAL PROCEDURE MATTAM(L, U, I, J, A, B); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A,B; CODE 34015; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I,J: ; ROW-INDICES OF THE ROW VECTORS A AND B, RESPECTIVELY; A,B: ; ARRAY A[I : I, L : U], B[J : J, L : U]. LANGUAGE: COMPASS. SUBSECTION: SEQVEC. CALLING SEQUENCE: HEADING: REAL PROCEDURE SEQVEC(L, U, IL, SHIFT, A, B); VALUE L, U, IL, SHIFT; INTEGER L, U, IL, SHIFT; ARRAY A, B; CODE 34016; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; IL: ; LOWER BOUND OF THE VECTOR A; SHIFT: ; INDEX-SHIFTING PARAMETER OF THE VECTOR B; A,B: ; ARRAY A[P : Q], B[L + SHIFT, U + SHIFT]; THE VALUES OF P AND Q SHOULD SATISFY P <= IL AND Q >= IL+(U+L-1)*(U-L)//2). LANGUAGE: COMPASS. SUBSECTION: SCAPRD1. CALLING SEQUENCE: HEADING: REAL PROCEDURE SCAPRD1(LA, SA, LB, SB, N, A, B); VALUE LA,SA,LB,SB,N; INTEGER LA,SA,LB,SB,N; ARRAY A,B; CODE 34017; FORMAL PARAMETERS: N: ; UPPER BOUND OF THE RUNNING SUBSCRIPT; LA,LB: ; LOWER BOUNDS OF THE VECTORS A AND B, RESPECTIVELY; SA,SB: ; INDEX-SHIFTING PARAMETERS OF THE VECTORS A AND B, RESPECTIVELY; A,B: ; ARRAY A[P : Q], B[R : S]; THE SUBSCRIPTS ABOVE AND THE VALUES OF LA( +(J-1)*SA ) AND LB( +(J-1)*SB ),J = 1(1)N SHOULD NOT CONTRADICT EACH OTHER. LANGUAGE: COMPASS. SUBSECTION: SYMMATVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE SYMMATVEC(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; CODE 34018; SYMMATVEC:= THE VALUE OF THE SCALAR PRODUCT OF THE VECTORS GIVEN IN ARRAY A[P:Q] AND ARRAY B[L:U] , WHERE THE ELEMENTS OF THE FIRST VECTOR ARE: IF L; LOWER AND UPPER BOUND OF THE VECTOR B, RESPECTIVELY; L >=1; I: ; ROW INDEX OF THE MATRIX A; I >= 1; A: ; A ONE-DIMENSIONAL ARRAY A[P : Q] WITH: IF I > L THEN P=(I-1)*I//2 + L ELSE P=(L-1)*L//2 + I AND IF I > U THEN Q=(I-1)*I//2 + U ELSE Q=(U-1)*U//2 + I; B: ; A ONE-DIMENSIONAL ARRAY B[L:U]; PROCEDURES USED: VECVEC = CP34010, SEQVEC = CP34016. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SEE REFERENCE [2]. REFERENCES : [1] T.J.DEKKER. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA,PART 1, MATHEMATICAL CENTRE TRACT 22,AMSTERDAM (1970) [2] J.C.P.BUS. MINIMALISERING VAN FUNCTIES VAN MEERDERE VARIABELEN, MATHEMATICAL CENTRE, NR 29/72,AMSTERDAM (1972) SOURCE TEXT(S): THE FOLLOWING PROCEDURES, EXCEPT FOR SYMMATVEC ARE WRITTEN IN COMPASS, AN EQUIVALENT ALGOL 60 TEXT OF THESE COMPASS ROUTINES IS GIVEN. 0CODE 34010; REAL PROCEDURE VECVEC(L, U, SHIFT, A, B); VALUE L,U,SHIFT; INTEGER L,U,SHIFT; ARRAY A,B; BEGIN INTEGER K; REAL S; S:= 0; FOR K:=L STEP 1 UNTIL U DO S:= A[K] * B[SHIFT + K] + S; VECVEC:= S END VECVEC; EOP 0CODE 34011; REAL PROCEDURE MATVEC(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; BEGIN INTEGER K; REAL S; S:= 0; FOR K:=L STEP 1 UNTIL U DO S:= A[I,K] * B[K] + S; MATVEC:= S END MATVEC; EOP 0CODE 34012; REAL PROCEDURE TAMVEC(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; BEGIN INTEGER K; REAL S; S:= 0; FOR K:=L STEP 1 UNTIL U DO S:= A[K,I] * B[K] + S; TAMVEC:= S END TAMVEC; EOP 0CODE 34013; REAL PROCEDURE MATMAT(L, U, I, J, A, B); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A,B; BEGIN INTEGER K; REAL S; S:= 0; FOR K:=L STEP 1 UNTIL U DO S:= A[I,K] * B[K,J] + S; MATMAT:= S END MATMAT ; EOP 0CODE 34014; REAL PROCEDURE TAMMAT(L, U, I, J, A, B); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A,B; BEGIN INTEGER K; REAL S; S:= 0; FOR K:=L STEP 1 UNTIL U DO S:= A[K,I] * B[K,J] + S; TAMMAT:= S END TAMMAT; EOP 0CODE 34015; REAL PROCEDURE MATTAM(L, U, I, J, A, B); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A,B; BEGIN INTEGER K; REAL S; S:= 0; FOR K:=L STEP 1 UNTIL U DO S:= A[I,K] * B[J,K] + S; MATTAM:= S END MATTAM; EOP 0CODE 34016; REAL PROCEDURE SEQVEC(L, U, IL, SHIFT, A, B); VALUE L,U,IL,SHIFT; INTEGER L,U,IL,SHIFT; ARRAY A,B; BEGIN REAL S; S:= 0; FOR L:=L STEP 1 UNTIL U DO BEGIN S:= A[IL] * B[L + SHIFT] + S; IL:= IL + L END; SEQVEC:= S END SEQVEC; EOP 0CODE 34017; REAL PROCEDURE SCAPRD1(LA, SA, LB, SB, N, A, B); VALUE LA,SA,LB,SB,N; INTEGER LA,SA,LB,SB,N; ARRAY A,B; BEGIN REAL S;INTEGER K; S:= 0; FOR K:= 1 STEP 1 UNTIL N DO BEGIN S:=A[LA] * B[LB] + S; LA:= LA + SA; LB:= LB + SB END; SCAPRD1:= S END SCAPRD1; EOP 0CODE 34018; REAL PROCEDURE SYMMATVEC(L, U, I, A, B); VALUE L,U,I; INTEGER L,U,I; ARRAY A,B; BEGIN INTEGER K, M; M:= IF L > I THEN L ELSE I; K:= M * (M - 1) // 2; SYMMATVEC:= VECVEC(L, IF I <= U THEN I-1 ELSE U, K, B, A) + SEQVEC(M, U, K + I, 0, A, B) END SYMMATVEC; EOP ########################################################################## ########################################################################## 1SECTION : 1.1.4.2 (DECEMBER 1979) AUTHOR : D.WINTER. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 741215. BRIEF DESCRIPTION : THIS SECTION CONTAINS FIVE PROCEDURES : FULMATVEC CALCULATES THE VECTOR A * B, WHERE A IS A GIVEN MATRIX AND B IS A VECTOR. FULTAMVEC CALCULATES THE VECTOR A' * B, WHERE A' IS THE TRANSPOSED OF THE MATRIX A AND B IS A VECTOR. FULSYMMATVEC CALCULATES THE VECTOR A * B, WHERE A IS A SYMMETRIC MATRIX WHOSE UPPERTRIANGLE IS STORED COLUMNWISE IN A ONE-DIMENSIONAL ARRAY AND B IS A VECTOR. RESVEC CALCULATES THE RESIDUAL VECTOR A * B + X * C, WHERE A IS A GIVEN MATRIX, B AND C ARE VECTORS AND X IS A SCALAR. SYMRESVEC CALCULATES THE RESIDUAL VECTOR A * B + X * C, WHERE A IS A SYMMETRIC MATRIX WHOSE UPPERTRIANGLE IS STORED IN A ONE-DIMENSIONAL ARRAY, B AND C ARE VECTORS AND X IS A SCALAR. KEYWORDS : ELEMENTARY PROCEDURE, VECTOR OPERATION. SUBSECTION: FULMATVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE FULMATVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC; ARRAY A, B, C; CODE 31500; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX; B: ; ARRAY B[LC:UC]; THE VECTOR; C: ; ARRAY C[LR:UR]; THE RESULT A * B IS DELIVERED IN C. LANGUAGE: COMPASS 3. (FOR THE COMPASS-VERSION, THE PARAMETER B CAN BE ASSUMED TO HAVE BEEN SPECIFIED VALUE.) METHOD AND PERFORMANCE: SEE REFERENCE [1]. SUBSECTION: FULTAMVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE FULTAMVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC; ARRAY A, B, C; CODE 31501; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX; B: ; ARRAY B[LR:UR]; THE VECTOR; C: ; ARRAY C[LC:UC]; THE RESULT A' * B IS DELIVERED IN C; HERE A' DENOTES THE TRANSPOSED OF THE MATRIX A. LANGUAGE: COMPASS 3. (FOR THE COMPASS-VERSION, THE PARAMETER B CAN BE ASSUMED TO HAVE BEEN SPECIFIED VALUE.) METHOD AND PERFORMANCE: ELEMENTARY. SUBSECTION: FULSYMMATVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE FULSYMMATVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC, B; INTEGER LR, UR, LC, UC; ARRAY A, B, C; CODE 31502; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LR >= 1; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; LC >= 1; A: ; ARRAY A[L:U], WHERE: L = MIN(LR * (LR - 1) // 2 + LC, LC * (LC - 1) // 2 + LR), U = MAX(UR * (UR - 1) // 2 + UC, UC * (UC - 1) // 2 + UR) AND FOR I <= J THE (I,J)-TH ELEMENT, OTHERWISE THE (J,I)-TH ELEMENT OF THE SYMMETRIC MATRIX SHOULD BE GIVEN IN A[J * (J - 1) // 2 + I]; B: ; ARRAY B[LC:UC]; THE VECTOR; C: ; ARRAY C[LR:UR]; THE RESULT A * B IS DELIVERED IN C. PROCEDURES USED: SYMMATVEC = CP34018. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: ELEMENTARY. SUBSECTION: RESVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE RESVEC(LR, UR, LC, UC, A, B, C, X); VALUE LR, UR, LC, UC, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY A, B, C; CODE 31503; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX; B: ; ARRAY B[LC:UC]; THE VECTOR; X: ; THE VALUE OF THE MULTIPLYING SCALAR; C: ; ARRAY C[LR:UR]; THE RESULT A * B + X * C IS OVERWRITTEN ON C. LANGUAGE: COMPASS 3. (FOR THE COMPASS-VERSION, THE PARAMETER B CAN BE ASSUMED TO HAVE BEEN SPECIFIED VALUE.) METHOD AND PERFORMANCE: ELEMENTARY. SUBSECTION: SYMRESVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE SYMRESVEC(LR, UR, LC, UC, A, B, C, X); VALUE LR, UR, LC, UC, B, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY A, B, C; CODE 31504; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LR >= 1; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; LC >= 1; A: ; ARRAY A[L:U], WHERE: L = MIN(LR * (LR - 1) // 2 + LC, LC * (LC - 1) // 2 + LR), U = MAX(UR * (UR - 1) // 2 + UC, UC * (UC - 1) // 2 + UR) AND THE (I,J)-TH ELEMENT OF THE SYMMETRIC MATRIX SHOULD BE GIVEN IN A[J * (J - 1) // 2 + I]; B: ; ARRAY B[LC:UC]; THE VECTOR; X: ; THE VALUE OF THE MULTIPLYING SCALAR; C: ; ARRAY C[LR:UR]; THE RESULT A * B + X * C IS DELIVERED IN C. PROCEDURES USED: SYMMATVEC = CP34018. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: ELEMENTARY. REFERENCES: [1].T.J.DEKKER. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART1, MATHEMATICAL CENTRE TRACT 22, AMSTERDAM (1970). [2].J.C.P.BUS. MINIMALISERING VAN FUNKTIES VAN MEERDERE VARIABELEN, MATHEMATICAL CENTRE, NR 29/72, AMSTERDAM (1972). SOURCE TEXT(S): THE FOLLOWING PROCEDURES, EXCEPT FOR FULSYMMATVEC AND SYMRESVEC ARE WRITTEN IN COMPASS 3, AN EQUIVALENT ALGOL TEXT OF THESE COMPASS ROUTINES IS GIVEN. 0CODE 31500; PROCEDURE FULMATVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC; ARRAY A, B, C; BEGIN FOR LR := LR STEP 1 UNTIL UR DO C[LR] := MATVEC(LC, UC, LR, A, B); END FULMATVEC; EOP 0CODE 31501; PROCEDURE FULTAMVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC; ARRAY A, B, C; BEGIN FOR LC:= LC STEP 1 UNTIL UC DO C[LC]:= TAMVEC(LR, UR, LC, A, B); END FULTAMVEC; EOP 0CODE 31502; PROCEDURE FULSYMMATVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC, B; INTEGER LR, UR, LC, UC; ARRAY A, B, C; BEGIN FOR LR:= LR STEP 1 UNTIL UR DO C[LR]:= SYMMATVEC(LC, UC, LR, A, B) END FULSYMMATVEC; EOP 0CODE 31503; PROCEDURE RESVEC(LR, UR, LC, UC, A, B, C, X); VALUE LR, UR, LC, UC, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY A, B, C; BEGIN FOR LR:= LR STEP 1 UNTIL UR DO C[LR]:= MATVEC(LC, UC, LR, A, B) + C[LR] * X END RESVEC; EOP 0CODE 31504; PROCEDURE SYMRESVEC(LR, UR, LC, UC, A, B, C, X); VALUE LR, UR, LC, UC, B, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY A, B, C; BEGIN FOR LR:= LR STEP 1 UNTIL UR DO C[LR]:= SYMMATVEC(LC, UC, LR, A, B) + C[LR] * X END SYMRESVEC; EOP ########################################################################## ########################################################################## 1SECTION : 1.1.4.3 (DECEMBER 1979) AUTHOR: D.T.WINTER. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 751208. BRIEF DESCRIPTION: THIS SECTION CONTAINS PROCEDURES THAT MULTIPLY A GIVEN MATRIX BY A (GENERALIZED) HOUSEHOLDER MATRIX, I.E. A MATRIX M = I + X * U * U', WHERE I IS THE UNIT MATRIX, X A REAL CONSTANT AND U A VECTOR (CALLED THE HOUSEHOLDER CONSTANT AND HOUSEHOLDER VECTOR, RESPECTIVELY) HSHVECMAT PREMULTIPLIES A MATRIX BY A HOUSEHOLDER MATRIX, THE HOUSEHOLDER VECTOR HAS BEEN STORED IN A ONE-DIMENSIONAL ARRAY. HSHCOLMAT PREMULTIPLIES A MATRIX BY A HOUSEHOLDER MATRIX, THE HOUSEHOLDER VECTOR HAS BEEN STORED AS A COLUMN IN A TWO-DIMENSIONAL ARRAY. HSHROWMAT PREMULTIPLIES A MATRIX BY A HOUSEHOLDER MATRIX, THE HOUSEHOLDER VECTOR HAS BEEN STORED AS A ROW IN A TWO-DIMENSIONAL ARRAY. HSHVECTAM POSTMULTIPLIES A MATRIX BY A HOUSEHOLDER MATRIX, THE HOUSEHOLDER VECTOR HAS BEEN STORED IN A ONE-DIMENSIONAL ARRAY. HSHCOLTAM POSTMULTIPLIES A MATRIX BY A HOUSEHOLDER MATRIX, THE HOUSEHOLDER VECTOR HAS BEEN STORED AS A COLUMN IN A TWO-DIMENSIONAL ARRAY. HSHROWTAM POSTMULTIPLIES A MATRIX BY A HOUSEHOLDER MATRIX, THE HOUSEHOLDER VECTOR HAS BEEN STORED AS A ROW IN A TWO-DIMENSIONAL ARRAY. KEYWORDS: HOUSEHOLDER MATRIX ORTHOGONAL TRANSFORMATION LANGUAGE: ALGOL 60 SUBSECTION: HSHVECMAT CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE HSHVECMAT(LR, UR, LC, UC, X, U, A); VALUE LR, UR, LC, UC, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY U, A; CODE 31070; THE MEANING OF THE FORMAL PARAMETERS IS: LR,UR: ; THE LOWER AND UPPER ROW INDICES; LC,UC: ; THE LOWER AND UPPER COLUMN INDICES; X: ; THE HOUSEHOLDER CONSTANT; U: ; ARRAY U[LR:UR]; THE HOUSEHOLDER VECTOR; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX TO BE PREMULTIPLIED BY THE HOUSEHOLDER MATRIX. PROCEDURES USED: TAMVEC = CP34012 ELMCOLVEC = CP34022 RUNNING TIME: PROPORTIONAL TO (UC-LC+1)*(UR-LR+1) SUBSECTION: HSHCOLMAT CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE HSHCOLMAT(LR, UR, LC, UC, I, X, U, A); VALUE LR, UR, LC, UC, I, X; INTEGER LR, UR, LC, UC, I; REAL X; ARRAY U, A; CODE 31071; THE MEANING OF THE FORMAL PARAMETERS IS: LR,UR: ; THE LOWER AND UPPER ROW INDICES; LC,UC: ; THE LOWER AND UPPER COLUMN INDICES; I: ; THE COLUMN INDEX OF THE HOUSEHOLDER VECTOR; X: ; THE HOUSEHOLDER CONSTANT; U: ; ARRAY U[LR:UR,I:I]; THE HOUSEHOLDER VECTOR; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX TO BE PREMULTIPLIED BY THE HOUSEHOLDER MATRIX. PROCEDURES USED: TAMMAT = CP34014 ELMCOL = CP34023 RUNNING TIME: PROPORTIONAL TO (UC-LC+1)*(UR-LR+1) SUBSECTION: HSHROWMAT CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE HSHROWMAT(LR, UR, LC, UC, I, X, U, A); VALUE LR, UR, LC, UC, I, X; INTEGER LR, UR, LC, UC, I; REAL X; ARRAY U, A; CODE 31072; THE MEANING OF THE FORMAL PARAMETERS IS: LR,UR: ; THE LOWER AND UPPER ROW INDICES; LC,UC: ; THE LOWER AND UPPER COLUMN INDICES; I: ; THE ROW INDEX OF THE HOUSEHOLDER VECTOR; X: ; THE HOUSEHOLDER CONSTANT; U: ; ARRAY U[I:I,LR:UR]; THE HOUSEHOLDER VECTOR; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX TO BE PREMULTIPLIED BY THE HOUSEHOLDER MATRIX. PROCEDURES USED: MATMAT = CP34013 ELMCOLROW = CP34027 RUNNING TIME: PROPORTIONAL TO (UC-LC+1)*(UR-LR+1) SUBSECTION: HSHVECTAM CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE HSHVECTAM(LR, UR, LC, UC, X, U, A); VALUE LR, UR, LC, UC, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY U, A; CODE 31073; THE MEANING OF THE FORMAL PARAMETERS IS: LR,UR: ; THE LOWER AND UPPER ROW INDICES; LC,UC: ; THE LOWER AND UPPER COLUMN INDICES; X: ; THE HOUSEHOLDER CONSTANT; U: ; ARRAY U[LC:UC]; THE HOUSEHOLDER VECTOR; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX TO BE POSTMULTIPLIED BY THE HOUSEHOLDER MATRIX. PROCEDURES USED: MATVEC = CP34011 ELMROWVEC = CP34027 RUNNING TIME: PROPORTIONAL TO (UC-LC+1)*(UR-LR+1) SUBSECTION: HSHCOLTAM CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE HSHCOLTAM(LR, UR, LC, UC, I, X, U, A); VALUE LR, UR, LC, UC, I, X; INTEGER LR, UR, LC, UC, I; REAL X; ARRAY U, A; CODE 31074; THE MEANING OF THE FORMAL PARAMETERS IS: LR,UR: ; THE LOWER AND UPPER ROW INDICES; LC,UC: ; THE LOWER AND UPPER COLUMN INDICES; I: ; THE COLUMN INDEX OF THE HOUSEHOLDER VECTOR; X: ; THE HOUSEHOLDER CONSTANT; U: ; ARRAY U[LC:UC,I:I]; THE HOUSEHOLDER VECTOR; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX TO BE POSTMULTIPLIED BY THE HOUSEHOLDER MATRIX. PROCEDURES USED: MATMAT = CP34013 ELMROWCOL = CP34028 RUNNING TIME: PROPORTIONAL TO (UC-LC+1)*(UR-LR+1) SUBSECTION: HSHROWTAM CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE HSHROWTAM(LR, UR, LC, UC, I, X, U, A); VALUE LR, UR, LC, UC, I, X; INTEGER LR, UR, LC, UC, I; REAL X; ARRAY U, A; CODE 31075; THE MEANING OF THE FORMAL PARAMETERS IS: LR,UR: ; THE LOWER AND UPPER ROW INDICES; LC,UC: ; THE LOWER AND UPPER COLUMN INDICES; I: ; THE ROW INDEX OF THE HOUSEHOLDER VECTOR; X: ; THE HOUSEHOLDER CONSTANT; U: ; ARRAY U[I:I,LC:UC]; THE HOUSEHOLDER VECTOR; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX TO BE POSTMULTIPLIED BY THE HOUSEHOLDER MATRIX. PROCEDURES USED: MATTAM = CP34015 ELMROW = CP34024 RUNNING TIME: PROPORTIONAL TO (UC-LC+1)*(UR-LR+1) SOURCE TEXTS: 0CODE 31070; PROCEDURE HSHVECMAT(LR, UR, LC, UC, X, U, A); VALUE LR, UR, LC, UC, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY U, A; BEGIN FOR LC:= LC STEP 1 UNTIL UC DO ELMCOLVEC(LR, UR, LC, A, U, TAMVEC(LR, UR, LC, A, U) * X) END; EOP 0CODE 31071; PROCEDURE HSHCOLMAT(LR, UR, LC, UC, I, X, U, A); VALUE LR, UR, LC, UC, I, X; INTEGER LR, UR, LC, UC, I; REAL X; ARRAY U, A; BEGIN FOR LC:= LC STEP 1 UNTIL UC DO ELMCOL(LR, UR, LC, I, A, U, TAMMAT(LR, UR, LC, I, A, U) * X) END EOP 0CODE 31072; PROCEDURE HSHROWMAT(LR, UR, LC, UC, I, X, U, A); VALUE LR, UR, LC, UC, I, X; INTEGER LR, UR, LC, UC, I; REAL X; ARRAY U, A; BEGIN FOR LC:= LC STEP 1 UNTIL UC DO ELMCOLROW(LR, UR, LC, I, A, U, MATMAT(LR, UR, I, LC, U, A) * X) END; EOP 0CODE 31073; PROCEDURE HSHVECTAM(LR, UR, LC, UC, X, U, A); VALUE LR, UR, LC, UC, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY U, A; BEGIN FOR LR:= LR STEP 1 UNTIL UR DO ELMROWVEC(LC, UC, LR, A, U, MATVEC(LC, UC, LR, A, U) * X) END; EOP 0CODE 31074; PROCEDURE HSHCOLTAM(LR, UR, LC, UC, I, X, U, A); VALUE LR, UR, LC, UC, I, X; INTEGER LR, UR, LC, UC, I; REAL X; ARRAY U, A; BEGIN FOR LR:= LR STEP 1 UNTIL UR DO ELMROWCOL(LC, UC, LR, I, A, U, MATMAT(LC, UC, LR, I, A, U) * X) END; EOP 0CODE 31075; PROCEDURE HSHROWTAM(LR, UR, LC, UC, I, X, U, A); VALUE LR, UR, LC, UC, I, X; INTEGER LR, UR, LC, UC, I; REAL X; ARRAY U, A; BEGIN FOR LR:= LR STEP 1 UNTIL UR DO ELMROW(LC, UC, LR, I, A, U, MATTAM(LC, UC, LR, I, A, U) * X) END; EOP ########################################################################## ########################################################################## 1SECTION : 1.1.5 (APRIL 1974) AUTHORS: T.J.DEKKER, C.G. VAN DER LAAN. CONTRIBUTOR: P.A.BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730715. BRIEF DESCRIPTION: THIS SECTION CONTAINS TEN PROCEDURES. ELMVEC ADDS X TIMES THE VECTOR GIVEN IN ARRAY B[SHIFT+L : SHIFT+U] TO THE VECTOR GIVEN IN ARRAY A[L:U]. ELMCOL ADDS X TIMES THE COLUMN VECTOR GIVEN IN ARRAY B[L:U, J:J] TO THE COLUMN VECTOR GIVEN IN ARRAY A[L:U, I:I]. ELMROW ADDS X TIMES THE ROW VECTOR GIVEN IN ARRAY B[J:J, L:U] TO THE ROW VECTOR GIVEN IN ARRAY A[I:I, L:U]. ELMVECCOL ADDS X TIMES THE COLUMN VECTOR GIVEN IN ARRAY B[L:U, I:I] TO THE VECTOR GIVEN IN ARRAY A[L:U]. ELMCOLVEC ADDS X TIMES THE VECTOR GIVEN IN ARRAY B[L:U] TO THE COLUMN VECTOR GIVEN IN ARRAY A[L:U, I:I]. ELMVECROW ADDS X TIMES THE ROW VECTOR GIVEN IN ARRAY B[I:I, L:U] TO THE VECTOR GIVEN IN ARRAY A[L:U]. ELMROWVEC ADDS X TIMES THE VECTOR GIVEN IN ARRAY B[L:U] TO THE ROW VECTOR GIVEN IN ARRAY A[I:I, L:U]. ELMCOLROW ADDS X TIMES THE ROW VECTOR GIVEN IN ARRAY B[J:J, L:U] TO THE COLUMN VECTOR GIVEN IN ARRAY A[L:U, I:I]. ELMROWCOL ADDS X TIMES THE COLUMN VECTOR GIVEN IN ARRAY B[L:U, J:J] TO THE ROW VECTOR GIVEN IN ARRAY A[I:I, L:U]. MAXELMROW ADDS X TIMES THE ROW VECTOR GIVEN IN ARRAY B[J:J, L:U] TO THE ROW VECTOR GIVEN IN ARRAY A[I:I, L:U]. MOREOVER, MAXELMROW:= THE VALUE OF THE SECOND SUBSCRIPT OF AN ELEMENT OF THE NEW ROW VECTOR IN ARRAY A WHICH IS OF MAXIMUM ABSOLUTE VALUE. IF, HOWEVER, L > U, THEN MAXELMROW:= L. KEYWORDS: ELEMENTARY PROCEDURE, VECTOR OPERATIONS, ELIMINATION. SUBSECTION: ELMVEC. CALLING SEQUENCE: HEADING: PROCEDURE ELMVEC(L, U, SHIFT, A, B, X); VALUE L,U,SHIFT,X; INTEGER L,U,SHIFT; REAL X; ARRAY A,B; CODE 34020; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; SHIFT: ; INDEX-SHIFTING PARAMETER OF THE VECTOR B; A,B: ; ARRAY A[L : U], B[L + SHIFT : U + SHIFT]; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: ELMCOL. CALLING SEQUENCE: HEADING: PROCEDURE ELMCOL(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; CODE 34023; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; COLUMN-INDEX OF THE COLUMN VECTOR A; J: ; COLUMN-INDEX OF THE COLUMN VECTOR B; A,B: ; ARRAY A[L : U, I : I], B[L : U, J : J]; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: ELMROW. CALLING SEQUENCE: HEADING: PROCEDURE ELMROW(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; CODE 34024; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; ROW-INDEX OF THE ROW VECTOR A; J: ; ROW-INDEX OF THE ROW VECTOR B; A,B: ; ARRAY A[I : I, L : U], B[J : J, L : U]; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: ELMVECCOL. CALLING SEQUENCE: HEADING: PROCEDURE ELMVECCOL(L, U, I, A, B, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A,B; CODE 34021; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; COLUMN-INDEX OF THE COLUMN VECTOR B; A,B: ; ARRAY A[L : U], B[L : U, I : I]; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. SUBSECTION ELMCOLVEC. CALLING SEQUENCE: HEADING: PROCEDURE ELMCOLVEC(L, U, I, A, B, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A,B; CODE 34022; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; COLUMN-INDEX OF THE COLUMN VECTOR A; A,B: ; ARRAY A[L : U, I : I], B[L : U]; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: ELMVECROW. CALLING SEQUENCE: HEADING: PROCEDURE ELMVECROW(L, U, I, A, B, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A,B; CODE 34026; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; ROW-INDEX OF THE ROW VECTOR B; A,B: ; ARRAY A[L : U], B[I : I, L : U]; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: ELMROWVEC. CALLING SEQUENCE: HEADING: PROCEDURE ELMROWVEC(L, U, I, A, B, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A,B; CODE 34027; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; ROW-INDEX OF THE ROW VECTOR A; A,B: ; ARRAY A[I : I, L : U], B[L : U]; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: ELMCOLROW. CALLING SEQUENCE: HEADING: PROCEDURE ELMCOLROW(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; CODE 34029; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; COLUMN-INDEX OF THE COLUMN VECTOR A; J: ; ROW-INDEX OF THE ROW VECTOR B; A,B: ; ARRAY A[L : U, I : I], B[J : J, L : U], WHEN A = B THEN CORRECT ELIMINATION IS GUARANTEED ONLY WHEN THE ROW AND COLUMN ARE DISJUNCT; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: ELMROWCOL. CALLING SEQUENCE: HEADING: PROCEDURE ELMROWCOL(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; CODE 34028; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; ROW-INDEX OF THE ROW VECTOR A; J: ; COLUMN-INDEX OF THE COLUMN VECTOR B; A,B: ; ARRAY A[I : I, L : U], B[L : U, J : J], WHEN A = B THEN CORRECT ELIMINATION IS GUARANTEED ONLY WHEN THE ROW AND COLUMN ARE DISJUNCT; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. SUBSECTION: MAXELMROW. CALLING SEQUENCE: HEADING: INTEGER PROCEDURE MAXELMROW(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; CODE 34025; MAXELMROW DELIVERS THE INDEX OF THE MAXIMAL ELEMENT AFTER ELIMINA- TION STEP IN ARRAY A. FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; ROW-INDEX OF THE ROW VECTOR A; J: ; ROW-INDEX OF THE ROW VECTOR B; A,B: ; ARRAY A[I : I, L : U], B[I : I, L : U]; X: ; ELIMINATION FACTOR. LANGUAGE: COMPASS. REFERENCES: [1].T.J.DEKKER. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1, MATHEMATICAL CENTRE TRACT 22, AMSTERDAM (1970). SOURCE TEXT(S): THE FOLLOWING PROCEDURES ARE WRITTEN IN COMPASS, AN EQUIVALENT ALGOL 60 TEXT OF THESE COMPASS ROUTINES IS GIVEN. ELMVEC ELMROW ELMVECCOL ELMCOLVEC MAXELMROW CODE 34020; PROCEDURE ELMVEC(L, U, SHIFT, A, B, X); VALUE L,U,SHIFT,X; INTEGER L,U,SHIFT; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L]:= A[L] + B[L + SHIFT] * X; EOP CODE 34023; PROCEDURE ELMCOL(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L,I]:= A[L,I] + B[L,J] * X; EOP CODE 34024; PROCEDURE ELMROW(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[I,L]:= A[I,L] + B[J,L] * X; EOP CODE 34021; PROCEDURE ELMVECCOL(L, U, I, A, B, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L]:= A[L] + B[L,I] * X; EOP CODE 34022; PROCEDURE ELMCOLVEC(L, U, I, A, B, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L,I]:= A[L,I] + B[L] * X; EOP CODE 34026; PROCEDURE ELMVECROW(L, U, I, A, B, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L]:= A[L] + B[I,L] * X; COMMENT ; EOP CODE 34027; PROCEDURE ELMROWVEC(L, U, I, A, B, X); VALUE L,U,I,X; INTEGER L,U,I; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[I,L]:= A[I,L] + B[L] * X; EOP CODE 34029; PROCEDURE ELMCOLROW(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[L,I]:= A[L,I] + B[J,L] * X; EOP CODE 34028; PROCEDURE ELMROWCOL(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; FOR L:= L STEP 1 UNTIL U DO A[I,L]:= A[I,L] + B[L,J] * X; EOP CODE 34025; INTEGER PROCEDURE MAXELMROW(L, U, I, J, A, B, X); VALUE L,U,I,J,X; INTEGER L,U,I,J; REAL X; ARRAY A,B; BEGIN INTEGER K; REAL R, S; S:= 0; FOR K:= L STEP 1 UNTIL U DO BEGIN R:= A[I,K]:= A[I,K] + B[J,K] * X;IF ABS(R) > S THEN BEGIN S:= ABS(R); L:= K END END; MAXELMROW:= L END MAXELMROW; EOP ########################################################################## ########################################################################## 1SECTION : 1.1.6 (APRIL 1974) AUTHOR: T.J.DEKKER. CONTRIBUTOR: P.A.BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730715. BRIEF DESCRIPTION: THIS SECTION CONTAINS SIX PROCEDURES. ICHVEC INTERCHANGES THE ELEMENTS OF THE VECTOR GIVEN IN ARRAY A[L:U] AND ARRAY A[SHIFT + L : SHIFT + U]. ICHCOL INTERCHANGES THE ELEMENTS OF THE COLUMN VECTORS GIVEN IN ARRAY A[L:U, I:I] AND ARRAY A[L:U, J:J]. ICHROW INTERCHANGES THE ELEMENTS OF THE ROW VECTORS GIVEN IN ARRAY A[I:I, L:U] AND ARRAY A[J:J, L:U]. ICHROWCOL INTERCHANGES THE ELEMENTS OF THE ROW VECTOR GIVEN IN ARRAY A[I:I, L:U] AND THE COLUMN VECTOR GIVEN IN ARRAY A[L:U, J:J]. ICHSEQVEC INTERCHANGES THE ELEMENTS OF THE VECTORS GIVEN IN ARRAY A[IL : IL + (U + L - 1)*(U - L)//2] AND ARRAY A[SHIFT+L : SHIFT+U], WHERE THE ELEMENTS OF THE FIRST VECTOR ARE A[IL+(J+L-1)*(J-L)//2] FOR J = L,..., U. ICHSEQ INTERCHANGES THE ELEMENTS OF THE VECTORS GIVEN IN ARRAY A[IL : IL + (U + L - 1) * (U - L) // 2] AND ARRAY A[SHIFT + IL : SHIFT + IL + (U + L - 1) * (U - L) // 2] WHERE THE ELEMENTS OF THE VECTORS ARE A[IL + (J + L - 1) * (J - L) // 2] AND A[SHIFT + IL + (J + L - 1) * (J - L) // 2] FOR J = L ,..., U . KEYWORDS: ELEMENTARY PROCEDURE, VECTOR OPERATIONS, INTERCHANGING. SUBSECTION: ICHVEC. CALLING SEQUENCE: HEADING: PROCEDURE ICHVEC(L, U, SHIFT, A); VALUE L,U,SHIFT; INTEGER L,U,SHIFT; ARRAY A; CODE 34030; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; SHIFT: ; INDEX-SHIFTING PARAMETER; A: ; ARRAY A[P : Q]; P AND Q SHOULD SATISFY: P <= L, Q >= U, P <= L + SHIFT AND Q >= U + SHIFT. LANGUAGE: COMPASS. SUBSECTION: ICHCOL. CALLING SEQUENCE: HEADING: PROCEDURE ICHCOL(L, U, I, J, A); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A; CODE 34031; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I,J: ; COLUMN-INDICES OF THE COLUMN VECTORS OF ARRAY A; A: ; ARRAY A[L : U, P : Q]; P AND Q SHOULD SATISFY: P <= I, P <= J, Q >= I AND Q >= J. LANGUAGE: COMPASS. SUBSECTION: ICHROW. CALLING SEQUENCE: HEADING: PROCEDURE ICHROW(L, U, I, J, A); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A; CODE 34032; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I,J: ; ROW-INDICES OF THE ROW VECTORS OF ARRAY A; A: ; ARRAY A[P : Q, L : U]; P AND Q SHOULD SATISFY: P <= I, P <= J, Q >= I AND Q >= J. LANGUAGE: COMPASS. SUBSECTION: ICHROWCOL. CALLING SEQUENCE: HEADING: PROCEDURE ICHROWCOL(L, U, I, J, A); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A; CODE 34033; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; ROW-INDEX OF THE ROW VECTOR OF ARRAY A; J: ; COLUMN-INDEX OF THE COLUMN VECTOR OF ARRAY A; A: ; ARRAY A[P : Q, R : S]; P, Q, R AND S SHOULD SATISFY: P <= I, P <= L, Q >= I, Q >= U, R <= J, R <= L, S >= J AND S >= U, FURTHERMORE THE ROW AND COLUMN TO BE INTERCHANGED SHOULD BE DISJUNCT. LANGUAGE: COMPASS. ---------------------------------------------------------------------------- SUBSECTION: ICHSEQVEC. CALLING SEQUENCE: HEADING: PROCEDURE ICHSEQVEC(L, U, IL, SHIFT, A); VALUE L,U,IL,SHIFT; INTEGER L,U,IL,SHIFT; ARRAY A; CODE 34034; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; IL: ; LOWER BOUND OF THE VECTOR A; SHIFT: ; INDEX-SHIFTING PARAMETER; A: ; ARRAY A[P : Q]; THE SUBSCRIPTS ABOVE AND THE VALUES OF L(+SHIFT), U(+SHIFT) AND IL+(U+L-1)*(U-L)//2 SHOULD NOT CONTRADICT EACH OTHER. LANGUAGE: COMPASS. SUBSECTION: ICHSEQ. CALLING SEQUENCE: HEADING: PROCEDURE ICHSEQ(L, U, IL, SHIFT, A); VALUE L,U,IL,SHIFT; INTEGER L,U,IL,SHIFT; ARRAY A; CODE 34035; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; IL: ; LOWER BOUND OF THE VECTOR A; SHIFT: ; INDEX-SHIFTING PARAMETER; A: ; ARRAY A[P : Q]; THE SUBSCRIPTS ABOVE AND THE VALUES OF IL+(J+L-1)*(J-L)//2 ( +SHIFT ),J = L(1)U, SHOULD NOT CONTRADICT EACH OTHER. LANGUAGE: COMPASS. REFERENCES: [1].T.J.DEKKER. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1, MATHEMATICAL CENTRE TRACT 22, AMSTERDAM (1970). SOURCE TEXT(S): THE FOLLOWING PROCEDURES ARE WRITTEN IN COMPASS, AN EQUIVALENT ALGOL 60 TEXT OF THESE COMPASS ROUTINES IS GIVEN. 0CODE 34030; PROCEDURE ICHVEC(L, U, SHIFT, A); VALUE L,U,SHIFT; INTEGER L,U,SHIFT; ARRAY A; BEGIN REAL R; FOR L:= L STEP 1 UNTIL U DO BEGIN R:= A[L]; A[L]:= A[L + SHIFT]; A[L + SHIFT]:= R END END ICHVEC; EOP CODE 34031; PROCEDURE ICHCOL(L, U, I, J, A); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A; BEGIN REAL R; FOR L:= L STEP 1 UNTIL U DO BEGIN R:= A[L,I]; A[L,I]:= A[L,J]; A[L,J]:= R END END ICHCOL; EOP CODE 34032; PROCEDURE ICHROW(L, U, I, J, A); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A; BEGIN REAL R; FOR L:= L STEP 1 UNTIL U DO BEGIN R:= A[I,L]; A[I,L]:= A[J,L]; A[J,L]:= R END END ICHROW ; EOP CODE 34033; PROCEDURE ICHROWCOL(L, U, I, J, A); VALUE L,U,I,J; INTEGER L,U,I,J; ARRAY A; BEGIN REAL R; FOR L:= L STEP 1 UNTIL U DO BEGIN R:= A[I,L]; A[I,L]:= A[L,J]; A[L,J]:= R END END ICHROWCOL; EOP CODE 34034; PROCEDURE ICHSEQVEC(L, U, IL, SHIFT, A); VALUE L,U,IL,SHIFT; INTEGER L,U,IL,SHIFT; ARRAY A; BEGIN REAL R; FOR L:= L STEP 1 UNTIL U DO BEGIN R:= A[IL]; A[IL]:= A[L + SHIFT]; A[L + SHIFT]:= R; IL:= IL + L END END ICHSEQVEC; EOP CODE 34035; PROCEDURE ICHSEQ(L, U, IL, SHIFT, A); VALUE L,U,IL,SHIFT; INTEGER L,U,IL,SHIFT; ARRAY A; BEGIN REAL R; FOR L:= L STEP 1 UNTIL U DO BEGIN R:= A[IL]; A[IL]:= A[IL + SHIFT]; A[IL + SHIFT]:= R; IL:= IL + L END END ICHSEQ; EOP ########################################################################## ########################################################################## 1SECTION : 1.1.7 (DECEMBER 1979) AUTHOR: P.A.BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730715. BRIEF DESCRIPTION: THIS SECTION CONTAINS TWO PROCEDURES. ROTCOL REPLACES THE COLUMN VECTOR X GIVEN IN ARRAY A[L:U, I:I] AND THE COLUMN VECTOR Y GIVEN IN ARRAY A[L:U, J:J] BY THE VECTORS CX + SY AND CY - SX. ROTROW REPLACES THE ROW VECTOR X GIVEN IN ARRAY A[I:I, L:U] AND THE ROW VECTOR Y GIVEN IN ARRAY A[J:J, L:U] BY THE VECTORS CX + SY AND CY - SX. KEYWORDS: ELEMENTARY PROCEDURE, VECTOR OPERATIONS, ROTATION. SUBSECTION: ROTCOL. CALLING SEQUENCE: HEADING: PROCEDURE ROTCOL(L, U, I, J, A, C, S); VALUE L,U,I,J,C,S; INTEGER L,U,I,J; REAL C,S; ARRAY A; CODE 34040; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I,J: ; COLUMN-INDICES OF THE COLUMN VECTORS OF ARRAY A; A: ; ARRAY A[L : U, P : Q]; P AND Q SHOULD SATISFY: P <= I, P <= J, Q >= I AND Q >= J; C,S: ; ROTATION FACTORS. LANGUAGE: COMPASS. SUBSECTION: ROTROW. CALLING SEQUENCE: HEADING: PROCEDURE ROTROW(L, U, I, J, A, C, S); VALUE L,U,I,J,C,S; INTEGER L,U,I,J; REAL C,S; ARRAY A; CODE 34041; FORMAL PARAMETERS: L,U: ; LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT; I,J: ; ROW-INDICES OF THE ROW-VECTORS OF ARRAY A; A: ; ARRAY A[P : Q, L : U]; P AND Q SHOULD SATISFY: P <= I, P <= J, Q >= I AND Q >= J; C,S: ; ROTATION FACTORS. LANGUAGE: COMPASS. REFERENCES: [1].T.J.DEKKER. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1, MATHEMATICAL CENTRE TRACT 22, AMSTERDAM (1970). SOURCE TEXT(S): THE FOLLOWING PROCEDURES ARE WRITTEN IN COMPASS, AN EQUIVALENT ALGOL 60 TEXT OF THESE COMPASS ROUTINES IS GIVEN. CODE 34040; PROCEDURE ROTCOL(L, U, I, J, A, C, S); VALUE L,U,I,J,C,S; INTEGER L,U,I,J; REAL C,S; ARRAY A; BEGIN REAL X, Y; FOR L:= L STEP 1 UNTIL U DO BEGIN X:= A[L,I]; Y:= A[L,J]; A[L,I]:= X * C + Y * S; A[L,J]:= Y * C - X * S END END ROTCOL; EOP CODE 34041; PROCEDURE ROTROW(L, U, I, J, A, C, S); VALUE L,U,I,J,C,S; INTEGER L,U,I,J; REAL C,S; ARRAY A; BEGIN REAL X, Y; FOR L:= L STEP 1 UNTIL U DO BEGIN X:= A[I,L]; Y:= A[J,L]; A[I,L]:= X * C + Y * S; A[J,L]:= Y * C - X * S END END ROTROW; EOP ########################################################################## ########################################################################## 1SECTION : 1.1.8 (OCTOBER 1975) AUTHORS: C.G. VAN DER LAAN AND J.C.P. BUS. CONTRIBUTOR: J.C.P. BUS. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 740921. BRIEF DESCRIPTION: INFNRMVEC CALCULATES THE INFINITY-NORM OF A VECTOR; INFNRMROW CALCULATES THE INFINITY-NORM OF A ROW VECTOR; INFNRMCOL CALCULATES THE INFINITY-NORM OF A COLUMN VECTOR; INFNRMMAT CALCULATES THE INFINITY-NORM OF A MATRIX; ONENRMVEC CALCULATES THE ONE-NORM OF A VECTOR; ONENRMROW CALCULATES THE ONE-NORM OF A ROW VECTOR; ONENRMCOL CALCULATES THE ONE-NORM OF A COLUMN VECTOR; ONENRMMAT CALCULATES THE ONE-NORM OF A MATRIX; ABSMAXMAT CALCULATES FOR A GIVEN MATRIX THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE; KEYWORDS: VECTOR NORMS, MATRIX NORMS. SUBSECTION: INFNRMVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE INFNRMVEC(L, U, K, A); VALUE L, U; INTEGER L, U, K; ARRAY A; CODE 31061; INFNRMVEC := MAX( ABS(A[I]), I= L, ..., U ); THE MEANING OF THE FORMAL PARAMETERS IS: L, U: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE INDEX OF THE VECTOR A, RESPECTIVELY; K: ; EXIT:THE FIRST INDEX FOR WHICH ABS(A[I]), I = L, ..., U, IS MAXIMAL; A: ; ARRAY A[L:U]. PROCEDURES USED: NONE. SUBSECTION: INFNRMROW. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE INFNRMROW(L, U, I, K, A); VALUE L, U, I; INTEGER L, U, I, K; ARRAY A; CODE 31062; INFNRMROW := MAX( ABS(A[I,J]), J= L, ..., U ); THE MEANING OF THE FORMAL PARAMETERS IS: L, U: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE COLUMN INDEX OF THE ROW VECTOR A, RESPECTIVELY; I: ; ENTRY:THE ROW INDEX; K: ; EXIT:THE FIRST INDEX FOR WHICH ABS(A[I,J]), J = L, ..., U, IS MAXIMAL; A: ; ARRAY A[I:I,L:U]. PROCEDURES USED: NONE. SUBSECTION: INFNRMCOL. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE INFNRMCOL(L, U, J, K, A); VALUE L, U, J; INTEGER L, U, J, K; ARRAY A; CODE 31063; INFNRMCOL := MAX( ABS(A[I,J]), I= L, ..., U ); THE MEANING OF THE FORMAL PARAMETERS IS: L, U: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE ROW INDEX OF THE COLUMN VECTOR A, RESPECTIVELY; J: ; ENTRY:THE COLUMN INDEX; K: ; EXIT:THE FIRST INDEX FOR WHICH ABS(A[I,J]), I = L, ..., U, IS MAXIMAL; A: ; ARRAY A[L:U,J:J]. PROCEDURES USED: NONE. SUBSECTION: INFNRMMAT. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE INFNRMMAT(LR, UR, LC, UC, KR, A); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC, KR; ARRAY A; CODE 31064; INFNRMMAT := MAX( ONENRMROW(LC, UC, I, A), I=LR, ..., UR ); THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE ROW INDEX, RESPECTIVELY; LC, UC: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE COLUMN INDEX, RESPECTIVELY; KR: ; EXIT:THE FIRST ROW INDEX FOR WHICH THE ONE-NORM IS MAXIMAL; A: ; ARRAY A[LR:UR,LC:UC]. PROCEDURES USED: ONENRMROW. SUBSECTION: ONENRMVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE ONENRMVEC(L, U, A); VALUE L, U; INTEGER L, U; ARRAY A; CODE 31065; ONENRMVEC := SUM( ABS(A[I]), I= L, ..., U ); THE MEANING OF THE FORMAL PARAMETERS IS: L, U: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE INDEX OF THE VECTOR A, RESPECTIVELY; A: ; ARRAY A[L:U]. PROCEDURES USED: NONE. SUBSECTION: ONENRMROW. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE ONENRMROW(L, U, I, A); VALUE L, U, I; INTEGER L, U, I; ARRAY A; CODE 31066; ONENRMROW := SUM( ABS(A[I,J]), J= L, ..., U ); THE MEANING OF THE FORMAL PARAMETERS IS: L, U: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE COLUMN INDEX OF THE ROW VECTOR A, RESPECTIVELY; I: ; ENTRY: THE ROW INDEX; A: ; ARRAY A[I:I,L:U]. PROCEDURES USED: NONE. SUBSECTION: ONENRMCOL. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE ONENRMCOL(L, U, J, A); VALUE L, U, J; INTEGER L, U, J; ARRAY A; CODE 31067; ONENRMCOL := SUM( ABS(A[I,J]), I= L, ..., U ); THE MEANING OF THE FORMAL PARAMETERS IS: L, U: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE ROW INDEX OF THE COLUMN VECTOR A, RESPECTIVELY; J: ; ENTRY: THE COLUMN INDEX; A: ; ARRAY A[L:U,J:J]. PROCEDURES USED: NONE. SUBSECTION: ONENRMMAT. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE ONENRMMAT(LR, UR, LC, UC, KC, A); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC, KC; ARRAY A; CODE 31068; ONENRMMAT := MAX(ONENRMCOL(LR, UR, J, A), J=LC, ..., UC); THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE ROW INDEX, RESPECTIVELY; LC, UC: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE COLUMN INDEX, RESPECTIVELY; KC: ; EXIT:THE FIRST COLUMN INDEX FOR WHICH THE ONE-NORM IS MAXIMAL; A: ; ARRAY A[LR:UR,LC:UC]. PROCEDURES USED: ONENRMCOL. SUBSECTION: ABSMAXMAT. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE ABSMAXMAT(LR, UR, LC, UC, KR, KC, A); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC, KR, KC; ARRAY A; CODE 31069; ABSMAXMAT := MAX( ABS(A[I,J]), I= LR, ..., UR, J= LC, ..., UC ); THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE ROW INDEX, RESPECTIVELY; LC, UC: ; ENTRY:THE LOWER BOUND AND UPPER BOUND OF THE COLUMN INDEX, RESPECTIVELY; KR, KC: ; EXIT:THE ROW AND COLUMN INDEX OF AN ELEMENT FOR WHICH THE MODULUS IS MAXIMAL; A: ; ARRAY A[LR:UR,LC:UC]. PROCEDURES USED: INFNRMCOL. LANGUAGE: COMPASS. METHOD AND PERFORMANCE: ELEMENTARY. SOURCE TEXT(S): THE FOLLOWING PROCEDURES ARE WRITTEN IN COMPASS, AN EQUIVALENT ALGOL 60 TEXT OF THESE COMPASS ROUTINES IS GIVEN. 0CODE 31061; REAL PROCEDURE INFNRMVEC(L, U, K, A); VALUE L, U; INTEGER L, U, K; ARRAY A; BEGIN REAL R, MAX; MAX:= 0; K:= L; FOR L:= L STEP 1 UNTIL U DO BEGIN R:= ABS(A[L]); IF R > MAX THEN BEGIN MAX:= R; K:= L END END; INFNRMVEC:= MAX END INFNRMVEC; EOP 0CODE 31062; REAL PROCEDURE INFNRMROW(L, U, I, K, A); VALUE L, U, I; INTEGER L, U, I, K; ARRAY A; BEGIN REAL R, MAX; MAX:= 0; K:= L; FOR L:= L STEP 1 UNTIL U DO BEGIN R:= ABS(A[I,L]); IF R > MAX THEN BEGIN MAX:= R; K:= L END END; INFNRMROW:= MAX END INFNRMROW; EOP 0CODE 31063; REAL PROCEDURE INFNRMCOL(L, U, J, K, A); VALUE L, U, J; INTEGER L, U, J, K; ARRAY A; BEGIN REAL R, MAX; MAX:= 0; K:= L; FOR L:= L STEP 1 UNTIL U DO BEGIN R:= ABS(A[L,J]); IF R > MAX THEN BEGIN MAX:= R; K:= L END END; INFNRMCOL:= MAX END INFNRMCOL EOP 0CODE 31064; REAL PROCEDURE INFNRMMAT(LR, UR, LC, UC, KR, A); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC, KR; ARRAY A; BEGIN REAL R, MAX; MAX:= 0; KR:= LR; FOR LR:= LR STEP 1 UNTIL UR DO BEGIN R:= ONENRMROW(LC, UC, LR, A); IF R > MAX THEN BEGIN MAX:= R; KR:= LR END END; INFNRMMAT:= MAX END INFNRMMAT; EOP 0CODE 31065; REAL PROCEDURE ONENRMVEC(L, U, A); VALUE L, U; INTEGER L, U; ARRAY A; BEGIN REAL SUM; SUM:= 0; FOR L:= L STEP 1 UNTIL U DO SUM:= SUM + ABS(A[L]); ONENRMVEC:= SUM END ONENRMVEC; EOP 0CODE 31066; REAL PROCEDURE ONENRMROW(L, U, I, A); VALUE L, U, I; INTEGER L, U, I; ARRAY A; BEGIN REAL SUM; SUM:= 0; FOR L:= L STEP 1 UNTIL U DO SUM:= SUM + ABS(A[I,L]); ONENRMROW:= SUM END ONENRMROW EOP 0CODE 31067; REAL PROCEDURE ONENRMCOL(L, U, J, A); VALUE L, U, J; INTEGER L, U, J; ARRAY A; BEGIN REAL SUM; SUM:= 0; FOR L:= L STEP 1 UNTIL U DO SUM:= SUM + ABS(A[L,J]); ONENRMCOL:= SUM END ONENRMCOL; EOP 0CODE 31068; REAL PROCEDURE ONENRMMAT(LR, UR, LC, UC, KC, A); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC, KC; ARRAY A; BEGIN REAL MAX, R; MAX:= 0; KC:= LC; FOR LC:= LC STEP 1 UNTIL UC DO BEGIN R:= ONENRMCOL(LR, UR, LC, A); IF R > MAX THEN BEGIN MAX:= R; KC:= LC END END; ONENRMMAT:= MAX END ONENRMMAT; EOP 0CODE 31069; REAL PROCEDURE ABSMAXMAT(LR, UR, LC, UC, I, J, A); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC, I, J; ARRAY A; BEGIN INTEGER II; REAL MAX, R; MAX:= 0; I:= LR; J:= LC; FOR LC:= LC STEP 1 UNTIL UC DO BEGIN R:= INFNRMCOL(LR, UR, LC, II, A); IF R > MAX THEN BEGIN MAX:= R; I:= II; J:= LC END END; ABSMAXMAT:= MAX END ABSMAXMAT; EOP ########################################################################### ########################################################################### 1SECTION : 1.1.9 (APRIL 1974) AUTHORS : T.J. DEKKER, W. HOFFMANN. CONTRIBUTORS: W. HOFFMANN, S.P.N. VAN KAMPEN. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731030. BRIEF DESCRIPTION: THE PROCEDURE REASCL NORMALIZES THE (NON-NULL) COLUMNS OF A TWO- DIMENSIONAL ARRAY IN SUCH A WAY THAT, IN EACH COLUMN, AN ELEMENT OF MAXIMUM ABSOLUTE VALUE EQUALS 1. THE NORMALIZED VECTORS ARE DELIVERED IN THE CORRESPONDING COLUMNS OF THE ARRAY. KEYWORDS: NORMALIZATION, VECTOR SCALING. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE REASCL(A, N, N1, N2); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A; CODE 34183; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; A TWO-DIMENSIONAL ARRAY A[1:N,N1:N2]; ENTRY: THE N2 - N1 + 1 COLUMN VECTORS MUST BE GIVEN IN A; EXIT: THE NORMALIZED VECTORS (I.E. IN EACH VECTOR AN ELEMENT OF MAXIMUM ABSOLUTE VALUE 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. 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 REASCL IS USED IN REAEIG1, SECTION 3.3.1.2.2. 0SOURCE TEXT(S) : CODE 34183; COMMENT MCA 2413; PROCEDURE REASCL(A, N, N1, N2); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A; BEGIN INTEGER I, J; REAL S; FOR J:= N1 STEP 1 UNTIL N2 DO BEGIN S:= 0; 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 REASCL; EOP ########################################################################## ########################################################################## 1SECTION : 1.2.3 (MAY 1974) 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; CODE 34352; 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. 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; CODE 34353; 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: ; ARRAYAR,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. SOURCE TEXT(S) : 0CODE 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 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 0CODE 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 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; CODE 34354; 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; 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; CODE 34355; 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; 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. 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; CODE 34356; 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); 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. BEGININTEGERI;REALK,C,S,T; ARRAYAR,AI[1:2,1:2]; 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; IFHSHCOMCOL(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 SOURCE TEXT(S) : 0CODE 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 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 0CODE 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; 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 0CODE 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 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) 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; CODE 34376; 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); 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; CODE 34377; 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 . 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; CODE 34378; 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. EXAMPLE OF USE : BEGIN COMMENT EXAMPLE OF USE ELMCOMCOL; 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 . SOURCE TEXT(S) : 0CODE 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 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 0CODE 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 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 0CODE 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 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 : 1.2.7 (DECEMBER 1979) AUTHORS : J.J.G. ADMIRAAL, C.G. VAN DER LAAN. CONTRIBUTORS : J.J.G. ADMIRAAL, H. FIOLET, C.G. VAN DER LAAN. INSTITUTE: MATHEMATICAL CENTRE, UNIVERSITY OF AMSTERDAM. RECEIVED : 730817. BRIEF DESCRIPTION : THIS SECTION CONTAINS THE PROCEDURES ROTCOMCOL, ROTCOMROW AND CHSH2 ROTCOMCOL REPLACES THE COLUMN VECTOR VR+I*VI GIVEN IN THE ARRAYS AR,AI[L:U,I:I] AND THE COLUMN VECTOR YR+I*YI GIVEN IN THE ARRAYS AR,AI[L:U,J:J] BY THE VECTORS (VR+I*VI)*(CR-I*CI)-(YR+I*YI)*S AND (YR+I*YI)*(CR+I*CI)+(VR+I*VI)*S, RESPECTIVELY. ROTCOMROW REPLACES THE ROW VECTOR VR+I*VI GIVEN IN THE ARRAYS AR,AI[I:I,L:U] AND THE ROW VECTOR YR+I*YI GIVEN IN THE ARRAYS AR,AI[J:J,L:U] BY THE VECTORS (VR+I*VI)*(CR-I*CI)+(YR+I*YI)*S AND (YR+I*YI)*(CR+I*CI)-(VR+I*VI)*S, RESPECTIVELY. CHSH2 COMPUTES THE COMPLEX HOUSEHOLDERMATRIX THAT MAPS THE COMPLEX VECTOR (A1,A2) INTO THE DIRECTION (1,0). WARNING : IN ROTCOMCOL AND ROTCOMROW THE COSINE IS COMPLEX AND THE SINE IS REAL, IN CONTRAST TO THIS, IN CHSH2 THE SINE IS COMPLEX AND THE COSINE IS REAL. KEYWORDS : COMPLEX VECTOR OPERATIONS, ROTATION, HOUSEHOLDER MATRIX. SUBSECTION : ROTCOMCOL . CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE ROTCOMCOL(L, U, I, J, AR, AI, CR, CI, S); VALUE L, U, I, J, CR, CI, S; INTEGER L, U, I, J; REAL CR, CI, S; ARRAY AR, AI; CODE 34357; THE MEANING OF THE FORMAL PARAMETERS IS : L,U,I,J: ; THE ROTATION IS PERFORMED ON THE COLUMN VECTORS AR,AI[L:U,I:I] AND AR,AI[L:U,J:J]; AR,AI: ; ARRAY AR,AI[L:U,I:J]; ENTRY: AR:THE REAL PARTS OF THE COLUMN VECTORS AI:THE IMAGINARY PARTS OF THE COLUMN VECTORS EXIT: THE RESULTING VECTORS (SEE ALSO BRIEF DESCRIPTION); CR,CI,S: ; ENTRY: ROTATION FACTORS; SEE ALSO BRIEF DESCRIPTION. RUNNING TIME : ROUGHLY PROPORTIONAL TO (U-L) . LANGUAGE: ALGOL 60. SUBSECTION : ROTCOMROW . CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE ROTCOMROW(L, U, I, J, AR, AI, CR, CI, S); VALUE L, U, I, J, CR, CI, S; INTEGER L, U, I, J; REAL CR, CI, S; ARRAY AR, AI; CODE 34358; THE MEANING OF THE FORMAL PARAMETERS IS : L,U,I,J: ; THE ROTATION IS PERFORMED ON THE ROW VECTORS AR,AI[I:I,L:U] AND AR,AI[J:J,L:U]; AR,AI: ; ARRAY AR,AI[I:J,L:U]; ENTRY: AR:THE REAL PARTS OF THE ROW VECTORS AI:THE IMAGINARY PARTS OF THE ROW VECTORS EXIT: THE RESULTING VECTORS (SEE ALSO BRIEF DESCRIPTION); CR,CI,S: ; ENTRY: ROTATION FACTORS; SEE ALSO BRIEF DESCRIPTION. PROCEDURES USED : NONE . RUNNING TIME : ROUGHLY PROPORTIONAL TO (U-L) . LANGUAGE: ALGOL 60. EXAMPLE OF USE : BEGIN COMMENT EXAMPLE OF USE ROTCOMCOL; REAL ARRAY AR,AI[1:2,1:2]; INTEGER I,J; AR[1,1]:=+4;AR[1,2]:=+5;AR[2,1]:=-5;AR[2,2]:=+4; AI[1,1]:=+3;AI[1,2]:= 0;AI[2,1]:= 0;AI[2,2]:=-3; OUTPUT(61,((INPUT MATRIX:),/)); OUTPUT(61,(-D,+D,(*I),4B,-D,Z/,BB-D,Z,3B,-D,+D,(*I),/), 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,(//,(AFTER POSTMULTIPLICATION WITH:),/)); OUTPUT(61,((.08-.06*I -.1),/, ( .1 .08+.06*I),//)); ROTCOMCOL(1,2,1,2,AR,AI,.08,.06,-.1); OUTPUT(61,((DELIVERS:),/)); OUTPUT(61,(-D,Z,2BD,Z/,BD,Z,B-D,Z), AR[1,1],AI[1,1],AR[1,2],AI[1,2],AR[2,1],AI[2,1],AR[2,2],AI[2,2]); END OUTPUT: INPUT MATRIX: 4+3*I 5 -5 4-3*I AFTER POSTMULTIPLICATION WITH: .08-.06*I -.1 .1 .08+.06*I DELIVERS: 1 0 0 1 . SUBSECTION: CHSH2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHSH2(A1R,A1I,A2R,A2I,C,SR,SI); VALUE A1R,A1I,A2R,A2I;REAL A1R,A1I,A2R,A2I,C,SR,SI; CODE 34611; THE MEANING OF THE FORMAL PARAMETERS IS: A1R: ; ENTRY: THE REAL PART OF THE FIRST VECTORCOMPONENT; A1I: ; ENTRY: THE IMAGINARY PART OF THE FIRST VECTORCOMPONENT; A2R: ; ENTRY: THE REAL PART OF THE SECOND VECTORCOMPONENT; A2I: ; ENTRY: THE IMAGINARY PART OF THE SECOND VECTORCOMPONENT; C,SR,SI: ; EXIT: THE FACTORS THAT DETERMINE THE HOUSEHOLDER MATRIX. THE HOUSEHOLDERMATRIX, DEFINED BY: HA = B A = (A1,A2)' B = (-SIGN(A1R)*SQRT(A1*A1+A2*A2),O)', IS DETERMINED BY: ( -C SR+I*SI) (SR+I*SI C ) PROCEDURES USED: NONE; LANGUAGE: ALGOL 60; METHOD AND PERFORMANCE: AFTER A CALL OF CHSH2 YOU ARE ABLE TO ROTATE A COMPLEX VECTOR OF DIMENSION TWO BY MEANS OF THE FACTORS C,SR AND SI. EXAMPLE OF USE: CHSH2 IS USED IN QZI AND QZIVAL,SECTION 3.4 SOURCE TEXT(S) : 0CODE 34357; PROCEDURE ROTCOMCOL(L, U, I, J, AR, AI, CR, CI, S); VALUE L, U, I, J, CR, CI, S; INTEGER L, U, I, J; REAL CR, CI, S; ARRAY AR, AI; BEGIN REAL ARLI, AILI, ARLJ, AILJ; FOR L:= L STEP 1 UNTIL U DO BEGIN ARLI:= AR[L,I]; AILI:= AI[L,I]; ARLJ:= AR[L,J]; AILJ:= AI[L,J]; AR[L,I]:= CR * ARLI + CI * AILI - S * ARLJ; AI[L,I]:= CR * AILI - CI * ARLI - S * AILJ; AR[L,J]:= CR * ARLJ - CI * AILJ + S * ARLI; AI[L,J]:= CR * AILJ + CI * ARLJ + S * AILI; END END ROTCOMCOL; EOP 0CODE 34358; PROCEDURE ROTCOMROW(L, U, I, J, AR, AI, CR, CI, S); VALUE L, U, I, J, CR, CI, S; INTEGER L, U, I, J; REAL CR, CI, S; ARRAY AR, AI; BEGIN REAL ARIL, AIIL, ARJL, AIJL; FOR L:= L STEP 1 UNTIL U DO BEGIN ARIL:= AR[I,L]; AIIL:= AI[I,L]; ARJL:= AR[J,L]; AIJL:= AI[J,L]; AR[I,L]:= CR * ARIL + CI * AIIL + S * ARJL; AI[I,L]:= CR * AIIL - CI * ARIL + S * AIJL; AR[J,L]:= CR * ARJL - CI * AIJL - S * ARIL; AI[J,L]:= CR * AIJL + CI * ARJL - S * AIIL; END END ROTCOMROW; EOP 0CODE 34611; PROCEDURECHSH2(A1R,A1I,A2R,A2I,C,SR,SI); VALUEA1R,A1I,A2R,A2I;REALA1R,A1I,A2R,A2I,C,SR,SI; BEGIN REAL R; IF A2R^=0 OR A2I^=0 THEN BEGIN IF A1R^=0 OR A1I^=0 THEN BEGIN R:=SQRT(A1R*A1R+A1I*A1I);C:=R; SR:=(A1R*A2R+A1I*A2I)/R;SI:=(A1R*A2I-A1I*A2R)/R; R:=SQRT(C*C+SR*SR+SI*SI);C:=C/R;SR:=SR/R;SI:=SI/R END ELSE BEGIN SI:=C:=0;SR:=1 END END ELSE BEGIN C:=1;SR:=SI:=0 END END CHSH2; 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; CODE 34359; 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. 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) : 0CODE 34359; REAL PROCEDURE COMEUCNRM(AR, AI, LW, N); VALUE N, LW; INTEGER N, LW; ARRAY AR, AI; BEGIN INTEGER I, L; 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 : 1.2.9 (DECEMBER 1975) 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. 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. SUBSECTION : SCLCOM. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURESCLCOM(AR,AI,N,N1,N2); VALUEN,N1,N2;INTEGERN,N1,N2;ARRAYAR,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). 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 0CODE 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; 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.3.1 (MAY 1974) 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: REALPROCEDURECOMABS(XR,XI); VALUEXR,XI;REALXR,XI; CODE 34340; 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. EXAMPLE OF USE: BEGIN 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: PROCEDURECOMSQRT(AR,AI,PR,PI); VALUEAR,AI;REALAR,AI,PR,PI; CODE 34343; 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: BEGINREALR,I; 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 SUBSECTION : CARPOL. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURECARPOL(AR,AI,R,C,S); VALUEAR,AI;REALAR,AI,R,C,S; CODE 34344; 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: BEGINREALR,C,S; 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 SOURCE TEXT(S): 0CODE34340; 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 0CODE34343; 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 CODE34344; PROCEDURECARPOL(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 ENDCARPOL; EOP ########################################################################## ########################################################################## 1SECTION : 1.3.2 (MAY 1974) 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: PROCEDURECOMMUL(AR,AI,BR,BI,RR,RI); VALUEAR,AI,BR,BI;REALAR,AI,BR,BI,RR,RI; CODE 34341; 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. EXAMPLE OF USE: BEGINREALR,I; 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: PROCEDURECOMDIV(XR,XI,YR,YI,ZR,ZI); VALUEXR,XI,YR,YI;REALXR,XI,YR,YI,ZR,ZI; CODE 34342; 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. EXAMPLE OF USE: BEGINREALR,I; 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): 0CODE34341; 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 0CODE34342; 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 : 1.4 (OCTOBER 1974) AUTHOR: H.J.J. TE RIELE. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 740125; REVISED: 740514; BRIEF DESCRIPTION: THIS SECTION CONTAINS A SET OF FIVE PROCEDURES FOR THE BASIC ARITHMETIC OPERATIONS WITH LONG INTEGERS: LNG INT ADD EXACTLY COMPUTES THE SUM OF TWO NONNEGATIVE INTEGERS. LNG INT SUBTRACT EXACTLY COMPUTES THE DIFFERENCE OF TWO NONNEGATIVE INTEGERS. LNG INT MULT EXACTLY COMPUTES THE PRODUCT OF TWO NONNEGATIVE INTEGERS. LNG INT DIVIDE EXACTLY COMPUTES THE QUOTIENT WITH REMAINDER OF TWO NONNEGATIVE INTEGERS. LNG INT POWER EXACTLY COMPUTES U**POWER, WHERE U IS A NONNEGATIVE LONG INTEGER AND POWER IS THE POSITIVE (SINGLE-LENGTH) EXPONENT. KEYWORDS: LONG INTEGER ARITHMETIC, ADDITION, SUBTRACTION, MULTIPLICATION, DIVISION WITH REMAINDER, EXPONENTIATION. SUBSECTION : LNG INT ADD. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS: PROCEDURE LNG INT ADD(U,V,SUM); INTEGER ARRAY U,V,SUM; CODE 31200; THE MEANING OF THE FORMAL PARAMETERS IS: U,V,SUM: ; INTEGER ARRAY U[0:U[0]], V[0:V[0]], SUM[0:MAX(U[0],V[0])+1]; BEFORE THE CALL OF LNG INT ADD, U AND V MUST CONTAIN THE LONG INTEGERS TO BE ADDED; AFTER THE CALL, SUM CONTAINS THE MULTI-LENGTH SUM OF U AND V, WHILE U AND V REMAIN UNCHANGED. PROCEDURES USED : NONE. REQUIRED CENTRAL MEMORY : EXECUTION FIELD LENGTH : 7. RUNNING TIME : WE GIVE A FORMULA FOR THE RUNNING TIME IN MILLISECONDS ON THE CD CYBER 73-28 COMPUTER; THE RELATIVE PRECISION OF THE COEFFICIENTS IS AT MOST ONE OR TWO DIGITS: .10*MAX(U[0],V[0]) + .06*MIN(U[0],V[0]) + .56. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : SEE LNG INT POWER (THIS SECTION). EXAMPLE OF USE : SEE LNG INT POWER (THIS SECTION). SUBSECTION : LNG INT SUBTRACT. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE LNG INT SUBTRACT (U,V,DIFFERENCE); INTEGER ARRAY U,V,DIFFERENCE; CODE 31201; THE MEANING OF THE FORMAL PARAMETERS IS: U,V,DIFFERENCE: ; INTEGER ARRAY U[0:U[0]],V[0:V[0]],DIFFERENCE[0:U[0]]; BEFORE THE CALL OF LNG INT SUBTRACT, U AND V MUST CONTAIN THE LONG INTEGERS TO BE SUBTRACTED(V FROM U); AFTER THE CALL, DIFFERENCE CONTAINS THE MULTI-LENGTH DIFFERENCE U-V; IF U; INTEGER ARRAY U[0:U[0]], V[0:V[0]], PRODUCT[0:U[0]+V[0]]; BEFORE THE CALL OF LNG INT MULT, U AND V MUST CONTAIN THE LONG INTEGERS TO BE MULTIPLIED; AFTER THE CALL, PRODUCT CONTAINS THE MULTI-LENGTH PRODUCT OF U AND V, WHILE U AND V REMAIN UNCHANGED. PROCEDURES USED : NONE. REQUIRED CENTRAL MEMORY : EXECUTION FIELD LENGTH : 7. RUNNING TIME : WE GIVE A FORMULA FOR THE RUNNING TIME IN MILLISECONDS ON THE CD CYBER 73-28 COMPUTER; THE RELATIVE PRECISION OF THE COEFFICIENTS IS AT MOST ONE OR TWO DIGITS: .18*U[0]*V[0] + .15*U[0] + .06*V[0] + .46. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : SEE LNG INT POWER (THIS SECTION). EXAMPLE OF USE : SEE LNG INT POWER (THIS SECTION). SUBSECTION : LNG INT DIVIDE. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS: PROCEDURE LNG INT DIVIDE(U,V,QUOTIENT,REMAINDER); VALUE U; INTEGER ARRAY U,V,QUOTIENT,REMAINDER; CODE 31203; THE MEANING OF THE FORMAL PARAMETERS IS: U,V,QUOTIENT,REMAINDER: ; INTEGER ARRAY U[0:U[0]], V[0:V[0]], QUOTIENT[0:U[0]-V[0]+1], REMAINDER[0:V[0]]; BEFORE THE CALL OF LNG INT DIVIDE, U MUST CONTAIN THE DIVIDEND, V THE DIVISOR(V ^= 0); AFTER THE CALL, THE RESULTS OF THE LONG DIVISION OF U BY V (I.E. U//V AND U-U//V) ARE STORED INTO QUOTIENT AND REMAINDER; U AND V REMAIN UNCHANGED. PROCEDURES USED : NONE. REQUIRED CENTRAL MEMORY : 11 + U[0] + (IF V[0]=1 OR U[0]= 5 000 000 THEN (.26*DIFF*V[0] + .57*DIFF + .10*V[0] + 1.8) ELSE (.27*DIFF*V[0] + .66*DIFF + .66*V[0] + 2.0) (HERE DIFF=U[0]-V[0]+1, I.E. THE NUMBER OF EXECUTIONS OF THE STATEMENT, IN WHICH DIVISION OF A (V[0]+1)-PLACE NUMBER BY A V[0]-PLACE NUMBER IS PERFORMED). LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : SEE LNG INT POWER (THIS SECTION). EXAMPLE OF USE : SEE LNG INT POWER (THIS SECTION). SUBSECTION : LNG INT POWER. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS: PROCEDURE LNG INT POWER(U,EXPONENT,RESULT); VALUE EXPONENT; INTEGER EXPONENT; INTEGER ARRAY U,RESULT; CODE 31204; THE MEANING OF THE FORMAL PARAMETERS IS: EXPONENT: ; THE (POSITIVE) POWER TO WHICH THE LONG INTEGER U WILL BE RAISED; U,RESULT: ; INTEGER ARRAY U[0:U[0]], RESULT[0:U[0]*EXPONENT]; BEFORE THE CALL OF LNG INT POWER, U MUST CONTAIN THE LONG INTEGER WHICH HAS TO BE RAISED TO THE POWER EXPONENT; AFTER THE CALL, RESULT CONTAINS THE VALUE OF THE LONG INTEGER U**EXPONENT; U REMAINS UNCHANGED. PROCEDURES USED : LNG INT MULT = CP31202. REQUIRED CENTRAL MEMORY : EXECUTION FIELD LENGTH : 4 + 3 * (U[0] * EXPONENT + 1). RUNNING TIME : FOR THIS PROCEDURE THE TIME FORMULA IS A COMPLICATED FUNCTION OF U[0], EXPONENT AND THE NUMBER OF ONES IN THE BINARY REPRESENTATION OF EXPONENT, BUT ROUGHLY THE TIME IS OF THE ORDER : (U(0)*EXPONENT)**2). TWO TESTCASES : EXPONENT TIME(IN SEC.) FOR: U[0]=1 U[0]=2 20 .04 .10 40 .13 .34 100 .68 1.94 300 5.48 16.6 500 16.8 51.0 LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE: DEFINITION: A LONG INTEGER OF LENGTH N, OR AN N-PLACE INTEGER (N>0) IS ANY NONNEGATIVE INTEGER LESS THAN BASE**N, AND GREATER THAN OR EQUAL TO BASE**(N-1), WHERE BASE IS THE (POSITIVE) RADIX OF THE POSITIONAL NOTATION, IN WHICH THE INTEGERS ARE EXPRESSED. ALL FIVE PROCEDURES USE THE BASE 10 000 000; THIS IS THE LARGEST POWER OF 10, THE SQUARE OF WHICH CAN BE REPRESENTED EXACTLY ON THE CD CYBER 73-28 COMPUTER. IF ONE WANTS TO USE THE PROCEDURES WITH ANOTHER VALUE OF THE BASE, SAY R (NOT NECESSARILY A POWER OF 10), THEN IN THE SOURCE TEXTS OF THE PROCEDURES THE NUMBER 10 000 000 HAS TO BE REPLACED BY R (8 TIMES IN LNG INT ADD, 2 TIMES IN LNG INT SUBTRACT, 2 TIMES IN LNG INT MULT AND 16 TIMES IN LNG INT DIVIDE). MOREOVER, IN LNG INT DIVIDE THE NUMBER 9 999 999 HAS TO BE REPLACED BY THE NUMBER R - 1. IF A[1], A[2], ..., A[N] ARE THE N DIGITS OF THE LONG INTEGER M OF LENGTH N (A[1] ^= 0), THEN M=((...(A[1]*BASE+A[2])*BASE+...+A[N-2])*BASE+A[N-1])*BASE+A[N]. ACCORDINGLY, A LONG INTEGER M OF LENGTH N ALWAYS WILL BE STORED INTO A CORRESPONDING INTEGER ARRAY A, THE LENGTH N WILL BE STORED INTO THE ARRAY ELEMENT A[0]. FOR THE METHOD OF THE PROCEDURES LNG INT ADD, LNG INT SUBTRACT, LNG INT MULT AND LNG INT DIVIDE, SEE [1; PP.229-248]; PROCEDURE LNG INT POWER USES THE BINARY METHOD FOR EXPONENTIATION (SEE [1; PP.398-401]). REFERENCES: [1]. DONALD E. KNUTH. THE ART OF COMPUTER PROGRAMMING, VOLUME 2/ SEMINUMERICAL ALGORITHMS. ADDISON-WESLEY PUBLISHING COMPANY, 1969. EXAMPLE OF USE: BEGIN PROCEDURE OUT(A); INTEGER ARRAY A; BEGIN INTEGER I,L; L:= A[0]; OUTPUT(61,(B6ZD),A[1]); FOR I:= 2 STEP 1 UNTIL L DO OUTPUT(61,(B7D), A[I]); OUTPUT(61,(/)) END OUT; INTEGER ARRAY U,V,R1,R2[0:100]; U[0]:=5; U[1]:=333; U[2]:=U[3]:=U[4]:=U[5]:=7 000 000; OUT(U); V[0]:=2; V[1]:=4 444; V[2]:=4 444 444; OUT(V); LNG INT ADD(U,V,R1); OUT(R1); LNG INT SUBTRACT(U,V,R1); OUT(R1); LNG INT MULT(U,V,R1); OUT(R1); LNG INT DIVIDE(U,V,R1,R2); OUT(R1); OUT(R2); LNG INT POWER(V,5,R1); OUT(R1) END DELIVERS: 333 7000000 7000000 7000000 7000000 4444 4444444 333 7000000 7000000 7004445 1444444 333 7000000 7000000 6995556 2555556 1483111 1114073 9114221 9114221 9111110 8000000 750825 0001650 0826575 734 0700700 17341 5299149 6553709 6327185 8964586 9972395 8069589 6628224 SOURCE TEXT(S): CODE 31200; PROCEDURE LNG INT ADD(U,V,SUM); INTEGERARRAY U,V,SUM; BEGININTEGER LU,LV,DIFF,CARRY,I,T,MAX; LU:=U[0]; LV:=V[0]; IF LU >= LV THEN BEGIN MAX:=LU; DIFF:=LU - LV + 1; CARRY:=0; FOR I:=LU STEP -1 UNTIL DIFF DO BEGIN T:=U[I] + V[I-DIFF+1] + CARRY; CARRY:=IF T<10 000 000 THEN 0 ELSE 1; SUM[I]:=T - CARRY * 10 000 000 END; FOR I:=DIFF - 1 STEP -1 UNTIL 1 DO BEGIN T:=U[I] + CARRY; CARRY:=IF T<10 000 000 THEN 0 ELSE 1; SUM[I]:=T - CARRY * 10 000 000 END END ELSE BEGIN MAX:=LV; DIFF:=LV - LU + 1; CARRY:=0; FOR I:=LV STEP -1 UNTIL DIFF DO BEGIN T:=V[I] + U[I-DIFF+1] + CARRY; CARRY:=IF T<10 000 000 THEN 0 ELSE 1; SUM[I]:=T - CARRY * 10 000 000 END; FOR I:=DIFF - 1 STEP -1 UNTIL 1 DO BEGIN T:=V[I] + CARRY; CARRY:=IF T<10 000 000 THEN 0 ELSE 1; SUM[I]:=T - CARRY * 10 000 000 END END; IF CARRY=1 THEN BEGIN FOR I:=MAX STEP -1 UNTIL 1 DO SUM[I+1]:=SUM[I]; SUM[1]:=1; MAX:=MAX + 1 END; SUM[0]:=MAX END LNG INT ADD EOP CODE 31201; PROCEDURE LNG INT SUBTRACT(U,V,DIFFERENCE); INTEGERARRAY U,V,DIFFERENCE; BEGININTEGER LU,LV,DIFF,I,T,J,CARRY; LU:=U[0]; LV:=V[0]; IF LU1 DO J:=J-1; DIFFERENCE[0]:=J; IF J1 THEN BEGINCOMMENT NORMALIZE U; CARRY:=0; FOR I:=LU STEP -1 UNTIL 1 DO BEGIN T:=SCALE * U[I] + CARRY; CARRY:=T//10 000 000; U[I]:=T - CARRY * 10 000 000 END; U[0]:=CARRY; COMMENT NORMALIZE V; CARRY:=0; FOR I:=LV STEP -1 UNTIL 1 DO BEGIN T:=SCALE * V[I] + CARRY; CARRY:=T//10 000 000; V[I]:=T - CARRY * 10 000 000 END; V1:=V[1] END NORMALIZATION ELSE U[0]:=0; COMMENT COMMENT COMPUTE QUOTIENT AND REMAINDER; FOR I:=0 STEP 1 UNTIL DIFF DO BEGIN D:=U[I] * 10 000 000 + U[I+1]; Q1:=IF U[I]=V1 THEN 9 999 999 ELSE D//V1; IF V[2] * Q1 > (D-Q1*V1) * 10 000 000 + U[I+2] THEN BEGIN Q1:=Q1 - 1; IF V[2]*Q1>(D-Q1*V1)*10 000 000+U[I+2] THEN Q1:=Q1-1 END; COMMENT U[I:I+LV]:=U[I:I+LV] - Q1 * V[1:LV]; CARRY:=0; FOR J:=LV STEP -1 UNTIL 1 DO BEGIN T:=Q1 * V[J] + CARRY; CARRY:=T//10 000 000; A[J]:=T - CARRY * 10 000 000 END; A[0]:=CARRY; CARRY:=0; FOR J:=LV STEP -1 UNTIL 0 DO BEGIN T:=U[I+J] - A[J] + CARRY; CARRY:=IF T<0 THEN -1 ELSE 0; U[I+J]:=T - CARRY * 10 000 000 END; COMMENT IF CARRY=-1 THEN Q1 IS ONE TOO LARGE, AND V MUST BE ADDED BACK TO U[I:I+LV]; IF CARRY=-1 THEN BEGIN Q1:=Q1 - 1; CARRY:=0; FOR J:=LV STEP -1 UNTIL 1 DO BEGIN T:=U[I+J] + V[J] + CARRY; CARRY:=IF T<10 000 000 THEN 0 ELSE 1; U[I+J]:=T - CARRY * 10 000 000 END END; QUOTIENT[I]:=Q1 END I; COMMENT CORRECT STORAGE OF QUOTIENT; IF QUOTIENT[0] ^= 0 THEN BEGIN FOR I:=DIFF STEP -1 UNTIL 0 DO QUOTIENT[I+1]:=QUOTIENT[I]; QUOTIENT[0]:=DIFF + 1 END ELSE IF DIFF < 2 THEN BEGIN QUOTIENT[0]:= 1; IF DIFF = 0 THEN QUOTIENT[1]:= 0 END ELSE IF QUOTIENT[1] ^= 0 THEN QUOTIENT[0]:=DIFF ELSE BEGIN FOR I:=1 STEP 1 UNTIL DIFF - 1 DO QUOTIENT[I]:=QUOTIENT[I+1]; QUOTIENT[0]:=DIFF - 1 END; COMMENT COMMENT REMAINDER := U[DIFF+1:LU]//SCALE; IF SCALE>1 THEN BEGIN CARRY:=0; FOR I:=1 STEP 1 UNTIL LV DO BEGIN T:=CARRY * 10 000 000 + U[DIFF+I]; REMAINDER[I]:=T//SCALE; CARRY:=T - REMAINDER[I] * SCALE END END ELSE FOR I:=1 STEP 1 UNTIL LV DO REMAINDER[I]:=U[DIFF+I]; COMMENT CORRECT STORAGE OF REMAINDER; I:=0; J:=LV; FOR I:=I+1 WHILE REMAINDER[I]=0 AND J>1 DO J:=J-1; REMAINDER[0]:=J; IF J1 THEN BEGIN CARRY:=0; FOR I:=1 STEP 1 UNTIL LV DO BEGIN T:=CARRY * 10 000 000 + V[I]; V[I]:=T//SCALE; CARRY:=T - V[I] * SCALE END END END END LNG INT DIVIDE; EOP CODE 31204; PROCEDURE LNG INT POWER(U,EXPONENT,RESULT); VALUE EXPONENT; INTEGER EXPONENT; INTEGERARRAY U,RESULT; BEGININTEGER MAX,I,N; MAX:=U[0] * EXPONENT; BEGININTEGERARRAY Y,Z,H[0:MAX]; COMMENT Y:=1, Z:=U; Y[0]:=Y[1]:=1; FOR I:=U[0] STEP -1 UNTIL 0 DO Z[I]:=U[I]; HALVE: N:=EXPONENT//2; IF N+N=EXPONENT THEN GOTO SQUARE Z; LNG INT MULT(Y,Z,H); FOR I:=H[0] STEP -1 UNTIL 0 DO Y[I]:=H[I]; IF N=0 THEN GOTO READY; SQUARE Z: LNG INT MULT(Z,Z,H); FOR I:=H[0] STEP -1 UNTIL 0 DO Z[I]:=H[I]; EXPONENT:=N; GOTOHALVE; READY: FOR I:=Y[0] STEP -1 UNTIL 0 DO RESULT[I]:=Y[I] END END LNG INT POWER; EOP ########################################################################## ########################################################################## 1SECTION : 1.5.1 (MARCH 1977) PAGE 1 AUTHORS: D.T.WINTER(A-D,F-I), T.J.DEKKER(E,J) CONTRIBUTOR: J.KOOPMAN(E,J) INSTITUTES: MATHEMATICAL CENTRE,UNIVERSITY OF AMSTERDAM. RECEIVED: 770328 BRIEF DESCRIPTION: THIS SECTION CONTAINS PROCEDURES FOR THE ELEMENTARY OPERATIONS IN DOUBLE PRECISION ARITHMETIC. A. DPADD ADDS TWO SINGLE PRECISION NUMBERS TO A DOUBLE PRECISION SUM. B. DPSUB SUBTRACTS TWO SINGLE PRECISION NUMBERS TO A DOUBLE PRECISION DIFFERENCE. C. DPMUL MULTIPLIES TWO SINGLE PRECISION NUMBERS TO A DOUBLE PRECISION PRODUCT. D. DPDIV DIVIDES TWO SINGLE PRECISION NUMBERS TO A DOUBLE PRECISION QUOTIENT. E. DPPOW COMPUTES A**EXPON IN DOUBLE PRECISION,WHERE A IS A SINGLE PRECISION REAL NUMBER AND EXPON THE INTEGER EXPONENT. F. LNGADD ADDS TWO DOUBLE PRECISION NUMBERS. G. LNGSUB SUBTRACTS TWO DOUBLE PRECISION NUMBERS. H. LNGMUL MULTIPLIES TWO DOUBLE PRECISION NUMBERS. I. LNGDIV DIVIDES TWO DOUBLE PRECISION NUMBERS. J. LNGPOW COMPUTES (A,AA)**EXPON IN DOUBLE PRECISION,WHERE (A,AA) IS A DOUBLE PRECISION REAL NUMBER AND EXPON THE INTEGER EXPONENT. KEYWORDS: DOUBLE PRECISION ARITHMETIC EXPONENTIATION. LANGUAGE: COMPASS(A-D,F-I),ALGOL 60(E,J) METHOD AND PERFORMANCE: THE PROCEDURES A-D,F-I USE THE HARDWARE FUNCTIONS FOR DOUBLE PRECISION THAT ARE AVAILIBLE ON THE CYBER. THE PROCEDURES LNG ADD, LNG SUB, LNG MUL AND LNG DIV CHECK THE INPUT PARAMETERS (A,AA) AND (B,BB) FOR CORRECTNESS. A HEAD/TAIL PAIR IS A CORRECT DOUBLE PRECISION PARAMETER IN THE FOLLOWING CASES: A) THE TAIL IS ZERO; B) THE EXPONENT IN THE BINARY REPRESENTATION OF THE TAIL IS 48 LESS THAN THE EXPONENT OF THE HEAD. AN OUTPUT PARAMETER OF THESE PROCEDURES ALWAYS IS A CORRECT DOUBLE PRECISION NUMBER. IF AN INPUT PARAMETER IS NOT CORRECT, THE ERROR MESSAGE DP PARAMETER TAIL ERROR WILL BE ISSUED. BOTH PROCEDURES E AND J MAKE USE OF THE BINARY REPRESENTATION OF THE INTEGER EXPONENT. IF X DENOTES THE NUMBER THAT IS TO BE EXPONENTIATED, THE PROCEDURES E AND J RUN AS FOLLOWS: THE SEQUENCE X,X**2,X**4,X**8,... IS FORMED WHILE SIMULTANEOUSLY THE BINARY REPRESENTATION OF THE EXPONENT IS CHECKED; WHEN THE I-TH DIGIT EQUALS ONE,THE FACTOR X**(2**(I-1)) IS TAKEN INTO ACCOUNT. EXAMPLE OF USE: SEE THE PROCEDURE LNGREATODECI (SECTION 1.5.3). SUBSECTION: DP ADD CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE DP ADD(A, B, C, CC); VALUE A, B; REAL A, B, C, CC; CODE 31101; THE MEANING OF THE FORMAL PARAMETERS IS: A,B: ; THE OPERANDS; C,CC: ; THE HEAD AND TAIL OF THE DOUBLE PRECISION RESULT OF A+B. SUBSECTION: DP SUB CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE DP SUB(A, B, C, CC); VALUE A, B; REAL A, B, C, CC; CODE 31102; THE MEANING OF THE FORMAL PARAMETERS IS: A,B: ; THE OPERANDS; C,CC: ; THE HEAD AND TAIL OF THE DOUBLE PRECISION RESULT OF A-B. SUBSECTION: DP MUL CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE DP MUL(A, B, C, CC); VALUE A, B; REAL A, B, C, CC; CODE 31103; THE MEANING OF THE FORMAL PARAMETERS IS: A,B: ; THE OPERANDS; C,CC: ; THE HEAD AND TAIL OF THE DOUBLE PRECISION RESULT OF A*B. SUBSECTION: DP DIV CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE DP DIV(A, B, C, CC); VALUE A, B; REAL A, B, C, CC; CODE 31104; THE MEANING OF THE FORMAL PARAMETERS IS: A,B: ; THE OPERANDS; C,CC: ; THE HEAD AND TAIL OF THE DOUBLE PRECISION RESULT OF A/B. SUBSECTION: DP POW. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDUREDP POW(A ,EXPON ,C ,CC ); VALUEA,EXPON;INTEGEREXPON;REALA,C,CC; CODE31109; THE MEANING OF THE FORMAL PARAMETERS IS: A : ; THE NUMBER THAT IS TO BE EXPONENTIATED; EXPON : ; THE (INTEGER) POWER TO WHICH A WILL BE RAISED; C , CC : ; EXIT: THE HEAD (C) AND TAIL (CC) OF THE DOUBLE PRECISION RESULT A**EXPON. PROCEDURES USED: LNG POW = CP31110. RUNNING TIME: ROUGHLY PROPORTIONAL TO LN(EXPON). SUBSECTION: LNG ADD CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE LNG ADD(A, AA, B, BB, C, CC); VALUE A, AA, B, BB; REAL A, AA, B, BB, C, CC; CODE 31105; THE MEANING OF THE FORMAL PARAMETERS IS: A,AA,B,BB: ; THE HEADS (A AND B) AND THE TAILS (AA AND BB) OF THE OPERANDS; C,CC: ; THE HEAD AND TAIL OF THE RESULT (A,AA)+(B,BB). SUBSECTION: LNG SUB CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE LNG SUB(A, AA, B, BB, C, CC); VALUE A, AA, B, BB; REAL A, AA, B, BB, C, CC; CODE 31106; THE MEANING OF THE FORMAL PARAMETERS IS: A,AA,B,BB: ; THE HEADS (A AND B) AND THE TAILS (AA AND BB) OF THE OPERANDS; C,CC: ; THE HEAD AND TAIL OF THE RESULT (A,AA)-(B,BB). SUBSECTION: LNG MUL CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE LNG MUL(A, AA, B, BB, C, CC); VALUE A, AA, B, BB; REAL A, AA, B, BB, C, CC; CODE 31107; THE MEANING OF THE FORMAL PARAMETERS IS: A,AA,B,BB: ; THE HEADS (A AND B) AND THE TAILS (AA AND BB) OF THE OPERANDS; C,CC: ; THE HEAD AND TAIL OF THE RESULT (A,AA)*(B,BB). SUBSECTION: LNG DIV CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE LNG DIV(A, AA, B, BB, C, CC); VALUE A, AA, B, BB; REAL A, AA, B, BB, C, CC; CODE 31108; THE MEANING OF THE FORMAL PARAMETERS IS: A,AA,B,BB: ; THE HEADS (A AND B) AND THE TAILS (AA AND BB) OF THE OPERANDS; C,CC: ; THE HEAD AND TAIL OF THE RESULT (A,AA)/(B,BB). SUBSECTION: LNG POW. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURELNG POW(A ,AA ,EXPON ,C ,CC ); VALUEA,AA,EXPON;INTEGEREXPON;REALA,AA,C,CC; CODE31110; THE MEANING OF THE FORMAL PARAMETERS IS: A,AA : ; THE HEAD (A) AND TAIL (AA) OF THE NUMBER THAT IS TO BE EXPONENTIATED; EXPON : ; THE (INTEGER) POWER TO WHICH (A,AA) WILL BE RAISED; C,CC : ; EXIT: THE HEAD (C) AND TAIL (CC) OF THE DOUBLE PRECISION RESULT (A,AA)**EXPON. PROCEDURES USED: LNG MUL = CP31107. LNG DIV = CP31108. RUNNING TIME: ROUGHLY PROPORTIONAL TO LN(EXPON). SOURCE TEXT(S): ALL PROCEDURES, EXCEPT POW AND LNG POW, ARE WRITTEN IN COMPASS, IT IS NOT POSSIBLE TO SIMULATE THESE PROCEDURES IN ALGOL 60, SO ONLY THE TEXT IS GIVEN FOR POW AND LNG POW. CODE31109; PROCEDUREDP POW(A,EXPON,C,CC); VALUEA,EXPON;INTEGEREXPON;REALA,C,CC; BEGIN LNG POW(A,0,EXPON,C,CC) END DP POW; EOP CODE31110; PROCEDURELNG POW(A,AA,EXPON,C,CC); VALUEA,AA,EXPON;INTEGEREXPON;REALA,AA,C,CC; BEGININTEGEROLDEX,NEWEX;REALD,DD; D:=A;DD:=AA;C:=1;CC:=0;NEWEX:=ABS(EXPON); FOROLDEX:=NEWEXWHILENEWEX^=0DO BEGINNEWEX:=OLDEX//2; IFNEWEX+NEWEX^=OLDEX THENLNG MUL(C,CC,D,DD,C,CC); IFNEWEX^=0 THENLNG MUL(D,DD,D,DD,D,DD) END; IFEXPON<0THENLNG DIV(1,0,C,CC,C,CC) END LNG POW; EOP ########################################################################### ########################################################################### 1SECTION : 1.5.2 (JANUARY 1976) AUTHORS: J. WOLLESWINKEL AND D. WINTER. CONTRIBUTOR: J. C. P. BUS. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 750501. BRIEF DESCRIPTION: THIS SECTION CONTAINS FOURTEEN PROCEDURES FOR CALCULATING, WITH DOUBLE LENGTH ARITHMETIC, THE (SCALAR) PRODUCTS OF SINGLE LENGTH VECTORS AND MATRICES. LNGVECVEC: CALCULATES THE SCALAR PRODUCT OF TWO VECTORS GIVEN IN ONE-DIMENSIONAL ARRAYS; LNGMATVEC: CALCULATES THE SCALAR PRODUCT OF A VECTOR GIVEN IN A ONE-DIMENSIONAL ARRAY AND A ROW OF A MATRIX GIVEN IN A TWO DIMENSIONAL ARRAY; LNGTAMVEC: CALCULATES THE SCALAR PRODUCT OF A VECTOR GIVEN IN A ONE-DIMENSIONAL ARRAY AND A COLUMN OF A MATRIX GIVEN IN A TWO-DIMENSIONAL ARRAY; LNGMATMAT: CALCULATES THE SCALAR PRODUCT OF A ROW OF A MATRIX AND A COLUMN OF ANOTHER MATRIX, WHICH ARE BOTH GIVEN IN TWO-DIMENSIONAL ARRAYS; LNGTAMMAT: CALCULATES THE SCALAR PRODUCT OF COLUMNS OF MATRICES, WHICH ARE BOTH GIVEN IN TWO-DIMENSIONAL ARRAYS; LNGMATTAM: CALCULATES THE SCALAR PRODUCT OF ROWS OF MATRICES, WHICH ARE BOTH GIVEN IN TWO-DIMENSIONAL ARRAYS; LNGSEQVEC: CALCULATES THE SCALAR PRODUCT OF TWO VECTORS GIVEN IN ONE-DIMENSIONAL ARRAYS, WHERE THE MUTUAL SPACINGS BETWEEN THE INDICES OF THE FIRST VECTOR CHANGE LINEARLY; LNGSCAPRD1: CALCULATES THE SCALAR PRODUCT OF TWO VECTORS GIVEN IN ONE-DIMENSIONAL ARRAYS, WHERE THE SPACINGS OF BOTH VECTORS ARE CONSTANT; LNGSYMMATVEC: CALCULATES THE SCALAR PRODUCT OF A VECTOR GIVEN IN A ONE-DIMENSIONAL ARRAY AND A ROW OF A SYMMETRIC MATRIX, WHOSE UPPER TRIANGLE IS STORED COLUMN-WISE IN A ONE- DIMENSIONAL ARRAY; THE ABOVE PROCEDURES HAVE THE POSSIBILITY OF ADDING A DOUBLE LENGTH SCALAR TO THE CALCULATED SCALAR PRODUCT; LNGFULMATVEC: CALCULATES THE VECTOR A * B, WHERE A IS A GIVEN MATRIX AND B IS A VECTOR; LNGFULTAMVEC: CALCULATES THE VECTOR A' * B, WHERE A' IS THE TRANSPOSED OF THE MATRIX A AND B IS A VECTOR; LNGFULSYMMATVEC: CALCULATES THE VECTOR A * B, WHERE A IS A SYMMETRIC MATRIX, WHOSE UPPERTRIANGLE IS STORED COLUMNWISE IN A ONE-DIMENSIONAL ARRAY, AND B IS A VECTOR; LNGRESVEC: CALCULATES THE RESIDUAL VECTOR A * B + X * C, WHERE A IS A GIVEN MATRIX, B AND C ARE VECTORS AND X IS A SCALAR; LNGSYMRESVEC: CALCULATES THE RESIDUAL VECTOR A * B + X * C, WHERE A IS A SYMMETRIC MATRIX, WHOSE UPPERTRIANGLE IS STORED COLUMNWISE IN A ONE-DIMENSIONAL ARRAY, B AND C ARE VECTORS AND, X IS A SCALAR. IN THIS SECTION (X, XX) DENOTES A DOUBLE-LENGTH NUMBER WITH HEAD X AND TAIL XX (SEE METHOD AND PERFORMANCE). KEYWORDS: ELEMENTARY OPERATIONS, VECTOR OPERATIONS, SCALAR PRODUCTS, DOUBLE-LENGTH ARITHMETIC. SUBSECTION: LNGVECVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGVECVEC(L, U, SHIFT, A, B, C, CC, D, DD); VALUE L, U, SHIFT, C, CC; INTEGER L, U, SHIFT; REAL C, CC, D, DD; ARRAY A, B; CODE 34410; THE MEANING OF THE FORMAL PARAMETERS IS: L: ; THE LOWER BOUND OF THE RUNNING SUBSCRIPT; U: ; THE UPPER BOUND OF THE RUNNING SUBSCRIPT; SHIFT: ; THE INDEX-SHIFTING PARAMETER OF THE VECTOR GIVEN IN B; A: ; ONE OF THE VECTORS SHOULD BE GIVEN IN ARRAY A[L:U]; B: ; THE OTHER VECTOR SHOULD BE GIVEN IN ARRAY B[L + SHIFT : U + SHIFT]; C, CC: ; THE HEAD AND TAIL OF THE DOUBLE-LENGTH SCALAR THAT HAS TO BE ADDED TO THE CALCULATED SCALAR PRODUCT; IF CC IS NOT A TAIL TO C THEN AN ERROR MESSAGE WILL BE PRINTED (SEE METHOD AND PERFORMANCE); D, DD: ; EXIT: THE HEAD AND TAIL OF THE CALCULATED DOUBLE-LENGTH RESULT. DATA AND RESULTS: (D, DD):= (C, CC) + THE SCALAR PRODUCT OF THE VECTORS GIVEN IN THE ARRAYS A[L:U] AND B[L + SHIFT : U + SHIFT]. LANGUAGE: COMPASS. SUBSECTION: LNGMATVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGMATVEC(L, U, I, A, B, C, CC, D, DD); VALUE L, U, I, C, CC; INTEGER L, U, I; REAL C, CC, D, DD; ARRAY A, B; CODE 34411; THE MEANING OF THE FORMAL PARAMETERS IS: L: ; THE LOWER BOUND OF THE RUNNING SUBSCRIPT; U: ; THE UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; THE INDEX OF THE ROW-VECTOR GIVEN IN ARRAY A; A: ; THE ROW-VECTOR SHOULD BE GIVEN IN ARRAY A[I:I, L:U]; B: ; THE VECTOR SHOULD BE GIVEN IN ARRAY B[L:U]; C, CC: ; THE HEAD AND TAIL OF THE DOUBLE-LENGTH SCALAR THAT HAS TO BE ADDED TO THE CALCULATED SCALAR PRODUCT; IF CC IS NOT A TAIL TO C THEN AN ERROR MESSAGE WILL BE PRINTED (SEE METHOD AND PERFORMANCE); D, DD: ; EXIT: THE HEAD AND TAIL OF THE CALCULATED DOUBLE-LENGTH RESULT. DATA AND RESULTS: (D, DD):= (C, CC) + THE SCALAR PRODUCT OF THE VECTORS GIVEN IN THE ARRAYS A[I:I, L:U] AND B[L:U]. LANGUAGE: COMPASS. SUBSECTION: LNGTAMVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGTAMVEC(L, U, I, A, B, C, CC, D, DD); VALUE L, U, I, C, CC; INTEGER L, U, I; REAL C, CC, D, DD; ARRAY A, B; CODE 34412; THE MEANING OF THE FORMAL PARAMETERS IS: L: ; THE LOWER BOUND OF THE RUNNING SUBSCRIPT; U: ; THE UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; THE INDEX OF THE COLUMN-VECTOR GIVEN IN ARRAY A; A: ; THE COLUMN-VECTOR SHOULD BE GIVEN IN ARRAY A[L:U, I:I]; B: ; THE VECTOR SHOULD BE GIVEN IN ARRAY B[L:U]; C, CC: ; THE HEAD AND TAIL OF THE DOUBLE-LENGTH SCALAR THAT HAS TO BE ADDED TO THE CALCULATED SCALAR PRODUCT; IF CC IS NOT A TAIL TO C THEN AN ERROR MESSAGE WILL BE PRINTED (SEE METHOD AND PERFORMANCE); D, DD: ; EXIT: THE HEAD AND TAIL OF THE CALCULATED DOUBLE-LENGTH RESULT. DATA AND RESULTS: (D, DD):= (C, CC) + THE SCALAR PRODUCT OF THE VECTORS GIVEN IN THE ARRAYS A[L:U, I:I] AND B[L:U]. LANGUAGE: COMPASS. SUBSECTION: LNGMATMAT. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGMATMAT(L, U, I, J, A, B, C, CC, D, DD); VALUE L, U, I, J, C, CC; INTEGER L, U, I, J; REAL C, CC, D, DD; ARRAY A, B; CODE 34413; THE MEANING OF THE FORMAL PARAMETERS IS: L: ; THE LOWER BOUND OF THE RUNNING SUBSCRIPT; U: ; THE UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; THE INDEX OF THE ROW-VECTOR GIVEN IN ARRAY A; J: ; THE INDEX OF THE COLUMN-VECTOR GIVEN IN ARRAY B; A: ; THE ROW-VECTOR SHOULD BE GIVEN IN ARRAY A[I:I, L:U]; B: ; THE COLUMN-VECTOR SHOULD BE GIVEN IN ARRAY B[L:U, J:J]; C, CC: ; THE HEAD AND TAIL OF THE DOUBLE-LENGTH SCALAR THAT HAS TO BE ADDED TO THE CALCULATED SCALAR PRODUCT; IF CC IS NOT A TAIL TO C THEN AN ERROR MESSAGE WILL BE PRINTED (SEE METHOD AND PERFORMANCE); D, DD: ; EXIT: THE HEAD AND TAIL OF THE CALCULATED DOUBLE-LENGTH RESULT. DATA AND RESULTS: (D, DD):= (C, CC) + THE SCALAR PRODUCT OF THE VECTORS GIVEN IN THE ARRAYS A[I:I, L:U] AND B[L:U, J:J]. LANGUAGE: COMPASS. SUBSECTION: LNGTAMMAT. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGTAMMAT(L, U, I, J, A, B, C, CC, D, DD); VALUE L, U, I, J, C, CC; INTEGER L, U, I, J; REAL C, CC, D, DD; ARRAY A, B; CODE 34414; THE MEANING OF THE FORMAL PARAMETERS IS: L: ; THE LOWER BOUND OF THE RUNNING SUBSCRIPT; U: ; THE UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; THE INDEX OF THE COLUMN-VECTOR GIVEN IN ARRAY A; J: ; THE INDEX OF THE COLUMN-VECTOR GIVEN IN ARRAY B; A: ; ONE OF THE COLUMN-VECTORS SHOULD BE GIVEN IN ARRAY A[L:U, I:I]; B: ; THE OTHER COLUMN-VECTOR SHOULD BE GIVEN IN ARRAY B[L:U, J:J]; C, CC: ; THE HEAD AND TAIL OF THE DOUBLE-LENGTH SCALAR THAT HAS TO BE ADDED TO THE CALCULATED SCALAR PRODUCT; IF CC IS NOT A TAIL TO C THEN AN ERROR MESSAGE WILL BE PRINTED (SEE METHOD AND PERFORMANCE); D, DD: ; EXIT: THE HEAD AND TAIL OF THE CALCULATED DOUBLE-LENGTH RESULT. DATA AND RESULTS: (D, DD):= (C, CC) + THE SCALAR PRODUCT OF THE VECTORS GIVEN IN THE ARRAYS A[L:U, I:I] AND B[L:U, J:J]. LANGUAGE: COMPASS. SUBSECTION: LNGMATTAM. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGMATTAM(L, U, I, J, A, B, C, CC, D, DD); VALUE L, U, I, J, C, CC; INTEGER L, U, I, J; REAL C, CC, D, DD; ARRAY A, B; CODE 34415; THE MEANING OF THE FORMAL PARAMETERS IS: L: ; THE LOWER BOUND OF THE RUNNING SUBSCRIPT; U: ; THE UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; THE INDEX OF THE ROW-VECTOR GIVEN IN ARRAY A; J: ; THE INDEX OF THE ROW-VECTOR GIVEN IN ARRAY B; A: ; ONE OF THE ROW-VECTORS SHOULD BE GIVEN IN ARRAY A[I:I,L:U]; B: ; THE OTHER ROW-VECTOR SHOULD BE GIVEN IN ARRAY B[J:J, L:U]; C, CC: ; THE HEAD AND TAIL OF THE DOUBLE-LENGTH SCALAR THAT HAS TO BE ADDED TO THE CALCULATED SCALAR PRODUCT; IF CC IS NOT A TAIL TO C THEN AN ERROR MESSAGE WILL BE PRINTED (SEE METHOD AND PERFORMANCE); D, DD: ; EXIT: THE HEAD AND TAIL OF THE CALCULATED DOUBLE-LENGTH RESULT. DATA AND RESULTS: (D, DD):= (C, CC) + THE SCALAR PRODUCT OF THE VECTORS GIVEN IN THE ARRAYS A[I:I, L:U] AND B[J:J, L:U]. LANGUAGE: COMPASS. SUBSECTION: LNGSEQVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGSEQVEC(L, U, IL, SHIFT, A, B, C, CC, D, DD); VALUE L, U, IL, SHIFT, C, CC; INTEGER L, U, IL, SHIFT; REAL C, CC, D, DD; ARRAY A, B; CODE 34416; THE MEANING OF THE FORMAL PARAMETERS IS: L: ; THE LOWER BOUND OF THE RUNNING SUBSCRIPT; U: ; THE UPPER BOUND OF THE RUNNING SUBSCRIPT; IL: ; THE FIRST INDEX OF THE VECTOR GIVEN IN ARRAY A; SHIFT: ; THE INDEX-SHIFTING PARAMETER OF THE VECTOR GIVEN IN B; A: ; ONE OF THE VECTORS SHOULD BE GIVEN IN ARRAY A[P:Q], WHERE P = MIN(IL + (J + L - 1) * (J - 1) // 2; J = L, ..., U) AND Q = MAX(IL + (J + L - 1) * (J - 1) // 2; J = L, ..., U); B: ; THE OTHER VECTOR SHOULD BE GIVEN IN ARRAY B[L + SHIFT : U + SHIFT]; C, CC: ; THE HEAD AND TAIL OF THE DOUBLE-LENGTH SCALAR THAT HAS TO BE ADDED TO THE CALCULATED SCALAR PRODUCT; IF CC IS NOT A TAIL TO C THEN AN ERROR MESSAGE WILL BE PRINTED (SEE METHOD AND PERFORMANCE); D, DD: ; EXIT: THE HEAD AND TAIL OF THE CALCULATED DOUBLE-LENGTH RESULT. DATA AND RESULTS: (D, DD):= (C, CC) + THE SCALAR PRODUCT OF THE VECTORS GIVEN IN THE ARRAYS A[P:Q] (SEE THE MEANING OF PARAMETER A ) AND B[L + SHIFT: U + SHIFT], WHERE THE ELEMENTS OF THE FIRST VECTOR ARE A[IL + (J + L - 1) * (J - 1) // 2], J = L, ..., U. LANGUAGE: COMPASS. SUBSECTION: LNGSCAPRD1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGSCAPRD1(LA, SA, LB, SB, N, A, B, C, CC, D, DD); VALUE LA, SA, LB, SB, N, C, CC; INTEGER LA, SA, LB, SB, N; REAL C, CC, D, DD; ARRAY A, B; CODE 34417; THE MEANING OF THE FORMAL PARAMETERS IS: LA: ; THE FIRST INDEX OF THE VECTOR GIVEN IN ARRAY A; SA: ; THE SPACING OF THE VECTOR GIVEN IN ARRAY A; LB: ; THE FIRST INDEX OF THE VECTOR GIVEN IN ARRAY B; SB: ; THE SPACING OF THE VECTOR GIVEN IN ARRAY B; N: ; THE UPPER BOUND OF THE RUNNING SUBSCRIPT; IF N < 1, THEN ON EXIT THE RESULT (D, DD) WILL SATISFY: (D, DD) = (C, CC); A: ; ONE OF THE VECTORS SHOULD BE GIVEN IN ARRAY A[MIN(LA, LA + (N - 1) * SA) : MAX(LA, LA + (N - 1) * SA)]; B: ; THE OTHER VECTOR SHOULD BE GIVEN IN ARRAY B[MIN(LB, LB + (N - 1) * SB) : MAX(LB, LB + (N - 1) * SB)]; C, CC: ; THE HEAD AND TAIL OF THE DOUBLE-LENGTH SCALAR THAT HAS TO BE ADDED TO THE CALCULATED SCALAR PRODUCT; IF CC IS NOT A TAIL TO C THEN AN ERROR MESSAGE WILL BE PRINTED (SEE METHOD AND PERFORMANCE); D, DD: ; EXIT: THE HEAD AND TAIL OF THE CALCULATED DOUBLE-LENGTH RESULT. DATA AND RESULTS: (D, DD):= (C, CC) + THE SCALAR PRODUCT OF THE VECTORS GIVEN IN THE ARRAYS A[MIN(LA, LA + (N - 1) * SA):MAX(LA, LA + (N - 1) * SA)] AND B[MIN(LB, LB + (N - 1) * SB) : MAX(LB, LB + (N - 1) * SB)], WHERE THE ELEMENTS OF THE VECTORS ARE A[LA + (J - 1) * SA] AND B[LB + (J - 1) * SB], FOR J = 1, .., N. LANGUAGE: COMPASS. SUBSECTION: LNGSYMMATVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGSYMMATVEC(L, U, I, A, B, C, CC, D, DD); VALUE L, U, I, C, CC; INTEGER L, U, I; REAL C, CC, D, DD; ARRAY A, B; CODE 34418; THE MEANING OF THE FORMAL PARAMETERS IS: L: ; THE LOWER BOUND OF THE RUNNING SUBSCRIPT; U: ; THE UPPER BOUND OF THE RUNNING SUBSCRIPT; I: ; THE INDEX OF THE ROW OF THE SYMMETRIC MATRIX, WHOSE UPPER TRIANGLE IS STORED COLUMN-WISE IN THE ONE-DIMENSIONAL ARRAY A; A: ; THE ROW OF THE SYMMETRIC MATRIX SHOULD BE GIVEN IN ARRAY A[P:Q], WHERE, IF I > L THEN P = (I - 1) * I // 2 + L ELSE P = (L - 1) * L // 2 + I, AND IF I > U THEN Q = (I - 1) * I // 2 + U ELSE Q = (U - 1) * U // 2 + I; B: ; THE VECTOR SHOULD BE GIVEN IN ARRAY B[L:U]; C, CC: ; THE HEAD AND TAIL OF THE DOUBLE-LENGTH SCALAR THAT HAS TO BE ADDED TO THE CALCULATED SCALAR PRODUCT; IF CC IS NOT A TAIL TO C THEN AN ERROR MESSAGE WILL BE PRINTED (SEE METHOD AND PERFORMANCE); D, DD: ; EXIT: THE HEAD AND TAIL OF THE CALCULATED DOUBLE-LENGTH RESULT. PROCEDURES USED: DPMUL = CP31103; LNGADD = CP31105. DATA AND RESULTS: (D, DD):= (C, CC) + THE SCALAR PRODUCT OF THE VECTORS GIVEN IN THE ARRAYS A[P:Q] (SEE THE MEANING OF PARAMETER A) AND B[L:U], WHERE THE ELEMENTS OF THE FIRST VECTOR ARE: IF L < I THEN A[(I - 1) * I // 2 + J], J = L, ..., MIN(U, I - 1) AND A[(J - 1) * J // 2 + I], J = I, ..., U, RESPECTIVELY, OTHERWISE A[(J - 1) * J // 2 + I], J = L, ..., U; THE VALUES OF L, U, I SHOULD BE POSITIVE. LANGUAGE: ALGOL 60. SUBSECTION: LNGFULMATVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGFULMATVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC; ARRAY A, B, C; CODE 31505; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX; B: ; ARRAY B[LC:UC]; THE VECTOR; C: ; ARRAY C[LR:UR]; THE RESULT A * B, CALCULATED WITH DOUBLE LENGTH ARITHMETIC, IS DELIVERED IN C. LANGUAGE: COMPASS. (FOR THE COMPASS-VERSION THE PARAMETER B CAN BE ASSUMED TO HAVE BEEN SPECIFIED VALUE.) METHOD AND PERFORMANCE: ELEMENTARY. SUBSECTION: LNGFULTAMVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGFULTAMVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC; ARRAY A, B, C; CODE 31506; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX; B: ; ARRAY B[LR:UR]; THE VECTOR; C: ; ARRAY C[LC:UC]; THE RESULT A' * B, CALCULATED WITH DOUBLE LENGTH ARITHMETIC, IS DELIVERED IN C; HERE A' DENOTES THE TRANSPOSED OF THE MATRIX A. LANGUAGE: COMPASS. (FOR THE COMPASS-VERSION THE PARAMETER B CAN BE ASSUMED TO HAVE BEEN SPECIFIED VALUE.) METHOD AND PERFORMANCE: ELEMENTARY. SUBSECTION: LNGFULSYMMATVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGFULSYMMATVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC, B; INTEGER LR, UR, LC, UC; ARRAY A, B, C; CODE 31507; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LR >= 1; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; LC >= 1; A: ; ARRAY A[L:U], WHERE: L = MIN(LR * (LR - 1) // 2 + LC, LC * (LC - 1) // 2 + LR), U = MAX(UR * (UR - 1) // 2 + UC, UC * (UC - 1) // 2 + UR) AND THE (I,J)-TH ELEMENT OF THE SYMMETRIC MATRIX SHOULD BE GIVEN IN A[J * (J - 1) // 2 + I]; B: ; ARRAY B[LC:UC]; THE VECTOR; C: ; ARRAY C[LR:UR]; THE RESULT A * B, CALCULATED WITH DOUBLE LENGTH ARITHMETIC, IS DELIVERED IN C. PROCEDURES USED: LNGSYMMATVEC = CP34418. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: ELEMENTARY. SUBSECTION: LNGRESVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGRESVEC(LR, UR, LC, UC, A, B, C, X); VALUE LR, UR, LC, UC, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY A, B, C; CODE 31508; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; A: ; ARRAY A[LR:UR,LC:UC]; THE MATRIX; B: ; ARRAY B[LC:UC]; THE VECTOR; X: ; THE VALUE OF THE MULTIPLYING SCALAR; C: ; ARRAY C[LR:UR]; THE RESULT A * B + X * C, CALCULATED WITH DOUBLE LENGTH ARITHMETIC, IS OVERWRITTEN ON C. LANGUAGE: COMPASS. (FOR THE COMPASS-VERSION THE PARAMETER B CAN BE ASSUMED TO HAVE BEEN SPECIFIED VALUE.) METHOD AND PERFORMANCE: ELEMENTARY. SUBSECTION: LNGSYMRESVEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LNGSYMRESVEC(LR, UR, LC, UC, A, B, C, X); VALUE LR, UR, LC, UC, B, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY A, B, C; CODE 31509; THE MEANING OF THE FORMAL PARAMETERS IS: LR, UR: ; LOWER AND UPPER BOUND OF THE ROW-INDEX; LR >= 1; LC, UC: ; LOWER AND UPPER BOUND OF THE COLUMN-INDEX; LC >= 1; A: ; ARRAY A[L:U], WHERE: L = MIN(LR * (LR - 1) // 2 + LC, LC * (LC - 1) // 2 + LR), U = MAX(UR * (UR - 1) // 2 + UC, UC * (UC - 1) // 2 + UR) AND THE (I,J)-TH ELEMENT OF THE SYMMETRIC MATRIX SHOULD BE GIVEN IN A[J * (J - 1) // 2 + I]; B: ; ARRAY B[LC:UC]; THE VECTOR; X: ; THE VALUE OF THE MULTIPLYING SCALAR; C: ; ARRAY C[LR:UR]; THE RESULT A * B + X * C, CALCULATED WITH DOUBLE LENGTH ARITHMETIC, IS OVERWRITTEN ON C. PROCEDURES USED: DPMUL = CP31103; LNGSYMMATVEC = CP34418. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: ELEMENTARY. METHOD AND PERFORMANCE: ALL PROCEDURES GIVEN IN THIS SECTION MAKE USE OF THE DOUBLE-LENGTH ARITHMETIC OPERATIONS AVAILABLE IN HARDWARE ON THE CYBER 73. LET (X, XX) DENOTE A DOUBLE-LENGTH NUMBER, THEN WE WILL SAY THAT XX IS A TAIL TO X, WHEN THE FOLLOWING CONDITIONS HOLD: X = FL1(X + XX), (X, XX) = FL2(X + XX), WHERE FL1(. + .) AND FL2(. + .) DENOTE SINGLE-LENGTH RESPECTIVELY DOUBLE-LENGTH ADDITION WITH TRUNCATING OF THE RESULT TO 48 AND 96 BITS RESPECTIVELY. WHEN A PROCEDURE DELIVERS A DOUBLE LENGTH RESULT IN D AND DD, THEN THESE RESULTS ARE SUCH THAT DD IS A TAIL TO D; WHEN ONE SHOULD PROVIDE AN INITIALIZING DOUBLE LENGTH SCALAR IN C AND CC, THEN CC SHOULD BE A TAIL TO C, OTHERWISE THE FOLLOWING ERROR MESSAGE WILL BE PRINTED: DP PARAMETER TAIL ERROR AND EXECUTION OF THE PROGRAM WILL TERMINATE IN THE USUAL WAY. NOTE THAT CC = 0 IS A TAIL TO C FOR ALL VALUES OF C. FURTHERMORE, IT SEEMS WORTHWHILE TO NOTE THAT THE ARRAY B MUST BE A VALUE PARAMETER IN ALGOL 60, HOWEVER, IN THE COMPASS ROUTINE THE DUPLICATION OF THIS ARRAY IS ONLY DONE IF NECESSARY, I.E. IF THE ACTUAL PARAMETERS B AND C ARE THE SAME. SOURCE TEXTS: THE PROCEDURES IN THIS SECTION ARE WRITTEN IN COMPASS, EXCEPT FOR LNGSYMMATVEC, LNGFULSYMMATVEC AND LNGSYMRESVEC. WE GIVE EQUIVALENT ALGOL 60 TEXTS OF THE COMPASS ROUTINES. FOR THE COMPASS TEXT SEE APPENDIX C, SECTION 1.5.2. 0CODE 34410; PROCEDURE LNGVECVEC(L, U, SHIFT, A, B, C, CC, D, DD); VALUE L, U, SHIFT, C, CC; INTEGER L,U,SHIFT; REAL C, CC, D, DD; ARRAY A, B; BEGIN REAL E, EE; FOR L:= L STEP 1 UNTIL U DO BEGIN DPMUL(A[L], B[L + SHIFT], E, EE); LNGADD(C, CC, E, EE, C, CC) END; D:= C; DD:= CC END LNGVECVEC EOP 0CODE 34411; PROCEDURE LNGMATVEC(L, U, I, A, B, C, CC, D, DD); VALUE L, U, I, C, CC; INTEGER L, U, I; REAL C, CC, D, DD; ARRAY A, B; BEGIN REAL E, EE; FOR L:= L STEP 1 UNTIL U DO BEGIN DPMUL(A[I,L], B[L], E, EE); LNGADD(C, CC, E, EE, C, CC) END; D:= C; DD:= CC END LNGMATVEC; EOP 0CODE 34412; PROCEDURE LNGTAMVEC(L, U, I, A, B, C, CC, D, DD); VALUE L, U, I, C, CC; INTEGER L, U, I; REAL C, CC, D, DD; ARRAY A, B; BEGIN REAL E, EE; FOR L:= L STEP 1 UNTIL U DO BEGIN DPMUL(A[L,I], B[L], E, EE); LNGADD(C, CC, E, EE, C, CC) END; D:= C; DD:= CC END LNGTAMVEC; EOP 0CODE 34413; PROCEDURE LNGMATMAT(L, U, I, J, A, B, C, CC, D, DD); VALUE L, U, I, J, C, CC; INTEGER L, U, I, J; REAL C, CC, D, DD; ARRAY A, B; BEGIN REAL E, EE; FOR L:= L STEP 1 UNTIL U DO BEGIN DPMUL(A[I,L], B[L,J], E, EE); LNGADD(C, CC, E, EE, C, CC) END; D:= C; DD:= CC END LNGMATMAT EOP 0CODE 34414; PROCEDURE LNGTAMMAT(L, U, I, J, A, B, C, CC, D, DD); VALUE L, U, I, J, C, CC; INTEGER L, U, I, J; REAL C, CC, D, DD; ARRAY A, B; BEGIN REAL E, EE; FOR L:= L STEP 1 UNTIL U DO BEGIN DPMUL(A[L,I], B[L,J], E, EE); LNGADD(C, CC, E, EE, C, CC) END; D:= C; DD:= CC END LNGTAMMAT; EOP 0CODE 34415; PROCEDURE LNGMATTAM(L, U, I, J, A, B, C, CC, D, DD); VALUE L, U, I, J, C, CC; INTEGER L, U, I, J; REAL C, CC, D, DD; ARRAY A, B; BEGIN REAL E, EE; FOR L:= L STEP 1 UNTIL U DO BEGIN DPMUL(A[I,L], B[J,L], E, EE); LNGADD(C, CC, E, EE, C, CC) END; D:= C; DD:= CC END LNGMATTAM; EOP 0CODE 34416; PROCEDURE LNGSEQVEC(L, U, IL, SHIFT, A, B, C, CC, D, DD); VALUE L, U, IL, SHIFT, C, CC; INTEGER L, U, IL, SHIFT; REAL C, CC, D, DD; ARRAY A, B; BEGIN REAL E, EE; FOR L:= L STEP 1 UNTIL U DO BEGIN DPMUL(A[IL], B[L + SHIFT], E, EE); IL:= IL + L; LNGADD(C, CC, E, EE, C, CC) END; D:= C; DD:= CC END LNGSEQVEC EOP CODE 34417; PROCEDURE LNGSCAPRD1(LA, SA, LB, SB, N, A, B, C, CC, D, DD); VALUE LA, SA, LB, SB, N, C, CC; INTEGER LA, SA, LB, SB,N; REAL C, CC, D, DD; ARRAY A, B; BEGIN REAL E, EE; INTEGER K; FOR K:= 1 STEP 1 UNTIL N DO BEGIN DPMUL(A[LA], B[LB], E, EE); LA:= LA + SA; LB:= LB + SB; LNGADD(C, CC, E, EE, C, CC) END; D:= C; DD:= CC END; EOP CODE 34418; PROCEDURE LNGSYMMATVEC(L, U, I, A, B, C, CC, D, DD); VALUE L, U, I, C, CC; INTEGER L, U, I; REAL C, CC, D, DD; ARRAY A, B; BEGIN INTEGER K, M; M:= IF L > I THEN L ELSE I; K:= M * (M - 1) // 2; LNGVECVEC(L, IF I <= U THEN I - 1 ELSE U, K, B, A, C, CC, C, CC); LNGSEQVEC(M, U, K + I, 0, A, B, C, CC, D, DD) END LNGSYMMATVEC; EOP CODE 31505; PROCEDURE LNGFULMATVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC; ARRAY A, B, C; BEGIN REAL D, DD; FOR LR:= LR STEP 1 UNTIL UR DO BEGIN LNGMATVEC(LC, UC, LR, A, B, 0, 0, D, DD); C[LR]:= D + DD END END LNGFULMATVEC; EOP CODE 31506; PROCEDURE LNGFULTAMVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC; INTEGER LR, UR, LC, UC; ARRAY A, B, C; BEGIN REAL D, DD; FOR LC:= LC STEP 1 UNTIL UC DO BEGIN LNGTAMVEC(LR, UR, LC, A, B, 0, 0, D, DD); C[LC]:= D + DD END END LNGFULTAMVEC EOP 0CODE 31507; PROCEDURE LNGFULSYMMATVEC(LR, UR, LC, UC, A, B, C); VALUE LR, UR, LC, UC, B; INTEGER LR, UR, LC, UC; ARRAY A, B, C; BEGIN REAL D, DD; FOR LR:= LR STEP 1 UNTIL UR DO BEGIN LNGSYMMATVEC(LC, UC, LR, A, B, 0, 0, D, DD); C[LR]:= D + DD END END LNGFULSYMMATVEC; EOP 0CODE 31508; PROCEDURE LNGRESVEC(LR, UR, LC, UC, A, B, C, X); VALUE LR, UR, LC, UC, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY A, B, C; BEGIN REAL D, DD, E, EE; FOR LR:= LR STEP 1 UNTIL UR DO BEGIN DPMUL(C[LR], X, E, EE); LNGMATVEC(LC, UC, LR, A, B, E, EE, D, DD); C[LR]:= D + DD END END LNGRESVEC; EOP 0CODE 31509; PROCEDURE LNGSYMRESVEC(LR, UR, LC, UC, A, B, C, X); VALUE LR, UR, LC, UC, B, X; INTEGER LR, UR, LC, UC; REAL X; ARRAY A, B, C; BEGIN REAL D, DD, E, EE; FOR LR:= LR STEP 1 UNTIL UR DO BEGIN DPMUL(C[LR], X, E, EE); LNGSYMMATVEC(LC, UC, LR, A, B, E, EE, D, DD); C[LR]:= D + DD END END LNGSYMRESVEC; EOP ########################################################################### ########################################################################### 1SECTION : 1.5.3 (MARCH 1977) PAGE 1 AUTHORS: T.J.DEKKER & J.KOOPMAN. CONTRIBUTOR: J.KOOPMAN INSTITUTE: UNIVERSITY OF AMSTERDAM RECIEVED: 770328 BRIEF DESCRIPTION: LNGREATODECI CONVERTS A DOUBLE-LENGTH NUMBER TO A NUMBER IN DECIMAL FLOATING-POINT REPRESENTATION. THE RESULT CONSISTS OF A MANTISSA MANT OF MAGNITUDE<1 (AND >=.1) AND A DECIMAL EXPONENT EXPO. KEYWORDS: DOUBLE PRECISION ARITHMETIC, CONVERSION, DECIMAL REPRESENTATION. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE LNGREATODECI(X, XX, S, MANT, EXPO); VALUEX,XX,S;INTEGERS,EXPO;REALX,XX;INTEGERARRAYMANT; CODE 31100; THE MEANING OF THE FORMAL PARAMETERS IS: X,XX : ; ENTRY: THE HEAD (X) AND TAIL (XX) OF THE NUMBER THAT IS TO BE CONVERTED; S : ; ENTRY: THE DESIRED NUMBER OF SIGNIFICANT DIGITS OF THE CONVERTED VARIABLE. ONE SHOULD NOT CHOOSE S LARGER THAN THE NUMBER OF DIGITS CORRESPONDING TO THE DOUBLE LENGTH MACHINE PRECISION (FOR CDC: S<29 ). OTHERWISE, THE LAST DIGITS ARE USELESS, AS ALL OPERATIONS IN LNGREATODECI ARE PERFORMED IN DOUBLE-LENGTH A- RITHMETIC; IF S IS CHOSEN NONPOSITIVE,ONLY THE SIGN AND THE DECIMAL EXPONENT OF THE CONVERTED NUMBER ARE DELIVERED; MANT : ; INTEGERARRAYMANT[0:S]; EXIT: MANT[0]: THE SIGN OF THE DECIMAL NUMBER; MANT[I] (I^=0): THE I-TH SIGNIFICANT DIGIT OF THE MANTISSA OF THE CONVERTED NUMBER; I.E. THE VALUE OF THE MANTISSA EQUALS MANT[0]*(MANT[1]/10+MANT[2]/100+...MANT[S]/10**S); EXPO : ; EXIT: THE DECIMAL EXPONENT OF THE CONVERTED NUMBER, I.E. THE DOUBLE-LENGTH NUMBER (X,XX) APPROXIMATELY EQUALS MANTISSA*10**EXPO WITH THE VALUE OF MANTISSA GIVEN IN MANT. PROCEDURES USED: LNG SUB = CP31106. LNG MUL = CP31108. DP POW = CP31109. RUNNING TIME: ROUGHLY PROPORTIONAL TO LN(LN(X))+S. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: LNGREATODECI DETERMINES THE DECIMAL EXPONENT EXPO. AFTER THAT, THE LONG REAL NUMBER (X,XX) IS DIVIDED BY 10**EXPO IN DOUBLE PRECISION. BY TRUNCATING THE RESULT, THE FIRST MOST SIGNIFICANT DIGIT OF THE MANTISSA IS OB- TAINED. SUBTRACTING THIS DIGIT FROM (X,XX)/10**EXPO, MULTIPLYING THE RESULT WITH 10, THE NEXT MOST SIGNI- FICANT DIGIT CAN BE OBTAINED BY TRUNCATION. THIS PRO- CESS OF SUBTRACTION, MULTIPLICATION AND TRUNCATION WILL BE REPEATED UNTIL S DIGITS ARE OBTAINED. FINALLY, THE MANTISSA THUS OBTAINED IS PROPERLY ROUNDED. EXAMPLE OF USE: BEGINCOMMENTEXAMPLE OF USE OF LNGREATODECI AND DP POW; INTEGERS,EXPO; REALOP,OPL; PROCEDUREPRINT(S,MANT,EXPONENT); VALUES,EXPONENT;INTEGERS,EXPONENT;INTEGERARRAYMANT; BEGININTEGERK; OUTCHARACTER(61,(-++),MANT[0]+2); FORK:=1STEP1UNTILSDO BEGINIFK=1THENOUTPUT(61,((.))); OUTPUT(61,(D),MANT[K]) END;OUTPUT(61,((),+3D),EXPONENT) ENDPRINT; DP POW(2,48,OP,OPL); FORS:=0STEP4 UNTIL28DO BEGININTEGERARRAYMANT[0:S]; LNGREATODECI(OP,OPL,S,MANT,EXPO); PRINT(S,MANT,EXPO); OUTPUT(61,(/)) END END DELIVERS: ++015 +.2815+015 +.28147498+015 +.281474976711+015 +.2814749767106560+015 +.28147497671065600000+015 +.281474976710656000000000+015 +.2814749767106560000000000000+015 SOURCE TEXT(S): CODE31100; PROCEDURELNGREATODECI(X,XX,S,MANT,EXPO); VALUEX,XX,S;INTEGERS,EXPO;REALX,XX;INTEGERARRAYMANT; BEGININTEGERI,K; REALP,PP; MANT[0]:=SIGN(X);IFX<0THENBEGINX:=-X;XX:=-XXEND; IFX=0THENEXPO:=0 ELSEEXPO:=ENTIER(LN(X)/LN(10))+1; DP POW(10,-EXPO,P,PP); LNG MUL(X,XX,P,PP,X,XX); FORI:=0WHILEENTIER(X)=0 & X^=0 DO BEGINLNG MUL(X,XX,10,0,X,XX);EXPO:=EXPO-1END; FORI:=1STEP1UNTILSDO BEGINK:=ENTIER(X);IFK>9THENK:=9;MANT[I]:=K; LNG SUB(X,XX,K,0,P,PP);LNG MUL(P,PP,10,0,X,XX) END; IFENTIER(X)>=5 THENBEGINFORI:=SSTEP-1UNTIL1DO BEGINK:=MANT[I]+1; IFK<10THENBEGINMANT[I]:=K;GOTOREADY END; MANT[I]:=0 END; EXPO:=EXPO+1; IFS>0THENMANT[1]:=1; READY: END; EXPO:=EXPO+1 END LNGREATODECI; EOP ########################################################################## ########################################################################## 1SECTION : 2.2.1.1 (OCTOBER 1975) AUTHOR: C.G. VAN DER LAAN. INSTITUTE: REKENCENTRUM RIJKSUNIVERSITEIT GRONINGEN. RECEIVED: 741114. BRIEF DESCRIPTION: THIS SECTION CONTAINS THE PROCEDURES POL, TAYPOL, NORDERPOL AND DERPOL. POL EVALUATES A POLYNOMIAL; DERPOL EVALUATES THE FIRST K DERIVATIVES OF A POLYNOMIAL; NORDERPOL EVALUATES THE FIRST K NORMALIZED DERIVATIVES OF A POLYNOMIAL (I.E. J-TH DERIVATIVE/(J FACTORIAL),J=0,1,...,K<=DEGREE; TAYPOL EVALUATES X**J*(J-TH DERIVATIVE)/(J FACTORIAL), J=0,1,...,K<=DEGREE. KEYWORDS: POLYNOMIAL EVALUATION, (NORMALIZED) DERIVATIVES, DERIVATIVES OF A POLYNOMIAL. SUBSECTION: POL. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REALPROCEDURE POL(N,X,A); VALUEN,X;INTEGERN;REALX;ARRAYA; CODE 31040; POL:=A[0]+A[1]*X+...+A[N]*X**N; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; X: ; ENTRY: THE ARGUMENT OF THE POLYNOMIAL; A: ; ARRAYA[0:N]; ENTRY: THE COEFFICIENTS OF THE POLYNOMIAL A[0]+A[1]*X+...+A[N]*X**N. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N (N MULTIPLICATIONS AND ADDITIONS). LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE METHOD USED FOR EVALUATION IS HORNER'S RULE (SYNTHETIC DIVISION). THE ERROR GROWTH IS GIVEN BY A LINEAR FUNCTION OF THE DEGREE OF THE POLYNOMIAL (SEE VAN DER LAAN, STOER(1972) P. 29 (EX. 11) OR WILKINSON(1963) P. 36,37). SUBSECTION: DERPOL. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE DERPOL(N,K,X,A); VALUEN,K,X;INTEGERN,K;REALX;ARRAYA; CODE 31243; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; K: ; ENTRY: THE FIRST K DERIVATIVES ARE TO BE CALCULATED; X: ; ENTRY: THE ARGUMENT OF THE POLYNOMIAL; A: ; ARRAYA[0:N]; ENTRY: THE COEFFICIENTS OF THE POLYNOMIAL A[0]+A[1]*X+...+A[N]*X**N; EXIT: THE J-TH DERIVATIVE IS DELIVERED IN A[J], J=0,1,...,K<= DEGREE; THE OTHER ELEMENTS ARE GENERALLY ALTERED. PROCEDURES USED : NORDERPOL = CP31242 RUNNING TIME: THE NUMBER OF ADDITIONS IS (K+1)*(N-K/2) AND THE NUMBER OF MULTIPLICATIONS IS N, IN FIRST ORDER. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SEE TAYPOL(THIS SECTION). SUBSECTION: NORDERPOL. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE NORDERPOL(N,K,X,A); VALUEN,K,X;INTEGERN,K;REALX;ARRAYA; CODE 31242; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; K: ; THE FIRST K NORMALIZED DERIVATIVES ARE TO BE CALCULATED (I.E. (J-TH DERIVATIVE)/(J FACTORIAL), J=0,1,...,K<=DEGREE). X: ; ENTRY: THE ARGUMENT OF THE POLYNOMIAL; A: ; ARRAYA[0:N]; ENTRY: THE COEFFICIENTS OF THE POLYNOMIAL A[0]+A[1]*X+...+A[N]*X**N; EXIT: THE J-TH NORMALIZED DERIVATIVE IS DELIVERED IN A[J] J=0,1,...,K<=DEGREE; THE OTHER ELEMENTS ARE GENERALLY ALTERED. PROCEDURES USED: NONE. REQUIRED CENTRAL MEMORY: AN AUXILIARY ARRAY OF ORDER N + 1 IS DECLARED. RUNNING TIME: THE NUMBER OF ADDITIONS IS (K+1)*(N-K/2) AND THE NUMBER OF MULTIPLICATIONS/DIVISIONS IS 2 * N + K. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SEE TAYPOL(THIS SECTION). SUBSECTION: TAYPOL. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE TAYPOL(N,K,X,A); VALUEN,K,X;INTEGERN,K;REALX;ARRAYA; CODE 31241; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; K: ; ENTRY: THE FIRST K TERMS X**J*(J-TH DERIVATIVE)/(J FACTORIAL), J=0,1,...,K<=DEGREE, ARE TO BE CALCULATED; X: ; ENTRY: THE ARGUMENT OF THE POLYNOMIAL; A: ; ARRAYA[0:N]; ENTRY: THE COEFFICIENTS OF THE POLYNOMIAL A[0]+A[1]*X+...+A[N]*X**N; EXIT: THE J-TH TERM X**J*(J-TH DERIVATIVE)/(J FACTORIAL), IS DELIVERED IN A[J], J=0,1,...,K<=DEGREE; THE OTHER ELEMENTS ARE GENERALLY ALTERED. PROCEDURES USED: NONE. RUNNING TIME: THE NUMBER OF ADDITIONS IS (K+1)*(N-K/2) AND THE NUMBER OF MULTIPLICATIONS IS 2 * N. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE METHOD OF EVALUATION IS GIVEN BY TRAUB AND SHAW(1972,1974). LET X**J*(J-TH DERIVATIVE OF THE POLYNOMIAL)/(J FACTORIAL)= (J OVER J)*A[J]*X**J+(J+1 OVER J)*A[J+1]*X**(J+1)+...+(N OVER J)* A[N]*X**N,THEN THE J-TH DERIVATIVE (UP TO A FACTOR) CAN BE OBTAINED FROM THE BINOMIAL COEFFICIENTS FOLLOWED BY EVALUATION OF THE ABOVE INPRODUCT. THE SHAW AND TRAUB ALGORITHM PERFORMS THE BUILDING UP OF THE BINOMIAL COEFFICIENTS IMPLICITLY. WE HAVE NOT IMPLEMENTED THE MORE SOPHISTICATED ALGORITHM, BASED ON DIVISORS OF N+1, BECAUSE OF THE MORE COMPLEX APPEARANCE OF THE IMPLEMENTATION AND BECAUSE OF THE DIFFICULTY IN CHOSING THE MOST EFFICIENT DIVISOR. OUR (RESTRICTED) IMPLEMENTATION OF THE ONE-PARAMETER FAMILY OF ALGORITHMS PRESERVES THE LINEAR NUMBER OF MULTIPLICATIONS (2*N (NORDERPOL, TAYPOL) AND 3*N (DERPOL)). THE ABSOLUTE ERROR IS OF ORDER MAX((N OVER N)*A[N]*X**(N-K),..., (N OVER K)*A[K]), FOR THE K-TH NORMALIZED DERIVATIVE (SEE VAN DER LAAN OR WOZNIAKOWSKI). REFERENCES: [1].SHAW,M. AND J. TRAUB: ON THE NUMBER OF MULTIPLICATIONS FOR THE EVALUATION OF A POLYNOMIAL AND SOME OF ITS DERIVATIVES (21 P.). JOURN. ACM, 1974, VOL. 21, NO. 1, P. 161-167. [2].STOER,J. : EINFUEHRUNG IN DIE NUMERISCHE MATHEMATIK 1. SPRINGER, 1972. [3].VAN DER LAAN C.G.: ORTHOGONAL POLYNOMIALS IN NUMERICAL ANALYSIS. 1. ERROR ANALYSIS OF RECURRENCE RELATIONS IN FLOATING-POINT COMPUTATION, (TO APPEAR). [4].WILKINSON,J.H. : ROUNDING ERRORS IN ALGEBRAIC PROCESSES. HSO, NOTES ON APPLIED SCIENCES NO. 32, 1963. [5].WOZNIAKOWSKI,H.: ROUNDING ERROR ANALYSIS FOR THE EVALUATION OF A POLYNOMIAL AND SOME OF ITS DERIVATIVES. SIAM J. OF NUM. AN. VOL 11, NO. 4, P. 780-787. EXAMPLE OF USE: AS A FORMAL TEST OF THE PROCEDURE DERPOL THE DERIVATIVES OF THE POLYNOMIAL 3*X**3-2*X**2+X-1 ARE CALCULATED AT X=1. BEGINARRAYA[0:3]; A[3]:=3;A[2]:=-2;A[1]:=1;A[0]:=-1; DERPOL(3,3,1,A); OUTPUT(61,( (THE 0-TH UNTIL AND INCLUDING THE 3-TH DERIVATIVES :), 4(BZDB)),A[0],A[1],A[2],A[3]); END EXAMPLE OF USE; THE 0-TH UNTIL AND INCLUDING THE 3-TH DERIVATIVES : 1 6 14 18 SOURCE TEXT(S): 0CODE 31040; REAL PROCEDURE POL(N,X,A); VALUE N,X;INTEGER N;REAL X;ARRAY A; BEGIN REAL R; R:= 0; FOR N:= N STEP -1 UNTIL 0 DO R:=R*X + A[N]; POL:= R END POL EOP 0CODE 31241; PROCEDURE TAYPOL(N,K,X,A); VALUE N,K,X; INTEGER N,K;REAL X;ARRAY A; IF X^= 0 THEN BEGIN INTEGER I,J,NM1; REAL XJ,AA,H; XJ:=1; FOR J:= 1 STEP 1 UNTIL N DO BEGIN XJ:=XJ*X;A[J]:=A[J]*XJ END; AA:=A[N];NM1:=N-1; FOR J:= 0 STEP 1 UNTIL K DO BEGIN H:=AA; FOR I:= NM1 STEP -1 UNTIL J DO H:= A[ I]:=A[I]+H END END ELSE FOR K:= K STEP -1 UNTIL 1 DO A[K]:=0; EOP 0CODE 31242; PROCEDURE NORDERPOL (N,K,X,A); VALUE N,K,X; INTEGER N,K;REAL X;ARRAY A; IF X^= 0 THEN BEGIN INTEGER I,J,NM1; REAL XJ,AA,H; ARRAY XX[0:N]; XJ:=1; FOR J:= 1 STEP 1 UNTIL N DO BEGIN XJ:=XX[J]:=XJ*X;A[J]:=A[J]*XJ END; H:=AA:=A[N];NM1:=N-1; FOR I:= NM1 STEP -1 UNTIL 0 DO H:= A[I]:=A[I]+H; FOR J:= 1 STEP 1 UNTIL K DO BEGIN H:=AA; FOR I:= NM1 STEP -1 UNTIL J DO H:= A[ I]:=A[I]+H; A[J]:=H/XX[J] END END NORDERPOL ; EOP 0CODE 31243; PROCEDURE DERPOL (N,K,X,A); VALUE N,K,X; INTEGER N,K;REAL X;ARRAY A; BEGIN INTEGER J; REAL FAC; FAC:=1; NORDERPOL (N,K,X,A); FOR J:= 2 STEP 1 UNTIL K DO BEGIN FAC:=FAC*J;A[J]:=A[J]*FAC END END DERPOL ; EOP ########################################################################## ########################################################################## 1SECTION : 2.2.2.1 (NOVEMBER 1978) AUTHOR: C.G. VAN DER LAAN CONTRIBUTORS: C.G. VAN DER LAAN, M. VOORINTHOLT INSTITUTE: REKENCENTRUM RIJKSUNIVERSITEIT GRONINGEN RECEIVED: 780601 BRIEF DESCRIPTION: THIS SECTION CONTAINS SIX PROCEDURES FOR THE EVALUATION OF ORTHOGONAL POLYNOMIALS: ORTPOL,ORTPOLSYM: EVALUATE AN ORTHOGONAL POLYNOMIAL, ALLORTPOL,ALLORTPOLSYM: EVALUATE ALL ORTHOGONAL POLYNOMIALS OF DEGREE LESS THAN A GIVEN POSITIVE INTEGER. SUMORTPOL,SUMORTPOLSYM: EVALUATE A SERIES OF ORTHOGONAL POLYNOMIALS. THE PROCEDURES ENDING WITH SYM ARE EFFICIENT VERSIONS FOR SYMMETRICAL POLYNOMIALS (I.E. ODD INDEXED POLYNOMIALS THAT ARE ODD FUNCTIONS AND EVEN INDEXED POLYNOMIALS THAT ARE EVEN FUNCTIONS); KEYWORDS: ORTHOGONAL POLYNOMIAL, SERIES OF ORTHOGONAL POLYNOMIALS, LINEAR THREE TERM (IN)HOMOGENEOUS RECURRENCE RELATION. DATA AND RESULTS: ORTHOGONAL POLYNOMIALS CAN BE CHARACTERIZED BY A RECURRENCE RELATION OF THE FOLLOWING FORM A1[K] * F[K+1](X) = (A2[K] + X * A3[K]) * F[K](X) - A4[K] * F[K-1](X), WHERE AI[K] ARE REAL NUMBERS. SEE FOR INSTANCE TABLE 22.7 IN ABRAMOWITZ AND STEGUN (1964) FOR THE CLASSICAL ORTHOGONAL POLYNOMIALS. BY AN ELEMENTARY TRANSFORMATION, THE COEFFICIENTS IN THE RECURRENCE RELATION ABOVE CAN BE MADE SUCH THAT THE RECURRENCE RELATION IS GIVEN BY P[K+1](X) = (X - B[K]) * P[K](X) - C[K] * P[K-1](X), P[0](X) = 1, P[1](X) = X - B[0]. IN THIS WAY WE OBTAIN A NORMALIZATION OF THE ORTHOGONAL POLYNOMIAL SUCH THAT THE LEADING COEFFICIENT IN THE EXPLICIT REPRESENTATION OF P[K](X) EQUALS 1. AS A CONSEQUENCE THE FOLLOWING RELATION HOLDS BETWEEN THE VALUES OBTAINED BY OUR PROCEDURES (E.G. ORTPOL) AND THE VALUES FROM THE REPRESENTATION IN ABRAMOWITZ AND STEGUN (1964) (I.C. F) N-1 ORTPOL[N](X) = PROD (A1[K]/A3[K]) * F[N](X) , K=0 WHERE A1[K], A3[K], F[N] ARE DETERMINED BY 22.4 AND 22.7 IN ABRAMOWITZ AND STEGUN(1964). WE NOTICE THAT OVERFLOW/UNDERFLOW MAY OCCUR EARLIER AS A CONSEQUENCE OF OUR NORMALIZATION. IN ORDER TO AVOID MISTAKES WHEN OBTAINING THE RECURRENCE COEFFICIENTS THE FOLLOWING TABLE GIVES THE RECURRENCE COEFFICIENTS FOR THE CLASSICAL ORTHOGONAL POLYNOMIALS (NOTE THAT THE FIRST AND SECOND POLYNOMIAL ARE DEFINED BY THE NORMALIZATION AND B[0]): POLYNOMIAL KIND : RECURRENCE COEFFICIENTS ----------------------:-------------------------------------------- : B[K] : C[K] :-----------------------:-------------------- CHEBYSHEV (1-ST KIND) : 0 : 1/2 , K=1 : : 1/4 , K>1 : : CHEBYSHEV (2-ND KIND) : 0 : 1/4 : : LEGENDRE : 0 : K**2/(4*K**2-1) : : JACOBI : -(ALPHA**2-BETA**2)/ : 4*(1+ALPHA)* : ((2*K+ALPHA+BETA)* : (1+BETA)/((ALPHA+ : (2*K+ALPHA+BETA+2)) : BETA+2)**2*(ALPHA+ : : BETA+3)) , K=1 : : : : 4*K*(K+ALPHA)* : : (K+BETA)*(K+ALPHA+ : : BETA)/((2*K+ALPHA+ : : BETA)**2*((2*K+ : : ALPHA+BETA)**2-1)) : : , K>1 : : : : (ALPHA,BETA > -1) : : LAGUERRE : 2*K+ALPHA+1 : K*(K+ALPHA) : : HERMITE : 0 : K/2 IN GENERAL THE RECURRENCE COEFFICIENTS MAY BE OBTAINED BY USE OF THE PROCEDURE RECCOF. THE ABOVE TABLE IS OBTAINED BY ADAPTION OF TABLE 22.7,ABRAMOWITZ AND STEGUN (1964) P. 782, AS FOLLOWS: (NOTE THAT N>=1; FOR N=0 CONSULT 22.4) B[I]:=-A2[I]/A3[I] , I=0,1,...,N-1 C[I]:=(A4[I]*A1[I-1])/(A3[I]*A3[I-1]) , I=1,2,...,N-1. METHOD AND PERFORMANCE: LET THE ORTHOGONAL POLYNOMIAL BE DEFINED BY P[K+1](X)=(X-B[K])*P[K](X)-C[K]*P[K-1](X) , K=1,2,...N-1 WHERE B[0:N-1], C[1:N-1] CONTAIN THE RECURRENCE COEFFICIENTS AND P[1](X)=X-B[0], P[0](X)=1 (SEE STOER 1972, P. 119). THEN N-1 / X-B[K] 1 \ / 1 \ P[N](X) = (X-B[0],1) * PROD [ ] [ ] , N=1,2,..... K=1 \ -C[K] 0 / \ 0 / AND A[0]+A[1]*P[1](X)+...+A[N]*P[N](X)= N J-1 / X-B[K] 1 \ / A[J] \ A[0] + (X-B[0],1) * SUM PROD [ ] [ ] . J=1 K=1 \ -C[K] 0 / \ 0 / THESE EXPRESSIONS ARE EVALUATED BY A GENERALISED HORNER RULE. (SEE ALSO LUKE, 1969, P. 327). REFERENCES: ABRAMOWITZ, M. & I. STEGUN (1964): HANDBOOK OF MATHEMATICAL FUNCTIONS, NATIONAL BUREAU OF STANDARDS, WASHINGTON D.C. LUKE, Y.L. (1969): THE SPECIAL FUNCTIONS AND THEIR APPROXIMATIONS I, ACADEMIC PRESS, LONDON, NEW YORK. STOER, J. (1972): EINFUEHRUNG IN DIE NUMERISCHE MATHEMATIK I, SPRINGER VERLAG, BERLIN. SUBSECTION: ORTPOL. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: REAL PROCEDURE ORTPOL(N,X,B,C); VALUE N,X; INTEGER N; REAL X; ARRAY B,C; CODE 31044; ORTPOL DELIVERS THE VALUE OF THE ORTHOGONAL POLYNOMIAL OF DEGREE N FOR THE ARGUMENT X AS DETERMINED BY THE RECURRENCE COEFFICIENTS. THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; X: ; ENTRY: THE ARGUMENT OF THE ORTHOGONAL POLYNOMIAL; B,C: ; ARRAY B[0:N-1], C[1:N-1]; ENTRY: THE RECURRENCE COEFFICIENTS (SEE DATA AND RESULTS). SUBSECTION: ORTPOLSYM. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: REAL PROCEDURE ORTPOLSYM(N,X,C); VALUE N,X; INTEGER N; REAL X; ARRAY C; CODE 31048; ORTPOLSYM DELIVERS THE VALUE OF THE ORTHOGONAL POLYNOMIAL OF DEGREE N FOR THE ARGUMENT X AS DETERMINED BY THE RECURRENCE COEFFICIENTS. THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; X: ; ENTRY: THE ARGUMENT OF THE ORTHOGONAL POLYNOMIAL; C: ; ARRAY C[1:N-1]; ENTRY: THE RECURRENCE COEFFICIENTS (SEE DATA AND RESULTS). SUBSECTION: ALLORTPOL. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE ALLORTPOL(N,X,B,C,P); VALUE N,X; INTEGER N; REAL X; ARRAY B,C,P; CODE 31045; THE MEANING OF THE FORMAL PARAMETERS IS: N,X,B,C: SEE ORTPOL (THIS SECTION); P: ; ARRAY P[0:N]; EXIT: P[K] CONTAINS, FOR THE ARGUMENT, THE VALUE OF THE K-TH ORTHOGONAL POLYNOMIAL AS DEFINED BY THE RECURRENCE COEFFICIENTS. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE ALLORTPOLSYM(N,X,C,P); VALUE N,X; INTEGER N; REAL X; ARRAY C,P; CODE 31049; THE MEANING OF THE FORMAL PARAMETERS IS: N,X,C: SEE ORTPOLSYM (THIS SECTION); P: ; ARRAY P[0:N]; EXIT: P[K] CONTAINS, FOR THE ARGUMENT, THE VALUE OF THE K-TH ORTHOGONAL POLYNOMIAL AS DEFINED BY THE RECURRENCE COEFFICIENTS. SUBSECTION: SUMORTPOL. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: REAL PROCEDURE SUMORTPOL(N,X,B,C,A); VALUE N,X; INTEGER N; REAL X; ARRAY B,C,A; CODE 31047; SUMORTPOL : DELIVERS THE VALUE OF THE POLYNOMIAL A[0]+A[1]*P[1](X)+...+A[N]*P[N](X) WHERE P[K](X) IS THE K-TH ORTHOGONAL POLYNOMIAL. THE MEANING OF THE FORMAL PARAMETERS IS: N,X,B,C: SEE ORTPOL (THIS SECTION); A: ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE SERIES EXPANSION A[0]+A[1]*P[1](X)+...+A[N]*P[N](X) WHERE P[K](X) IS THE K-TH ORTHOGONAL POLYNOMIAL AS DEFINED BY THE RECURRENCE COEFFICIENTS. SUBSECTION: SUMORTPOLSYM. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: REAL PROCEDURE SUMORTPOLSYM(N,X,C,A); VALUE N,X; INTEGER N; REAL X; ARRAY C,A; CODE 31058; SUMORTPOLSYM : DELIVERS THE VALUE OF THE POLYNOMIAL A[0]+A[1]*P[1](X)+...+A[N]*P[N](X) WHERE P[K](X) IS THE K-TH ORTHOGONAL POLYNOMIAL. THE MEANING OF THE FORMAL PARAMETERS IS: N,X,C: SEE ORTPOLSYM (THIS SECTION); A: ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE SERIES EXPANSION A[0]+A[1]*P[1](X)+...+A[N]*P[N](X) WHERE P[K](X) IS THE K-TH ORTHOGONAL POLYNOMIAL AS DEFINED BY THE RECURRENCE COEFFICIENTS. EXAMPLE OF USE: THE FOLLOWING PROGRAM DELIVERS THE VALUES OF THE LAGUERRE POLYNOMIAL OF DEGREES 0,1,2,3,4,5 FOR X=0 BY MEANS OF THE PROCEDURE ALLORTPOL (B[K]=2*K+1, C[K]=K**2): BEGIN ARRAY B[0:4], C[1:4], P[0:5]; INTEGER I; B[0]:=1; FOR I:=1 STEP 1 UNTIL 4 DO BEGIN B[I]:=2*I+1; C[I]:=I**2; END I; ALLORTPOL(5,0,B,C,P); OUTPUT(61,(2/,6(2B,+2ZD.D)),P); END PROGRAM; RESULTS (NOTE THE DIFFERENCE WITH FIGURE 22.9 IN ABRAMOWITZ AND STEGUN (1964) BECAUSE OF THE NORMALIZATION): +1.0 -1.0 +2.0 -6.0 +24.0 -120.0 SOURCE TEXTS: CODE 31044; REAL PROCEDURE ORTPOL(N,X,B,C); VALUE N,X; INTEGER N; REAL X; ARRAY B,C; IF N=0 THEN ORTPOL:=1 ELSE BEGIN INTEGER K,L; REAL R,S,H; R:=X-B[0]; S:=1; L:=N-1; FOR K:=1 STEP 1 UNTIL L DO BEGIN H:=R; R:=(X-B[K])*R-C[K]*S; S:=H; END; ORTPOL:=R; END ORTPOL; EOP 0 CODE 31048; REAL PROCEDURE ORTPOLSYM(N,X,C); VALUE N,X; INTEGER N; REAL X; ARRAY C; IF N=0 THEN ORTPOLSYM:=1.0 ELSE BEGIN INTEGER K,L; REAL R,S,H; R:=X; S:=1.0; L:=N-1; FOR K:=1 STEP 1 UNTIL L DO BEGIN H:=R; R:=X*R-C[K]*S; S:=H END; ORTPOLSYM:=R END ORTPOLSYM; EOP 0 CODE 31045; PROCEDUREALLORTPOL(N,X,B,C)RESULTS:(P); VALUE N,X; INTEGER N;REAL X;ARRAY B,C,P; IF N=0 THEN P[0]:=1ELSE BEGIN INTEGER K,K1; REAL R,S,H; R:=P[1]:=X-B[0]; S:=P[0]:=1;K:=1; FOR K1:=2 STEP 1 UNTIL N DO BEGIN H:=R; P[K1]:=R:=(X-B[K])*R-C[K]*S; S:=H; K:=K1; END; END ALLORTPOL EOP CODE 31049; PROCEDURE ALLORTPOLSYM(N,X,C)RESULTS:(P); VALUE N,X; INTEGER N; REAL X; ARRAY C,P; IF N=0 THEN P[0]:=1.0 ELSE BEGIN INTEGER K; REAL R,S,H; R:=P[1]:=X; S:=P[0]:=1.0; FOR K:=2 STEP 1 UNTIL N DO BEGIN H:=R; P[K]:=R:=X*R-C[K-1]*S; S:=H END; END ALLORTPOLSYM; EOP 0 CODE 31047; REAL PROCEDURE SUMORTPOL(N,X,B,C,A); VALUE N,X; INTEGER N; REAL X; ARRAY B,C,A; IF N=0 THEN SUMORTPOL:=A[0] ELSE BEGIN INTEGER K; REAL H,R,S; R:=A[N]; S:=0; FOR K:=N-1 STEP -1 UNTIL 1 DO BEGIN H:=R; R:=A[K]+(X-B[K])*R+S; S:= -C[K]*H END; SUMORTPOL:=A[0]+(X-B[0])*R+S END SUMORTPOL; EOP 0 CODE 31058; REAL PROCEDURE SUMORTPOLSYM(N,X,C,A); VALUE N,X; INTEGER N; REAL X; ARRAY C,A; IF N=0 THEN SUMORTPOLSYM:=A[0] ELSE BEGIN INTEGER K; REAL H,R,S; R:=A[N]; S:=0; FOR K:=N-1 STEP -1 UNTIL 1 DO BEGIN H:=R; R:=A[K]+X*R+S; S:= -C[K]*H END; SUMORTPOLSYM:=A[0]+X*R+S END SUMORTPOLSYM; EOP ########################################################################### ########################################################################### 1SECTION : 2.2.2.2 (DECEMBER 1978) AUTHOR: C.G. VAN DER LAAN. CONTRIBUTORS: C.G. VAN DER LAAN, M. VOORINTHOLT. INSTITUTE: REKENCENTRUM RIJKSUNIVERSITEIT GRONINGEN. RECEIVED: 780601. BRIEF DESCRIPTION: THIS SECTION CONTAINS FOUR PROCEDURES ABOUT CHEBYSHEV POLYNOMIALS OF THE FIRST KIND: CHEPOLSUM: EVALUATES A (FINITE) SUM OF CHEBYSHEV POLYNOMIALS, ODDCHEPOLSUM: EVALUATES A (FINITE) SUM OF CHEBYSHEV POLYNOMIALS OF ODD DEGREE, CHEPOL: EVALUATES A CHEBYSHEV POLYNOMIAL, ALLCHEPOL: EVALUATES ALL CHEBYSHEV POLYNOMIALS WITH DEGREE LESS THAN A GIVEN POSITIVE INTEGER. KEYWORDS: (FINITE) SUM OF (SHIFTED) CHEBYSHEV POLYNOMIALS OF THE FIRST KIND, GOERTZEL,WATT,CLENSHAW,GENERALIZED HORNER ALGORITHM, LINEAR THREE TERM (INHOMOGENEOUS) RECURRENCE RELATION. REFERENCES: CLENSHAW, C.W. (1962): CHEBYSHEV SERIES FOR MATHEMATICAL FUNCTIONS. MATH. TAB. NAT. PHYS. LAB. 5, LONDON. HMO. FOX, L. & I.B. PARKER (1972): CHEBYSHEV POLYNOMIALS IN NUMERICAL ANALYSIS. OXFORD UNIVERSITY PRESS. RIVLIN, T.J. (1974): THE CHEBYSHEV POLYNOMIALS. WILEY. STOER,J.(1972): EINFUEHRUNG IN DIE NUMERISCHE MATHEMATIK 1. HEIDELBERGER TASCHENBUECHER 105,SPRINGER-VERLAG. SUBSECTION: CHEPOLSUM. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: REALPROCEDURECHEPOLSUM(N,X,A); VALUEN,X;INTEGERN;REALX;ARRAYA; CODE31046; CHEPOLSUM:=THE VALUE OF THE CHEBYSHEV SUM A[0] + A[1]*T[1](X) + .... + A[N]*T[N](X), WHERE T[1](X),....,T[N](X) ARE CHEBYSHEV POLYNOMIALS OF THE FIRST KIND, OF DEGREE 1,....,N, RESPECTIVELY. THE MEANING OF THE FORMAL PARAMETERS IS : N : ; ENTRY: THE DEGREE OF THE POLYNOMIAL REPRESENTED BY THE CHEBYSHEV SUM (N>=0); X : ; ENTRY: THE ARGUMENT OF THE CHEBYSHEV POLYNOMIALS , ABS(X)<=1; A : ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE CHEBYSHEV SUM MUST BE GIVEN IN ARRAY A, WHERE A[K] IS THE COEFFICIENT OF THE CHEBYSHEV POLYNOMIAL OF DEGREE K, 0<=K<=N. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N. METHOD AND PERFORMANCE: N N / 2*X 1 \ K / A[K] \ SUM A[K]*T[K](X) = (1,X) * SUM [ ] * [ ] K=0 K=0 \ -1 0 / \ 0 / WE USE THE CLENSHAW OR GENERALIZED HORNER ALGORITHM: N SUM A[K]*T[K](X) = (1,X) * K=0 / / A[0] \ / 2*X 1 \ / / A[1] \ / 2*X 1 \ / A[N] \ \ \ [ [ ] + [ ] * [ [ ] +..+ [ ] * [ ] ]..]. \ \ 0 / \ -1 0 / \ \ 0 / \ -1 0 / \ 0 / / / THIS PROCEDURE MAY BE USED: - TO EVALUATE THE SUM OF CHEBYSHEV POLYNOMIALS OF EVEN DEGREE N SUM A[K]*T[2*K](X) , K=0 BY THE CALL OF CHEPOLSUM(N,IF ABS(X); ENTRY: THE DEGREE OF THE POLYNOMIAL REPRESENTED BY THE CHEBYSHEV SUM IS 2*N+1 (N>=0); X : ; ENTRY: THE ARGUMENT OF THE CHEBYSHEV POLYNOMIALS, ABS(X)<=1; A : ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE CHEBYSHEV SUM MUST BE GIVEN IN ARRAY A, WHERE A[K] IS THE COEFFICIENT OF THE CHEBYSHEV POLYNOMIAL OF DEGREE 2*K+1, 0<=K<=N. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N. METHOD AND PERFORMANCE: FROM THE REPRESENTATION, FOR ABS(X)<=1, N N / 2*T[2](X) -1 \ K /A[K] \ SUM A[K]*T[2*K+1](X) = X * (1,-1) * SUM [ ] * [ ] K=0 K=0 \ 1 0 / \ 0 / WE USE THE CLENSHAW OR GENERALIZED HORNER ALGORITHM: N / / A[0] \ SUM A[K]*T[2*K+1](X) = X * (1,-1) * [ [ ] + K=0 \ \ 0 / / 2*T[2](X) -1 \ / / A[1] \ / 2*T[2](X) -1 \ / A[N] \ \ \ [ ] * [ [ ]+...+[ ] * [ ] ]..]. \ 1 0 / \ \ 0 / \ 1 0 / \ 0 / / / THIS PROCEDURE MAY BE USED TO EVALUATE THE SUM OF SHIFTED CHEBYSHEV POLYNOMIALS OF ODD DEGREE FOR 0<=X<=1, N SUM A[K]*T'[2*K+1](X) , K=0 BY THE CALL OF ODDCHEPOLSUM(N,2*X-1,A) BECAUSE OF T'[K](X) = T[K](2*X-1). EXAMPLE OF USE: THE POLYNOMIAL 1/2*T[1](X) + 1/5*T[3](X) IS EVALUATED FOR X=-1,0,1, WHERE T[1](X) AND T[3](X) ARE CHEBYSHEV POLYNOMIALS OF THE FIRST AND THIRD DEGREE, RESPECTIVELY. BEGIN ARRAYA[0:1]; A[1]:=.2;A[0]:=.5; OUTPUT(61,(/,3(B,-Z.DD)),ODDCHEPOLSUM(1,-1,A), ODDCHEPOLSUM(1,0,A), ODDCHEPOLSUM(1,1,A)); END -.70 .00 .70 SUBSECTION: CHEPOL. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: REALPROCEDURECHEPOL(N,X); VALUEN,X;INTEGERN;REALX; CODE31042; CHEPOL:=THE VALUE OF THE CHEBYSHEV POLYNOMIAL OF THE FIRST KIND OF DEGREE N FOR THE ARGUMENT X. THE MEANING OF THE FORMAL PARAMETERS IS: N : ; ENTRY: THE DEGREE OF THE POLYNOMIAL (N>=0); X : ; ENTRY: THE ARGUMENT OF THE CHEBYSHEV POLYNOMIAL, ABS(X)<=1. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N. METHOD AND PERFORMANCE: SEE ALLCHEPOL (NEXT SUBSECTION). EXAMPLE OF USE: SEE NEXT SUBSECTION. SUBSECTION: ALLCHEPOL. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDUREALLCHEPOL(N,X,T); VALUEN,X;INTEGERN;REALX;REALARRAYT; CODE31043; THE MEANING OF THE FORMAL PARAMETERS IS: N : ; ENTRY: THE DEGREE OF THE LAST POLYNOMIAL (N>=0); X : ; ENTRY: THE ARGUMENT OF THE CHEBYSHEV POLYNOMIALS, ABS(X)<=1; T : ; ARRAY T[0:N]; EXIT: THE VALUES OF THE CHEBYSHEV POLYNOMIALS OF THE FIRST KIND OF DEGREES 0,1,...,N , FOR THE ARGUMENT X, ARE DELIVERED IN T[0],T[1],...,T[N], RESPECTIVELY. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N. METHOD AND PERFORMANCE: FOR A DESCRIPTION OF THE ALGORITHM SEE STOER,1972,P.21. THE MAXIMUM (ABSOLUTE) VALUE OF THE CHEBYSHEV POLYNOMIAL EQUALS 1 AS A NORMALIZATION. AN UPPER BOUND FOR THE (ABSOLUTE) ERROR IS A QUADRATIC FUNCTION OF THE DEGREE OF THE CHEBYSHEV POLYNOMIAL.THIS UPPER BOUND IS A ROUGH OVER-ESTIMATE FOR THE SPECIAL CASE ABS(X)<.5 (STOER,1972, P. 21-24). EXAMPLE OF USE : BY THE PROCEDURE (ALL)CHEPOL THE CHEBYSHEV POLYNOMIALS OF THE FIRST KIND OF DEGREES 0,1,2 ARE EVALUATED AT -1,0,1. BEGIN ARRAYT[0:2]; ALLCHEPOL(2,-1,T);OUTPUT(61,(/,3(-DB)),T[0],T[1],T[2]); ALLCHEPOL(2, 0,T);OUTPUT(61,(/,3(-DB)),T[0],T[1],T[2]); ALLCHEPOL(2, 1,T);OUTPUT(61,(/,3(-DB)),T[0],T[1],T[2]); OUTPUT(61,(/,3(/,-D)),CHEPOL(2,-1),CHEPOL(2,0),CHEPOL(2,1)) END 1 -1 1 1 0 -1 1 1 1 1 -1 1 SOURCE TEXT(S): CODE31046; REAL PROCEDURE CHEPOLSUM(N,X,A); VALUE N,X;INTEGER N;REAL X;ARRAY A; IF N=0 THEN CHEPOLSUM:=A[0] ELSE IF N=1 THEN CHEPOLSUM:=A[0]+A[1]*X ELSE BEGIN INTEGER K;REAL H,R,S,TX; TX:=X+X;R:=A[N]; H:=A[N-1]+R*TX; FOR K:=N-2 STEP -1 UNTIL 1 DO BEGIN S:=R;R:=H; H:=A[K]+R*TX-S ENDK; CHEPOLSUM:=A[0]-R+H*X END CHEPOLSUM ; EOP CODE31059; REALPROCEDUREODDCHEPOLSUM(N,X,A); VALUEN,X;INTEGERN;REALX;ARRAYA; COMMENT ODDCHEPOLSUM:=A[0]T[1](X)+A[1]T[3](X)+....+A[N]T[2N+1](X); IF N=0 THEN ODDCHEPOLSUM:=X*A[0] ELSE IF N=1 THEN ODDCHEPOLSUM:=X*(A[0]+A[1]*(4*X*X-3)) ELSE BEGIN INTEGER K; REAL H,R,S,Y; Y:=4*X*X-2; R:=A[N]; H:=A[N-1]+R*Y; FOR K:=N-2 STEP -1 UNTIL 0 DO BEGIN S:=R; R:=H; H:=A[K]+R*Y-S; END K; ODDCHEPOLSUM:=X*(H-R); END ODDCHEPOLSUM; EOP CODE31042; REALPROCEDURECHEPOL(N,X); VALUEN,X;INTEGERN;REALX; IF N = 0 THEN CHEPOL :=1 ELSE IF N = 1 THEN CHEPOL :=X ELSE BEGININTEGERI;REALT1,T2,H,X2; T2:=X;T1:=1;X2:=X+X; FORI:=2STEP1UNTILNDO BEGINH:=X2*T2-T1;T1:=T2;T2:=HEND; CHEPOL:=H ENDCHEPOL; EOP CODE31043; PROCEDUREALLCHEPOL(N,X,T); VALUEN,X;INTEGERN;REALX;REALARRAYT; IF N = 0 THEN T[0] :=1 ELSE IF N = 1 THEN BEGIN T[0] := 1; T[1] := X END ELSE BEGININTEGERI;REALT1,T2,H,X2; T[0]:=T1:=1;T[1]:=T2:=X;X2:=X+X; FORI:=2STEP1UNTILNDO BEGINT[I]:=H:=X2*T2-T1;T1:=T2;T2:=HEND ENDALLCHEPOL; EOP ########################################################################## ########################################################################## 1SECTION : 2.2.3.1 (OCTOBER 1974) AUTHOR: C.G. VAN DER LAAN. INSTITUTE: RIJKSUNIVERSITEIT GRONINGEN. RECEIVED: 740701. BRIEF DESCRIPTION: THIS SECTION CONTAINS THE PROCEDURES: SINSER FOR EVALUATING A SINE SERIES; COSSER FOR EVALUTING A COSINE SERIES; FOUSER,FOUSER1,FOUSER2 FOR EVALUATING A FOURIER SERIES (IN FOUSER THE SERIES IS RESTRICTED TO A SERIES WITH SINE COEFFICIENTS EQUAL TO COSINE COEFFICIENTS); COMFOUSER,COMFOUSER1,COMFOUSER2 FOR EVALUATING A COMPLEX FOURIER SERIES (IN COMFOUSER THE SERIES IS RESTRICTED TO A SERIES WITH REAL COEFFICIENTS). KEYWORDS: FINITE FOURIER SERIES EVALUATION, TRIGONOMETRIC POLYNOMIAL EVALUATION, GOERTZEL,WATT,CLENSHAW,REINSCH ALGORITHM, LINEAR THREE-TERM INHOMOGENEOUS RECURRENCE RELATION. SUBSECTION : SINSER. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REALPROCEDURESINSER(N,THETA,B); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYB; CODE 31090; SINSER:= THE VALUE OF THE SINE SERIES B[1]*SIN(THETA)+...+B[N]*SIN(N*THETA). THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE NUMBER OF TERMS IN THE SINE SERIES; THETA: ; ENTRY: THE ARGUMENT OF THE SINE SERIES; B: ; ARRAYB[1:N]; ENTRY: THE COEFFICIENTS OF THE SINE SERIES. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N (IN FIRST ORDER: N MULTIPLICATIONS; 3N ADDITIONS; 3 SINE/COSINE EVALUATIONS). LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE : SEE COMFOUSER2 (THIS SECTION). SUBSECTION : COSSER. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REALPROCEDURECOSSER(N,THETA,A); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYA; CODE 31091; COSSER:= THE VALUE OF THE COSINE SERIES A[0]+A[1]*COS(THETA)+...+A[N]*COS(N*THETA). THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE TRIGONOMETRIC POLYNOMIAL. THETA: ; ENTRY: THE ARGUMENT OF THE COSINE SERIES. A: ; ARRAYA[0:N]; ENTRY: THE COEFFICIENTS OF THE COSINE SERIES. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N (IN FIRST ORDER: N MULTIPLICATIONS; 3N ADDITIONS; 2 COSINE/SINE EVALUATIONS). LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE : SEE COMFOUSER2 (THIS SECTION). SUBSECTION : FOUSER. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REALPROCEDUREFOUSER (N,THETA,A); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYA; CODE 31092; FOUSER := THE VALUE OF THE FOURIER SERIES A[0]+A[1]*(COS(THETA)+SIN(THETA))+...+A[N]*(COS(N*THETA) +SIN(N*THETA)). THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE TRIGONOMETRIC POLYNOMIAL; THETA: ; ENTRY: THE ARGUMENT OF THE FOURIER SERIES; A: ; ARRAYA[0:N]; ENTRY: THE COEFFICIENTS OF THE (FINITE) FOURIER SERIES. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N (IN FIRST ORDER: N MULTIPLICATIONS; 3N ADDITIONS; 3 COSINE/SINE EVALUATIONS). LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE : SEE COMFOUSER2 (THIS SECTION). SUBSECTION : FOUSER1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REALPROCEDUREFOUSER1(N,THETA,A,B); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYA,B; CODE 31093; FOUSER1:= THE VALUE OF THE FOURIER SERIES A[0]+A[1]*COS(THETA)+B[1]*SIN(THETA)+... +A[N]*COS(N*THETA)+B[N]*SIN(N*THETA). THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE TRIGONOMETRIC POLYNOMIAL; THETA: ; ENTRY: THE ARGUMENT OF THE FOURIER SERIES; A,B: ; ARRAYA[0:N],B[1:N]; ENTRY: THE COEFFICIENTS OF THE (FINITE) FOURIER SERIES, WITH A[K] COEFFICIENT OF COS(K*THETA), (K=0,...,N) AND B[K] COEFFICIENT OF SIN(K*THETA), (K=1,...,N). PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N (IN FIRST ORDER: 4N MULTIPLICATIONS; 4N ADDITIONS; 2 COSINE/SINE EVALUATIONS). LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE : SEE COMFOUSER2 (THIS SECTION). SUBSECTION : FOUSER2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REALPROCEDUREFOUSER2(N,THETA,A,B); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYA,B; CODE 31094; FOUSER2:= THE VALUE OF THE FOURIER SERIES A[0]+A[1]*COS(THETA)+B[1]*SIN(THETA)+... +A[N]*COS(N*THETA)+B[N]*SIN(N*THETA). THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE TRIGONOMETRIC POLYNOMIAL; THETA: ; ENTRY: THE ARGUMENT OF THE FOURIER SERIES; A,B: ; ARRAYA[0:N],B[1:N]; ENTRY: THE COEFFICIENTS OF THE (FINITE) FOURIER SERIES, WITH A[K] COEFFICIENT OF COS(K*THETA), (K=0,...,N) AND B[K] COEFFICIENT OF SIN(K*THETA), (K=1,...,N). PROCEDURES USED: SINSER = CP31090, COSSER = CP31091. RUNNING TIME: PROPORTIONAL TO N (IN FIRST ORDER: 2N MULTIPLICATIONS; 6N ADDITIONS; 6 COSINE/SINE EVALUATIONS). LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : SEE COMFOUSER2 (THIS SECTION). SUBSECTION : COMFOUSER. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURECOMFOUSER (N,THETA,A,RR,RI); VALUEN,THETA;INTEGERN;REALTHETA,RR,RI;ARRAYA; CODE 31095; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL IN EXP(I*THETA); THETA: ; ENTRY: THE ARGUMENT OF THE FOURIER SERIES; A: ; ARRAYA[0:N]; ENTRY: THE REAL COEFFICIENTS A[K] (K=0,...,N) IN THE SERIES FN(THETA)=A[0]+A[1]*EXP(I*THETA)+...+A[N]*EXP(I* THETA)**N, MUST BE GIVEN IN ARRAY A; RR,RI: ; EXIT: THE REAL PART AND THE IMAGINARY PART OF FN(THETA) ARE DELIVERED IN RR AND RI, RESPECTIVELY. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N (IN FIRST ORDER: N MULTIPLICATIONS; 3N ADDITIONS; 3 COSINE/SINE EVALUATIONS). LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE : SEE COMFOUSER2 (THIS SECTION). SUBSECTION : COMFOUSER1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURECOMFOUSER1(N,THETA,AR,AI,RR,RI); VALUEN,THETA;INTEGERN;REALTHETA,RR,RI;ARRAYAR,AI; CODE 31096; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL IN EXP(I*THETA); THETA: ; ENTRY: THE ARGUMENT OF THE FOURIER SERIES; AR,AI: ; ARRAYAR,AI[0:N]; ENTRY: THE REAL PART AND THE IMAGINARY PART OF THE COMPLEX COEFFICIENTS C[K] (K=0,...,N) IN THE SERIES FN(THETA)=C[0]+C[1]*EXP(I*THETA)+...+C[N]*EXP(I* THETA)**N MUST BE GIVEN IN ARRAY AR AND AI, RESPECTIVELY; RR,RI: ; EXIT: THE REAL PART AND THE IMAGINARY PART OF FN(THETA) ARE DELIVERED IN RR AND RI, RESPECTIVELY. PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N (IN FIRST ORDER: 4N MULTIPLICATIONS; 4N ADDITIONS; 2 COSINE/SINE EVALUATIONS). LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE : SEE COMFOUSER2 (THIS SECTION). SUBSECTION : COMFOUSER2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURECOMFOUSER2(N,THETA,AR,AI,RR,RI); VALUEN,THETA;INTEGERN;REALTHETA,RR,RI;ARRAYAR,AI; CODE 31097; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL IN EXP(I*THETA); THETA: ; ENTRY: THE ARGUMENT OF THE FOURIER SERIES; AR,AI: ; ARRAYAR,AI[0:N]; ENTRY: THE REAL PART AND THE IMAGINARY PART OF THE COMPLEX COEFFICIENTS C[K] (K=0,...,N) IN THE SERIES FN(THETA)=C[0]+C[1]*EXP(I*THETA)+...+C[N]*EXP(I* THETA)**N MUST BE GIVEN IN ARRAY AR AND AI, RESPECTIVELY; RR,RI: ; EXIT: THE REAL PART AND THE IMAGINARY PART OF FN(THETA) ARE DELIVERED IN RR AND RI, RESPECTIVELY. PROCEDURES USED: COMFOUSER= CP31095. RUNNING TIME: PROPORTIONAL TO N (IN FIRST ORDER: 2N MULTIPLICATIONS; 6N ADDITIONS; 6 COSINE/SINE EVALUATIONS). LANGUAGE: ALGOL 60. METHOD AND PERFORANCE: FOR THE EVALUATION OF A FINITE FOURIER SERIES (=TRIGONOMETRIC POLYNOMIAL OF DEGREE N SEE POLYA AND SZEGOE, 1971, P. 76) FN(THETA)=A[0]+A[1]*COS(THETA)+B[1]*SIN(THETA)+...+ A[N]*COS(N*THETA)+B[N]*SIN(N*THETA), TWO ALGORITHMS ARE USED: 1. HORNER SCHEME LET C[K]=A[K]+I*B[K], K=0,...,N AND Z=EXP(-I*THETA) THEN FN(THETA)=RE(C[0]+C[1]*Z+...+C[N]*Z**N). THE ALGORITHM IS GIVEN BY: P:=C[N] P:=P*Z+C[K], K=N-1,...,0 FN(THETA):=RE(P). (FOUSER1) 2. A COMBINATION OF THE CLENSHAW ALGORITHM (SEE GENTLEMAN(1969,II) , VAN DER LAAN, LUKE(1969, P.327-329) OR STOER(1972, P.62,63)) AND THE MODIFICATION OF REINSCH (SEE REINSCH(1967), VAN DER LAAN, STOER(1972, P.64,65)). (SINSER,COSSER,FOUSER,FOUSER2) A MODIFICATION OF THE IDEA OF NEWBERY IS NOT IMPLEMENTED BECAUSE OF THE INTRODUCTION OF SINE (COSINE) TERMS IN A COSINE (SINE) SERIES AND THE INEFFICIENCY OF THE ALGORITHM (SEE VAN DER LAAN OR NEWBERY(1973)). FOR THE EVALUATION OF A FINITE COMPLEX FOURIER SERIES FN(THETA)=AR[0]+I*AI[0]+(AR[1]+I*AI[1])*EXP(I*THETA)+... +(AR[N]+I*AI[N])*EXP(I*THETA)**N, TWO ALGORITHMS, IN REAL ARITHMETIC, ARE USED: 1. HORNER SCHEME LET C[K]=AR[K]+I*AI[K], K=0,...,N AND Z=EXP(I*THETA) THEN FN(THETA)=C[0]+C[1]*Z+...+C[N]*Z**N. THE ALGORITHM IS GIVEN BY P:=C[N] P:=P*Z+C[K], K=N-1,N-2,...,0 FN(THETA):=P. (COMFOUSER1) 2. A COMBINATION OF THE CLENSHAW ALGORITHM AND THE MODIFICATION OF REINSCH. LET CAR=AR[0]+AR[1]*COS(THETA)+...+AR[N]*COS(N*THETA), SAI= AI[1]*SIN(THETA)+...+AI[N]*SIN(N*THETA), SAR= AR[1]*SIN(THETA)+...+AR[N]*SIN(N*THETA), CAI=AI[0]+AI[1]*COS(THETA)+...+AI[N]*COS(N*THETA) THEN FN(THETA)=CAR-SAI+I*(SAR+CAI). (COMFOUSER,COMFOUSER2) THE HORNER SCHEME IS IMPLEMENTED BECAUSE OF THE SIMPLICITY OF THE ALGORITHM (ALTHOUGH THIS ALGORITHM IS LESS EFFICIENT THAN THE GOERTZEL/WATT/CLENSHAW/REINSCH ALGORITHM) AND THE STABLE NATURE OF ORTHOGONAL TRANSFORMATIONS. A COMBINATION OF THE ALGORITHM OF GOERTZEL/WATT/CLENSHAW AND THE MODIFICATION OF REINSCH IS IMPLEMENTED BECAUSE OF THE EFFICIENCY OF THE GWC ALGORITHM AND THE STABILITY OF THE MODIFICATION OF REINSCH, ESPECIALLY FOR SMALL VALUES OF THE ARGUMENT (MOD. PI). AN UPPER BOUND FOR THE ERROR GROWTH IS GIVEN BY A LINEAR FUNCTION OF THE DEGREE FOR BOTH (IMPLEMENTED) ALGORITHMS (SEE VAN DER LAAN). REFERENCES: GENTLEMAN,W.M.(1969): AN ERROR ANALYSIS OF GOERTZEL'S(WATT'S) METHOD FOR COMPUTING FOURIER COEFFICIENTS. COMP.J.,VOL.12,P.160-165. LAAN,C.G.VAN DER(TO APPEAR): ORTHOGONAL POLYNOMIALS IN NUMERICAL ANALYSIS 1. ERROR ANALYSIS OF LINEAR TWO-TERM AND THREE-TERM RECURRENCE RELATIONS. LUKE,Y.L.(1969): THE SPECIAL FUNCTIONS AND THEIR APPROXIMATIONS.VOL.1. ACADEMIC PRESS. NEWBERY,A.C.R.(1973): ERROR ANALYSIS FOR FOURIER SERIES EVALUATION. MATH.COMP.,VOL.26,P.923-924. POLYA,G. AND G.SZEGOE(1971): AUFGABEN UND LEHRSAETZE AUS DER ANALYSIS II. HEIDELBERGER TASCHENBUECHER 74. SPRINGER. REINSCH,C.(1967): A NOTE ON TRIGONOMETRIC INTERPOLATION. BERICHT NR. 6709. ABTEILUNG MATHEMATIK DER TECHNISCHEN UNIVERSITAET MUENCHEN. STOER,J.(1972): EINFUEHRUNG IN DIE NUMERISCHE MATHEMATIK 1. HEIDELBERGER TASCHENBUECHER 105. SPRINGER. EXAMPLE OF USE: THE FOURIER SERIES .5+COS(THETA)+SIN(THETA) IS EVALUATED FOR THE ARGUMENTS 0,PI/2,PI, BY MEANS OF FOUSER BEGINREALTHETA,PI;ARRAYA[0:1]; PI:=ARCTAN(1)*4;A[0]:=.5;A[1]:=1; FORTHETA:=0,PI/2,PIDO OUTPUT(61,(/,B-D.DD),FOUSER(1,THETA,A)) END 1.50 1.50 -0.50 SOURCE TEXTS: CODE 31090; REALPROCEDURESINSER(N,THETA,B); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYB; BEGININTEGERK;REALC,CC,LAMBDA,H,DUN,UN,UN1; C:=COS(THETA); IFC<-.5THEN BEGINLAMBDA:= 4*COS(THETA/2)**2;UN:=DUN:=0; FORK:=NSTEP-1UNTIL1DO BEGINDUN:=LAMBDA*UN-DUN+B[K] ; UN:=DUN-UN; END ENDELSEIFC> .5THEN BEGINLAMBDA:=-4*SIN(THETA/2)**2;UN:=DUN:=0; FORK:=NSTEP-1UNTIL1DO BEGINDUN:=LAMBDA*UN+DUN+B[K] ; UN:=DUN+UN; END ENDELSE BEGINCC:=C+C;UN:=UN1:=0; FORK:=NSTEP-1UNTIL1DO BEGINH:=CC*UN-UN1+B[K]; UN1 := UN; UN := H; END END; SINSER:=UN*SIN(THETA) ENDSINSER; EOP CODE 31091; REALPROCEDURECOSSER(N,THETA,A); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYA; BEGININTEGERK;REALC,CC,LAMBDA,H,DUN,UN,UN1; C:=COS(THETA); IFC<-.5THEN BEGINLAMBDA:= 4*COS(THETA/2)**2;UN:=DUN:=0; FORK:=NSTEP-1UNTIL0DO BEGINUN:=DUN-UN; DUN:=LAMBDA*UN-DUN+A[K] END;COSSER:=DUN-LAMBDA/2*UN ENDELSEIFC> .5THEN BEGINLAMBDA:=-4*SIN(THETA/2)**2;UN:=DUN:=0; FORK:=NSTEP-1UNTIL0DO BEGINUN:=DUN+UN; DUN:=LAMBDA*UN+DUN+A[K] END;COSSER:=DUN-LAMBDA/2*UN ENDELSE BEGINCC:=C+C;UN:=UN1:=0; FORK:=NSTEP-1UNTIL1DO BEGINH:=CC*UN-UN1+A[K]; UN1:=UN;UN:=H END;COSSER:=A[0]+UN*C-UN1 END ENDCOSSER EOP CODE 31092; REALPROCEDUREFOUSER (N,THETA,A); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYA; BEGININTEGERK;REALC,CC,LAMBDA,H,DUN,UN,UN1,C2,S2; C:=COS(THETA); IFC<-.5THEN BEGINC2:=COS(THETA/2);LAMBDA:=4*C2**2;UN:=DUN:=0; FORK:=NSTEP-1UNTIL0DO BEGINUN:=DUN-UN; DUN:=LAMBDA*UN-DUN+A[K] END;FOUSER :=DUN+2*C2*(SIN(THETA/2)-C2)*UN ENDELSEIFC> .5THEN BEGINS2:=SIN(THETA/2);LAMBDA:=-4*S2*S2;UN:=DUN:=0; FORK:=NSTEP-1UNTIL0DO BEGINUN:=DUN+UN; DUN:=LAMBDA*UN+DUN+A[K] END;FOUSER :=DUN+2*S2*(S2+COS(THETA/2))*UN ENDELSE BEGINCC:=C+C;UN:=UN1:=0; FORK:=NSTEP-1UNTIL1DO BEGINH:=CC*UN-UN1+A[K]; UN1:=UN;UN:=H END;FOUSER :=A[0]-UN1+(C+SIN(THETA))*UN END ENDFOUSER; EOP CODE 31093; REALPROCEDURE FOUSER1(N,THETA,A,B); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYA,B; BEGININTEGERI;REALR,S,H,CO,SI; R:=S:=0;CO:=COS(THETA);SI:=SIN(THETA); FORI:=NSTEP-1UNTIL1DO BEGIN H:=CO*R+SI*S+A[I]; S:=CO*S-SI*R+B[I]; R:=H END;FOUSER1:=CO*R+SI*S+A[0] ENDFOUSER1; EOP CODE 31094; REALPROCEDUREFOUSER2(N,THETA,A,B); VALUEN,THETA;INTEGERN;REALTHETA;ARRAYA,B; BEGIN FOUSER2:=COSSER(N,THETA,A)+SINSER(N,THETA,B); ENDFOUSER2 EOP CODE 31095; PROCEDURECOMFOUSER(N,THETA,A,RR,RI); VALUEN,THETA;INTEGERN;REALTHETA,RR,RI;ARRAYA; BEGININTEGERK;REALC,CC,LAMBDA,H,DUN,UN,UN1; C:=COS(THETA); IFC<-.5THEN BEGINLAMBDA:= 4*COS(THETA/2)**2;UN:=DUN:=0; FORK:=NSTEP-1UNTIL0DO BEGINUN:=DUN-UN; DUN:=LAMBDA*UN-DUN+A[K] END;RR :=DUN-LAMBDA/2*UN ENDELSEIFC> .5THEN BEGINLAMBDA:=-4*SIN(THETA/2)**2;UN:=DUN:=0; FORK:=NSTEP-1UNTIL0DO BEGINUN:=DUN+UN; DUN:=LAMBDA*UN+DUN+A[K] END;RR :=DUN-LAMBDA/2*UN ENDELSE BEGINCC:=C+C;UN:=UN1:=0; FORK:=NSTEP-1UNTIL1DO BEGINH:=CC*UN-UN1+A[K]; UN1:=UN;UN:=H END;RR :=A[0]+UN*C-UN1 END;RI:=UN*SIN(THETA) ENDCOMFOUSER; EOP CODE 31096; PROCEDURECOMFOUSER1(N,THETA,AR,AI,RR,RI); VALUEN,THETA;INTEGERN;REALTHETA,RR,RI;ARRAYAR,AI; BEGININTEGERK;REALH,HR,HI,CO,SI; HR:=HI:=0;CO:=COS(THETA);SI:=SIN(THETA); FORK:=NSTEP-1UNTIL1DO BEGINH:=CO*HR-SI*HI+AR[K]; HI:=CO*HI+SI*HR+AI[K]; HR:=H END; RR:=CO*HR-SI*HI+AR[0]; RI:=CO*HI+SI*HR+AI[0] ENDCOMFOUSER1; EOP CODE 31097; PROCEDURECOMFOUSER2(N,THETA,AR,AI,RR,RI); VALUEN,THETA;INTEGERN;REALTHETA,RR,RI;ARRAYAR,AI; BEGINREALCAR,CAI,SAR,SAI; COMFOUSER(N,THETA,AR,CAR,SAR); COMFOUSER(N,THETA,AI,CAI,SAI); RR:=CAR-SAI; RI:=CAI+SAR ENDCOMFOUSER2; EOP ########################################################################## ########################################################################## 1SECTION: 2.3 (MAY 1974) AUTHOR : H.FIOLET INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731105. BRIEF DESCRIPTION: JFRAC CALCULATES A TERMINATING CONTINUED FRACTION. KEYWORDS: CONTINUED FRACTION, TERMINATING CONTINUED FRACTION. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: REAL PROCEDURE JFRAC(N,A,B); VALUE N;INTEGER N;ARRAY A,B; CODE 35083; JFRAC DELIVERS THE VALUE OF THE TERMINATING CONTINUED FRACTION: B[0]+A[1]/(B[1]+A[2]/(B[2]+A[3]/(B[3]+ . . . + A[N]/B[N])))...)) THE MEANING OF THE FORMAL PARAMETERS IS: N: ; THE UPPER INDEX OF THE ARRAYS A AND B; A,B: ; ARRAY A[1:N]; ARRAY B[0:N]; THE ELEMENTS OF THE CONTINUED FRACTION: B[0]+A[1]/(B[1]+A[2]/(B[2]+A[3]/(B[3]+ . . . + + A[N]/B[N])))...)). PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N. EXAMPLE OF USE: BEGIN REAL ARRAY P[1:10],Q[0:10]; INTEGER I; FOR I:=1 STEP 1 UNTIL 10 DO BEGIN P[I]:=1;Q[I]:=2 END; Q[0]:=1; FOR I:=7 STEP 1 UNTIL 10 DO OUTPUT(61,(N/),JFRAC(I,P,Q)) END DELIVERS: +1.4142156862745+000 +1.4142131979695+000 +1.4142136248949+000 +1.4142135516461+000 . SOURCE TEXT: CODE 35083; REAL PROCEDURE JFRAC(N,A,B); VALUE N;INTEGER N;ARRAY A,B; BEGIN REAL D;INTEGER I; D:=0; FOR I:=N STEP -1 UNTIL 1 DO D:=A[I]/(B[I]+D); JFRAC:=D+B[0] END JFRAC; EOP ########################################################################## ########################################################################## 1SECTION : 2.4.1 (DECEMBER 1978) AUTHOR: C.G. VAN DER LAAN. CONTRIBUTORS: C.G. VAN DER LAAN, M. VOORINTHOLT. INSTITUTE: REKENCENTRUM DER RIJKSUNIVERSITEIT GRONINGEN. RECEIVED: 780601. BRIEF DESCRIPTION: WE CONSIDER THE REPRESENTATIONS N POWER SUM : SUM A[K]*X**K, K=0 N CHEBYSHEV SUM : SUM A[K]*T[K](X), K=0 N SHIFTED CHEBYSHEV SUM : SUM A[K]*T'[K](X), K=0 N K-1 NEWTON SUM : SUM (A[K] * PROD (X-X[J])). K=0 J=0 THE SHIFTED CHEBYSHEV POLYNOMIAL T'[N] IS DEFINED BY T'[N](X) = T[N](2*X-1). THIS SECTION CONTAINS THE TRANSFORMATIONS: PROCEDURE NAME : TRANSFORMATION ---------------:------------------------------------------------ POLCHS : POWER SUM INTO CHEBYSHEV SUM CHSPOL : CHEBYSHEV SUM INTO POWER SUM POLSHTCHS : POWER SUM INTO SHIFTED CHEBYSHEV SUM SHTCHSPOL : SHIFTED CHEBYSHEV SUM INTO POWER SUM GRNNEW : POWER SUM INTO NEWTON SUM NEWGRN : NEWTON SUM INTO POWER SUM LINTFMPOL : POWER SUM IN X INTO POWER SUM IN Y, X=P*Y+Q KEYWORDS: TRANSFORMATION OF POLYNOMIAL REPRESENTATION. RUNNING TIME: PROPORTIONAL TO THE SQUARED DEGREE OF THE POLYNOMIAL. METHOD AND PERFORMANCE: ALTHOUGH THE TRANSFORMATION OF REPRESENTATIONS OF POLYNOMIALS COULD HAVE BEEN OBTAINED BY FAST EVALUATION AND FAST INTERPOLATION WE IMPLEMENTED THE ALGORITHM OF HAMMING (1973, 474,475), BECAUSE OF ITS SIMPLE APPEARANCE. AN EXPLANATION OF THE HAMMING ALGORITHM IS GIVEN IN VAN DER LAAN (1977,224-229). REFERENCES: HAMMING, R.W. (1973): NUMERICAL METHODS FOR SCIENTISTS AND ENGINEERS. MCGRAW-HILL. LAAN, C.G. VAN DER (1977): APPROXIMATIE VAN FUNCTIES EN DATA. IN: RIELE, H.J.J. TE (ED.); COLLOQUIUM NUMERIEKE PROGRAMMATUUR, DEEL 2, MC SYLLABUS 29.2, MATHEMATISCH CENTRUM AMSTERDAM. SUBSECTION: POLCHS. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE POLCHS(N,A); VALUE N; INTEGER N; ARRAY A; CODE 31051; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; A: ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE POWER SUM; EXIT: THE COEFFICIENTS OF THE CHEBYSHEV SUM; PROCEDURES USED: NONE. EXAMPLE OF USE: SEE NEXT SUBSECTION. SUBSECTION: CHSPOL. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE CHSPOL(N,A); VALUE N; INTEGER N; ARRAY A; CODE 31052; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; A: ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE CHEBYSHEV SUM; EXIT: THE COEFFICIENTS OF THE POWER SUM; PROCEDURES USED: NONE. EXAMPLE OF USE: AS AN EXAMPLE WE TRANSFORMED THE POWER SUM: 1 + 2*X + 3*X**2 INTO ITS CHEBYSHEV SUM; AS A CHECK WE TRANSFORMED THE LATTER REPRESENTATION BACK INTO THE ORIGINAL POWER SUM. BEGIN ARRAY A[0:2]; A[0]:=1; A[1]:=2; A[2]:=3; OUTPUT(61,(/,16B,(A[0]),4B,(A[1]),4B,(A[2]))); OUTPUT(61,(/,( INPUT),5B,(:),3(2B,+ZD.DD)),A); POLCHS(2,A); OUTPUT(61,(/,( POLCHS),4B,(:),3(2B,+ZD.DD)),A); CHSPOL(2,A); OUTPUT(61,(/,( CHSPOL),4B,(:),3(2B,+ZD.DD)),A); END PROGRAM A[0] A[1] A[2] INPUT : +1.00 +2.00 +3.00 POLCHS : +2.50 +2.00 +1.50 CHSPOL : +1.00 +2.00 +3.00 SUBSECTION: POLSHTCHS. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE POLSHTCHS(N,A); VALUE N; INTEGER N; ARRAY A; CODE 31053; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; A: ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE POWER SUM; EXIT: THE COEFFICIENTS OF THE SHIFTED CHEBYSHEV SUM; PROCEDURES USED: LINTFMPOL = CP31250, POLCHS = CP31051. EXAMPLE OF USE: SEE NEXT SUBSECTION. SUBSECTION: SHTCHSPOL. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE SHTCHSPOL(N,A); VALUE N; INTEGER N; ARRAY A; CODE 31054; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; A: ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE SHIFTED CHEBYSHEV SUM; EXIT: THE COEFFICIENTS OF THE POWER SUM. PROCEDURES USED: LINTFMPOL = CP31250, CHSPOL = CP31052. EXAMPLE OF USE: AS AN EXAMPLE WE TRANSFORMED THE POWER SUM: 1 + 2*X + 3*X**2 INTO ITS SHIFTED CHEBYSHEV SUM; AS A CHECK WE TRANSFORMED THE LATTER REPRESENTATION BACK INTO THE ORIGINAL POWER SUM. BEGIN ARRAY A[0:2]; A[0]:=1; A[1]:=2; A[2]:=3; OUTPUT(61,(/,16B,(A[0]),4B,(A[1]),4B,(A[2]))); OUTPUT(61,(/,( INPUT),5B,(:),3(2B,+ZD.DD)),A); POLSHTCHS(2,A); OUTPUT(61,(/,( POLSHTCHS),B,(:),3(2B,+ZD.DD)),A); SHTCHSPOL(2,A); OUTPUT(61,(/,( SHTCHSPOL),B,(:),3(2B,+ZD.DD)),A); END PROGRAM A[0] A[1] A[2] INPUT : +1.00 +2.00 +3.00 POLSHTCHS : +3.13 +2.50 +0.38 SHTCHSPOL : +1.00 +2.00 +3.00 SUBSECTION: GRNNEW. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE GRNNEW(N,X,A); VALUE N; INTEGER N; ARRAY X,A; CODE 31055; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; X: ; ARRAY X[0:N-1]; ENTRY: THE INTERPOLATION POINTS; A: ; ENTRY: THE COEFFICIENTS OF THE POWER SUM; EXIT: THE COEFFICIENTS OF THE NEWTON SUM; PROCEDURES USED: NONE. EXAMPLE OF USE: SEE NEXT SUBSECTION. SUBSECTION: NEWGRN. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE NEWGRN(N,X,A); VALUE N; INTEGER N; ARRAY X,A; CODE 31050; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; X: ; ARRAY X[0:N-1]; ENTRY: THE INTERPOLATION POINTS; A: ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE NEWTON SUM; EXIT: THE COEFFICIENTS OF THE POWER SUM; PROCEDURES USED : ELMVEC = CP34020. EXAMPLE OF USE: AS AN EXAMPLE WE TRANSFORMED THE POWER SUM: 1 + 2*X + 3*X**2 INTO ITS NEWTON SUM WITH INTERPOLATION POINTS: X[0]:=1.0, X[1]:=2.0; AS A CHECK WE TRANSFORMED THE LATTER REPRESENTATION BACK INTO THE ORIGINAL POWER SUM. BEGIN ARRAY X[0:1], A[0:2]; A[0]:=1; A[1]:=2; A[2]:=3; X[0]:=1; X[1]:=2; OUTPUT(61,(/,16B,(A[0]),4B,(A[1]),4B,(A[2]))); OUTPUT(61,(/,( INPUT),5B,(:),3(2B,+ZD.DD)),A); GRNNEW(2,X,A); OUTPUT(61,(/,( GRNNEW),4B,(:),3(2B,+ZD.DD)),A); NEWGRN(2,X,A); OUTPUT(61,(/,( NEWGRN),4B,(:),3(2B,+ZD.DD)),A); END PROGRAM A[0] A[1] A[2] INPUT : +1.00 +2.00 +3.00 GRNNEW : +6.00 +11.00 +3.00 NEWGRN : +1.00 +2.00 +3.00 SUBSECTION: LINTFMPOL. CALLING SEQUENCE: THE DECLARATION OF THE PROCEDURE IN THE CALLING PROGRAM READS: PROCEDURE LINTFMPOL(P,Q,N,A); VALUE N,P,Q; INTEGER N; REAL P,Q; ARRAY A; CODE 31250; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; ENTRY: THE DEGREE OF THE POLYNOMIAL; P,Q: ; ENTRY: DEFINING THE LINEAR TRANSFORMATION OF THE INDEPENDENT VARIABLE X=P*Y+Q; (P=0 GIVES THE VALUE OF THE POLYNOMIAL WITH ARGUMENT Q.) A: ; ARRAY A[0:N]; ENTRY: THE COEFFICIENTS OF THE POWER SUM IN X; EXIT: THE COEFFICIENTS OF THE POWER SUM IN Y; PROCEDURES USED: NORDERPOL = CP31242. EXAMPLE OF USE: AS AN EXAMPLE WE TRANSFORMED THE POWER SUM: 1 + 2*X + 3*X**2 INTO ITS POWER SUM IN Y WITH X = 2*Y + 3; AS A CHECK WE TRANSFORMED THE LATTER REPRESENTATION BACK INTO THE ORIGINAL POWER SUM. BEGIN ARRAY A[0:2]; A[0]:=1; A[1]:=2; A[2]:=3; OUTPUT(61,(/,16B,(A[0]),4B,(A[1]),4B,(A[2]))); OUTPUT(61,(/,( INPUT),5B,(:),3(2B,+ZD.DD)),A); LINTFMPOL(2,3,2,A); OUTPUT(61,(/,( LINTFMPOL),B,(:),3(2B,+ZD.DD)),A); LINTFMPOL(1/2,-3/2,2,A); OUTPUT(61,(/,( LINTFMPOL),B,(:),3(2B,+ZD.DD)),A); END PROGRAM A[0] A[1] A[2] INPUT : +1.00 +2.00 +3.00 LINTFMPOL : +34.00 +40.00 +12.00 (POWER SUM IN Y) LINTFMPOL : +1.00 +2.00 +3.00 (POWER SUM IN X) SOURCE TEXTS: CODE 31051; PROCEDURE POLCHS(N,A); VALUE N; INTEGER N; ARRAY A; IF N>1 THEN BEGIN COMMENT SCALING; INTEGER K,L,TWOPOW; TWOPOW:=2; FOR K:=1 STEP 1 UNTIL N-2 DO BEGIN A[K]:=A[K]/TWOPOW; TWOPOW:=TWOPOW*2; END; A[N-1]:=2*A[N-1]/TWOPOW; A[N]:=A[N]/TWOPOW; A[N-2]:=A[N-2]+A[N]; COMMENT N<=2 READY; FOR K:=N-2 STEP -1 UNTIL 1 DO BEGIN A[K-1]:=A[K-1]+A[K+1]; A[K]:=A[K]*2 + A[K+2]; FOR L:=K+1 STEP 1 UNTIL N-2 DO A[L]:=A[L]+A[L+2]; END; END POLCHS; EOP CODE 31052; PROCEDURE CHSPOL(N,A); VALUE N; INTEGER N; ARRAY A; IF N>1 THEN BEGIN INTEGER K,L,TWOPOW; FOR K:=0 STEP 1 UNTIL N-2 DO BEGIN FOR L:=N-2 STEP -1 UNTIL K DO A[L]:=A[L]-A[L+2]; A[K+1]:=A[K+1]/2; END; TWOPOW:=2; FOR K:=1 STEP 1 UNTIL N-2 DO BEGIN A[K]:=A[K]*TWOPOW; TWOPOW:=TWOPOW*2; END; A[N-1]:=TWOPOW*A[N-1]; A[N]:=TWOPOW*A[N]; END CHSPOL; EOP CODE 31053; PROCEDURE POLSHTCHS(N,A); VALUE N; INTEGER N; ARRAY A; BEGIN LINTFMPOL(.5,.5,N,A); POLCHS(N,A); END POLSHTCHS; EOP CODE 31054; PROCEDURE SHTCHSPOL(N,A); VALUE N; INTEGER N; ARRAY A; BEGIN CHSPOL(N,A); LINTFMPOL(2,-1,N,A); END SHTCHSPOL; EOP CODE 31055; PROCEDURE GRNNEW(N,X,A); VALUE N; INTEGER N; ARRAY X,A; BEGIN PROCEDURE ELMCEV(L,U,SHIFT,A,B,X); VALUE L,U,SHIFT,X; INTEGER L,U,SHIFT; REAL X; ARRAY A,B; FOR L:=L STEP -1 UNTIL U DO A[L]:=A[L]+B[L+SHIFT]*X; INTEGER K; FOR K:=N-1 STEP -1 UNTIL 0 DO ELMCEV(N-1,N-1-K,1,A,A,X[N-1-K]); END GRNNEW; EOP CODE 31050; PROCEDURE NEWGRN(N,X,A); VALUE N; INTEGER N; ARRAY X,A; BEGIN INTEGER K; FOR K:=N-1 STEP -1 UNTIL 0 DO ELMVEC(K,N-1,1,A,A,-X[K]); END NEWGRN; EOP CODE 31250; PROCEDURE LINTFMPOL(P,Q,N,A); VALUE N,P,Q; INTEGER N; REAL P,Q; ARRAY A; BEGIN INTEGER K; REAL PPOWER; NORDERPOL(N,N,Q,A); PPOWER:=P; FOR K:=1 STEP 1 UNTIL N DO BEGIN A[K]:=PPOWER*A[K]; PPOWER:=P*PPOWER; END; END LINTFMPOL; EOP ########################################################################## ########################################################################## 1SECTION : 2.4.3 (OCTOBER 1974) AUTHOR : C.G. VAN DER LAAN. INSTITUTE : RIJKSUNIVERSITEIT GRONINGEN. RECEIVED : 740131. BRIEF DESCRIPTION : INTCHS COMPUTES THE INDEFINITE INTEGRAL OF A GIVEN CHEBYSHEV SERIES. KEYWORDS : INDEFINITE INTEGRATION, CHEBYSHEV SERIES. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDUREINTCHS(N,A,B); VALUEN;INTEGERN;ARRAYA,B; CODE 31248; THE MEANING OF THE FORMAL PARAMETERS IS : N : ; ENTRY: THE DEGREE OF THE POLYNOMIAL REPRESENTED BY THE CHEBYSHEV SERIES; A,B: ; ARRAY A[0:N],B[1:N+1]; ENTRY: THE COEFFICIENTS OF THE CHEBYSHEV SERIES,A[0]+A[1]*T1(X)+...+ +A[N]*TN(X),SHOULD BE GIVEN IN ARRAY A. EXIT: THE COEFFICIENTS OF THE INTEGRAL CHEBYSHEV SERIES, B[1]*T1(X)+...+B[N+1]*TN+1(X), ARE DELIVERED IN ARRAY B. (T1(X),...TN+1(X) DENOTE CHEBYSHEV POLYNOMIALS OF THE FIRST KIND,OF DEGREE 1,...N+1,RESPECTIVELY). METHOD AND PERFORMANCE : FOR A DESCRIPTION OF THE ALGORITHM SEE AMONG OTHERS : CLENSHAW,1962,P.11,OR FOX AND PARKER,1968,P.59. REFERENCES : BROUCKE,R.(1973): TEN SUBROUTINES FOR THE MANIPULATION OF CHEBYSHEV SERIES. ALGORITHM 446.(FORTRAN). COMM.ACM,VOL.16,1,P.254-256. CLENSHAW,C.W.(1962): CHEBYSHEV SERIES FOR MATHEMATICAL FUNCTIONS. MATH.TAB.NAT.PHYS.LAB. 5,LONDON. H.M. STATIONARY OFFICE. FOX,L.&I.B.PARKER(1968): CHEBYSHEV POLYNOMIALS IN NUMERICAL ANALYSIS. OXFORD UNIVERSITY PRESS. EXAMPLE OF USE : AS A FORMAL TEST OF THE PROCEDURE INTCHS THE CHEBYSHEV SERIES : 1+1/2*T1(X)+1/5*T2(X)+1/10*T3(X) IS TRANSFORMED INTO ITS INTEGRAL. BEGINARRAYA[0:3],B[1:4]; A[0]:=1;A[1]:=.5;A[2]:=.2;A[3]:=-1; INTCHS(3,A,B); OUTPUT(61,(/,4(BZ.4D)),B[1],B[2],B[3],B[4]); END .9000 .1000 .0333 .0125 SOURCE TEXT(S): CODE31248; PROCEDUREINTCHS(N,A,B); VALUEN;INTEGERN;ARRAYA,B; COMMENT INTCHS DELIVERS THE COEFFICIENTS B[I],I=1,...N+1, OF THE INTEGRAL CHEBYSHEV SERIES B[1]*T1(X)+...+B[N]*TN(X)+B[N+1]*TN+1(X). THESE COEFFICIENTS ARE OBTAINED BY MEANS OF INDEFINITE INTEGRATION OF THE CHEBYSHEV SERIES A[0]+A[1]*T1(X)+...+A[N]*TN(X). T1(X),...TN+1(X) DENOTE CHEBYSHEV POLYNOMIALS OF THE FIRST KIND, OF DEGREE 1,...N+1,RESPECTIVELY; IFN=0THENB[1]:=A[0] ELSEIFN=1THENBEGINB[2]:=A[1]/4;B[1]:=A[0]END ELSEBEGININTEGERI;REALH,L,DUM; H:=A[N];DUM:=A[N-1];B[N+1]:=H/((N+1)*2);B[N]:=DUM/(N*2); FORI:=N-1STEP-1UNTIL2DO BEGINL:=A[I-1];B[I]:=(L-H)/(2*I);H:=DUM;DUM:=L END;B[1]:=A[0]-H/2 ENDINTCHS; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.1.1 (FEBRUARY 1979) AUTHORS: J. C. P. BUS AND T. J. DEKKER. CONTRIBUTOR: J.C.P. BUS AND P. A. BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730830. BRIEF DESCRIPTION: THIS SECTION CONTAINS SIX PROCEDURES: A: DEC PERFORMS A TRIANGULAR DECOMPOSITION WITH PARTIAL PIVOTING; B: GSSELM PERFORMS A TRIANGULAR DECOMPOSITION WITH A COMBINATION OF PARTIAL AND COMPLETE PIVOTING; C: ONENRMINV DELIVERS THE 1-NORM OF THE INVERSE OF A MATRIX WHOSE TRIANGULARLY DECOMPOSED FORM HAS BEEN DELIVERED BY DEC OR GSSELM; D:ERBELM CALCULATES A ROUGH UPPERBOUND FOR THE SOLUTION OF A LINEAR SYSTEM WHOSE MATRIX IS TRIANGULARLY DECOMPOSED BY GSSELM; E: GSSERB PERFORMS A TRIANGULAR DECOMPOSTION OF THE MATRIX OF A LINEAR SYSTEM AND CALCULATES AN UPPERBOUND FOR THE RELATIVE ERROR OF THE SOLUTION OF THAT SYSTEM; F: GSSNRI PERFORMS A TRIANGULAR DECOMPOSITION AND CALCULATES THE 1-NORM OF THE INVERSE MATRIX; THE METHOD USED IN DEC AND GSSELM YIELDS A LOWER-TRIANGULAR MATRIX L AND A UNIT UPPER-TRIANGULAR MATRIX U SUCH THAT THE PRODUCT LU EQUALS THE GIVEN MATRIX WITH PERMUTED ROWS (DEC) OR ROWS AND COLUMNS (GSSELM); IN DEC, ONLY PARTIAL PIVOTING IS USED ([3], [4, P.115], [5, P.201]); THE PIVOTING STRATEGY IN GSSELM IS A COMBINATION OF PARTIAL AND COMPLETE PIVOTING ([2], [1]); IN THIS STRATEGY THE PROCESS WILL SWITCH TO COMPLETE PIVOTING IF PARTIAL PIVOTING MIGHT NOT YIELD STABLE RESULTS; SO IN GSSELM THE EFFICIENCY OF PARTIAL PIVOTING IS COMBINED WITH THE STABILITY OF COMPLETE PIVOTING; SINCE, IN EXCEPTIONAL CASES, PARTIAL PIVOTING MAY YIELD USELESS RESULTS, EVEN FOR WELL-CONDITIONED MATRICES, THE USER IS ADVISED TO USE GSSELM; HOWEVER, IF THE NUMBER OF VARIABLES IS SMALL RELATIVE TO THE NUMBER OF BINARY DIGITS IN THE MANTISSA (48 FOR THE CYBER ), THEN DEC MAY ALSO BE USED; KEYWORDS: LU DECOMPOSITION, TRIANGULAR DECOMPOSITION, GAUSSIAN ELIMINATION. SUBSECTION: DEC. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE DEC(A, N, AUX, P); VALUE N; INTEGER N; ARRAY A, AUX; INTEGER ARRAY P;CODE 34300; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY:THE MATRIX; EXIT:THE CALCULATED LOWER-TRIANGULAR MATRIX AND UNIT UPPERTRIANGULAR MATRIX WITH ITS UNIT DIAGONAL OMITTED; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[1:3]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; SEE METHOD AND PERFORMANCE; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N THEN THE PROCESS IS BROKEN OFF BECAUSE THE SELECTED PIVOT IS TOO SMALL RELATIVE TO THE MAXIMUM OF THE EUCLIDEAN NORMS OF THE ROWS OF THE GIVEN MATRIX; P: ; INTEGERARRAY P[1:N]; EXIT:THE PIVOTAL INDICES. PROCEDURES USED: MATMAT = CP34013, MATTAM = CP34015, ICHROW = CP34032. REQUIRED CENTRAL MEMORY: A REAL ARRAY OF ORDER N IS DECLARED. RUNNING TIME: PROPORTIONAL TO N ** 3. METHOD AND PERFORMANCE: THE METHOD USED IN DEC IS TRIANGULAR DECOMPOSITION WITH STABILIZING ROW INTERCHANGES, ALSO CALLED PARTIAL PIVOTING; SEE ALSO [3,P.19] AND [5,P.201]. EXAMPLE OF USE: SEE DECSOL (SECTION 3.1.1.1.1.1.3). SUBSECTION: GSSELM . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE GSSELM(A, N, AUX, RI, CI); VALUE N; INTEGER N; ARRAY A, AUX; INTEGER ARRAY RI, CI;CODE 34231; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY:THE N-TH ORDER MATRIX; EXIT:THE CALCULATED LOWER-TRIANGULAR MATRIX AND UNIT UPPERTRIANGULAR MATRIX WITH ITS UNIT DIAGONAL OMITTED; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[1:7]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; SEE METHOD AND PERFORMANCE; AUX[4]: A VALUE WHICH IS USED FOR CONTROLLING PIVOTING; USUALLY, AUX[4] = 8 WILL GIVE GOOD RESULTS; SEE METHOD AND PERFORMANCE; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N THEN THE PROCESS HAS BEEN BROKEN OFF, BECAUSE THE SELECTED PIVOT IS TOO SMALL RELATIVE TO THE MAXIMUM OF THE MODULI OF ELEMENTS OF THE GIVEN MATRIX; AUX[5]: THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX WHICH HAD BEEN GIVEN IN ARRAY A; AUX[7]: AN UPPER BOUND FOR THE GROWTH (I. E. THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRICES OCCURRING DURING ELIMINATION); RI: ; INTEGERARRAY RI[1:N]; EXIT: THE PIVOTAL ROW-INDICES; CI: ; INTEGERARRAY CI[1:N]; EXIT: THE PIVOTAL COLUMN-INDICES; PROCEDURES USED: ROWCST = CP31132, ELMROW = CP34024, MAXELMROW = CP34025, ICHCOL = CP34031, ICHROW = CP34032, ABSMAXMAT = CP31069. REQUIRED CENTRAL MEMORY: NO EXTRA ARRAYS ARE DECLARED. RUNNING TIME: PROPORTIONAL TO N ** 3. METHOD AND PERFORMANCE: THE PROCESS OF GAUSSIAN ELIMINATION IS PERFORMED IN AT MOST N STEPS , WHERE N DENOTES THE ORDER OF THE MATRIX; PARTIAL PIVOTING WILL BE USED AS LONG AS THE CALCULATED UPPER BOUND FOR THE GROWTH ([2], [1]), IS LESS THAN A CRITICAL VALUE THAT EQUALS AUX[4] * N TIMES THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE GIVEN MATRIX; IN THE PARTIAL PIVOTING STRATEGY, THAT ELEMENT IS CHOSEN AS PIVOT IN THE K-TH STEP, WHOSE ABSOLUTE VALUE IS MAXIMAL FOR THE K-TH COLUMN OF THE LOWER-TRIANGULAR MATRIX L; HOWEVER, IF THE UPPER BOUND FOR THE GROWTH EXCEEDS THIS CRITICAL VALUE IN THE K-TH STEP, THEN A PIVOT IS SELECTED IN THE J-TH STEP (J = K,..., N) , IN SUCH A WAY, THAT ITS ABSOLUTE VALUE IS MAXIMAL FOR THE REMAINING SUBMATRIX OF ORDER N - K + 1 (COMPLETE PIVOTING); SINCE IN PRACTICE, IF WE CHOOSE AUX[4] PROPERLY, THE UPPER BOUND FOR THE GROWTH RARELY EXCEEDS THIS CRITICAL VALUE ([2], [4]), WE WILL USUALLY TAKE ADVANTAGE OF THE GREATER SPEED OF PARTIAL PIVOTING (ORDER N - K + 1 IN THE K-TH STEP), WHILE IN A FEW DOUBTFUL CASES NUMERICAL DIFFICULTIES WILL BE RECOGNIZED AND THE PROCESS WILL SWITCH TO COMPLETE PIVOTING (ORDER (N - K + 1) ** 2 IN THE K-TH STEP); USING GSSELM,THE UPPER BOUND FOR THE RELATIVE ERROR IN THE SOLUTION OF A LINEAR SYSTEM ([4], [5]), WILL BE AT MOST AUX[4] * N TIMES THE UPPER BOUND USING GAUSSIAN ELIMINATION WITH COMPLETE PIVOTING ONLY; USUALLY, HOWEVER, THIS WILL BE A CRUDE OVERESTIMATE; THE CHOICE AUX[4] < 1 / N WILL RESULT IN COMPLETE PIVOTING ONLY , WHILE PARTIAL PIVOTING WILL BE USED IN EVERY STEP IF WE CHOOSE AUX[4] > (2 ** (N - 1)) / N; USUALLY, AUX[4] = 8 WILL GIVE GOOD RESULTS ([2], [1]); THE PROCESS WILL ALSO SWITCH TO COMPLETE PIVOTING IF THE MODULUS OF THE PIVOT OBTAINED WITH PARTIAL PIVOTING IS LESS THAN A CERTAIN TOLERANCE, WHICH EQUALS THE GIVEN RELATIVE TOLERANCE AUX[2] TIMES THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE GIVEN MATRIX; IF ALL ELEMENTS IN THE REMAINING SUBMATRIX ARE SMALLER IN ABSOLUTE VALUE THAN THIS TOLERANCE THEN THE PROCESS IS BROKEN OFF AND THE PREVIOUS STEPNUMBER IS DELIVERED IN AUX[3]; IN CONTRAST WITH THE METHOD USED IN DEC (THIS SECTION), NO EQUILIBRATING IS DONE IN THIS PIVOTING STRATEGY; THE USER HIMSELF HAS TO TAKE CARE FOR A REASONABLE SCALING OF THE MATRIX ELEMENTS. EXAMPLE OF USE: SEE GSSSOL (SECTION 3.1.1.1.1.1.3). SUBSECTION: ONENRMINV. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS REAL PROCEDURE ONENRMINV(A, N); VALUE N; INTEGER N; ARRAY A; CODE 34240; ONENRMINV:= THE 1-NORM OF THE CALCULATED INVERSE OF THE MATRIX, WHOSE TRIANGULARLY DECOMPOSED FORM IS GIVEN IN ARRAY A; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY: THE TRIANGULARLY DECOMPOSED FORM OF A MATRIX, AS DELIVERED BY GSSELM OR DEC (THIS SECTION); N: ; THE ORDER OF THE MATRIX, WHOSE TRIANGULARLY DECOMPOSED FORM HAS BEEN GIVEN IN ARRAY A. PROCEDURES USED: MATVEC = CP34011. REQUIRED CENTRAL MEMORY: ONE REAL ARRAY OF ORDER N IS DECLARED. RUNNING TIME: PROPORTIONAL TO N ** 3. METHOD AND PERFORMANCE: THE INVERSE OF THE MATRIX WHOSE TRIANGULARLY DECOMPOSED FORM, AS DELIVERED BY GSSELM OR DEC,HAS BEEN GIVEN IN ARRAY A, IS CALCULATED WITH FORWARD AND BACK SUBSTITUTION ([3],[4],[5]);ONLY THE 1-NORM OF THIS INVERSE IS DELIVERED BY ONENRMINV; THE ELEMENTS OF ARRAY A REMAIN UNALTERED. EXAMPLE OF USE: SEE GSSSOLERB (SECTION 3.1.1.1.1.1.3). SUBSECTION: ERBELM. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE ERBELM(N, AUX, NRMINV); VALUE N, NRMINV; INTEGER N; REAL NRMINV; ARRAY AUX; CODE 34241; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; THE ORDER OF THE LINEAR SYSTEM IN CONSIDERATION; AUX: ; ARRAY AUX[0:11]; ENTRY: AUX[0]: THE MACHINE PRECISION; AUX[5]: THE MODULUS OF AN ELEMENT, WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX OF THE LINEAR SYSTEM; THIS VALUE IS DELIVERED BY GSSELM IN AUX[5] (THIS SECTION); AUX[6]: AN UPPER BOUND FOR THE RELATIVE ERROR IN THE ELEMENTS OF THE MATRIX OF THE LINEAR SYSTEM; AUX[7]: AN UPPER BOUND FOR THE GROWTH DURING GAUSSIAN ELIMINATION; THIS VALUE IS DELIVERED IN AUX[7] BY GSSELM (THIS SECTION); EXIT: AUX[9]: THE VALUE OF NRMINV; AUX[11]: A ROUGH UPPER BOUND FOR THE RELATIVE ERROR IN THE SOLUTION OF A LINEAR SYSTEM WHEN GAUSSIAN ELIMINATION IS USED FOR THE CALCULATION OF THIS SOLUTION; IF NO USE CAN BE MADE OF THE FORMULA FOR THE ERROR BOUND (SEE: METHOD AND PERFORMANCE), BECAUSE OF A VERY BAD CONDITION OF THE MATRIX, THEN AUX[11]:= -1; NRMINV: ; THE 1-NORM OF THE INVERSE OF THE MATRIX OF THE LINEAR SYSTEM MUST BE GIVEN IN NRMINV; THIS VALUE MAY BE OBTAINED BY ONENRMINV (THIS SECTION). PROCEDURES USED: NONE. REQUIRED CENTRAL MEMORY: NO EXTRA ARAYS ARE DECLARED. METHOD AND PERFORMANCE: WHEN CALLED AFTER GSSELM, ERBELM WILL CALCULATE A ROUGH UPPER BOUND FOR THE RELATIVE ERROR IN THE SOLUTION OF THE LINEAR SYSTEM, WHOSE MATRIX HAS BEEN DECOMPOSED INTO TRIANGULAR FORM BY GSSELM (THIS SECTION), BY ([3], [4], [5]): NORM(DX) / NORM(X) <= P / (1 - P), WHERE : P = Q * NORM(C) / (1 - Q * NORM(C)), Q = G * (.75 * N ** 3 + 4.5 * N ** 2) * EPS + EPSA, C IS THE CALCULATED INVERSE OF THE MATRIX, G THE UPPER BOUND FOR THE GROWTH DURING GAUSSIAN ELIMINATION, AS DELIVERED BY GSSELM (THIS SECTION), N THE ORDER OF THE MATRIX, EPSA AN UPPER BOUND FOR THE RELATIVE ERROR IN THE MATRIX ELEMENTS, EPS THE MACHINE PRECISION AND NORM(.) DENOTES THE 1-NORM. THIS PROCEDURE IS USED IN E.G. GSSERB (THIS SECTION) AND GSSINVERB (SECTION 3.1.1.1.1.1.4) EXAMPLE OF USE: SEE GSSSOLERB (SECTION 3.1.1.1.1.1.3). SUBSECTION: GSSERB . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE GSSERB(A, N, AUX, RI, CI); VALUE N; INTEGER N; ARRAY A, AUX; INTEGERARRAY RI, CI; CODE 34242; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY:THE MATRIX TO BE DECOMPOSED; EXIT: THE CALCULATED LOWER-TRIANGULAR MATRIX AND UNIT UPPER TRIANGULAR MATRIX,WITH ITS UNIT DIAGONAL OMITTED; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[0:11]; ENTRY:(SEE ALSO GSSELM IN THIS SECTION); AUX[0]: THE MACHINE PRECISION; AUX[2]: A RELATIVE TOLERANCE; AUX[4]: A VALUE WHICH IS USED FOR CONTROLLING PIVOTING; AUX[6]: AN UPPER BOUND FOR THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED, AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; AUX[5]: THE MODULUS OF AN ELEMENT, WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX WHICH HAS BEEN GIVEN IN ARRAY A; AUX[7]: AN UPPER BOUND FOR THE GROWTH; AUX[9]: IF AUX[3] = N, THEN AUX[9] WILL EQUAL THE 1-NORM OF THE INVERSE MATRIX, ELSE AUX[9] WILL BE UNDEFINED; AUX[11]: IF AUX[3] = N, THEN THE VALUE OF AUX[11] WILL BE A ROUGH UPPER BOUND FOR THE RELATIVE ERROR IN THE SOLUTION OF LINEAR SYSTEMS WITH A MATRIX AS GIVEN IN ARRAY A, ELSE AUX[11] WILL BE UNDEFINED; IF NO USE CAN BE MADE OF THE FORMULA FOR THE ERROR BOUND AS GIVEN ABOVE (SUBSECTION ERBELM), BECAUSE OF A VERY BAD CONDITION OF THE MATRIX, THEN AUX[11]:=-1; RI: ; INTEGERARRAY RI[1:N]; EXIT: THE PIVOTAL ROW-INDICES. CI: ; INTEGERARRAY CI[1:N]; EXIT: THE PIVOTAL COLUMN-INDICES. PROCEDURES USED: GSSELM = CP34231, ONENRMINV = CP34240, ERBELM = CP34241. REQUIRED CENTRAL MEMORY: NO EXTRA ARRAYS ARE DECLARED. RUNNING TIME: PROPORTIONAL TO N ** 3. METHOD AND PERFORMANCE: GSSERB USES GSSELM (THIS SECTION) TO PERFORM THE TRIANGULAR DECOMPOSITION OF THE MATRIX GIVEN IN ARRAY A AND ERBELM AND ONENRMINV (THIS SECTION) TO CALCULATE AN UPPER BOUND FOR THE RELATIVE ERROR IN THE SOLUTION OF LINEAR SYSTEMS WITH A MATRIX AS GIVEN IN ARRAY A; IF AUX[3] < N, THEN THE EFFECT OF GSSERB IS MERELY THAT OF GSSELM. EXAMPLE OF USE: SEE GSSSOLERB (SECTION 3.1.1.1.1.1.3). SUBSECTION: GSSNRI . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE GSSNRI(A, N, AUX, RI, CI); VALUE N; INTEGER N; ARRAY A, AUX; INTEGERARRAY RI, CI; CODE 34252; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY:THE MATRIX TO BE DECOMPOSED; EXIT: THE CALCULATED LOWER-TRIANGULAR MATRIX AND UNIT UPPER TRIANGULAR MATRIX,WITH ITS DIAGONAL OMITTED; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[1:9]; ENTRY:(SEE ALSO GSSELM IN THIS SECTION); AUX[2]: A RELATIVE TOLERANCE; AUX[4]: A VALUE USED FOR CONTROLLING PIVOTING; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED, THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; AUX[5]: THE MODULUS OF AN ELEMENT, WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX WHICH HAD BEEN GIVEN IN ARRAY A; AUX[7]: AN UPPER BOUND FOR THE GROWTH; AUX[9]: IF AUX[3] = N, THEN AUX[9] WIL EQUAL THE 1-NORM OF THE INVERSE MATRIX, ELSE AUX[9] WILL BE UNDEFINED; RI: ; INTEGERARRAY RI[1:N]; EXIT: THE PIVOTAL ROW INDICES. CI: ; INTEGERARRAY CI[1:N]; EXIT:THE PIVOTAL COLUMN INDICES. PROCEDURES USED: GSSELM = CP34231, ONENRMINV = CP34240. REQUIRED CENTRAL MEMORY: NO EXTRA ARRAYS ARE DECLARED. RUNNING TIME: PROPORTIONAL TO N ** 3. METHOD AND PERFORMANCE: GSSNRI USES GSSELM (THIS SECTION) TO PERFORM THE TRIANGULAR DECOMPOSITION OF THE MATRIX GIVEN IN ARRAY A AND ONENRMINV (THIS SECTION) TO CALCULATE THE 1-NORM OF THE INVERSE MATRIX; IF AUX[3] < N, THEN THE EFFECT OF GSSNRI IS MERELY THAT OF GSSELM (THIS SECTION). EXAMPLE OF USE: SEE GSSITISOLERB (SECTION 3.1.1.1.1.1.5). REFERENCES: [1] BUS, J. C. P. LINEAR SYSTEMS WITH CALCULATION OF ERROR BOUNDS AND ITERATIVE REFINEMENT (DUTCH). MATHEMATICAL CENTRE, AMSTERDAM, LR 3. 4. 19 (1972). [2] BUSINGER, P. A. MONITORING THE NUMERICAL STABILITY OF GAUSSIAN ELIMINATION. NUMER. MATH. 16, 360-361 (1971). [3] DEKKER, T. J. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1. MATHEMATICAL CENTRE, AMSTERDAM, TRACT 22 (1968). [4] WILKINSON, J. H. ROUNDING ERRORS IN ALGEBRAIC PROCESSES. LONDON (1963). [5] WILKINSON, J. H. THE ALGEBRAIC EIGENVALUE PROBLEM. OXFORD (1965). SOURCE TEXT(S): 0CODE 34300; PROCEDURE DEC(A, N, AUX, P); VALUE N; INTEGER N; ARRAY A, AUX; INTEGER ARRAY P; BEGIN INTEGER I, K, K1, PK, D; REAL R, S, EPS; ARRAY V[1:N]; R:= -1; FOR I:= 1 STEP 1 UNTIL N DO BEGIN S:= SQRT(MATTAM(1,N,I,I,A,A)); IF S > R THEN R:= S; V[I]:= 1/S END; EPS:= AUX[2] * R; D:= 1; FOR K:= 1 STEP 1 UNTIL N DO BEGIN R:= - 1; K1:= K - 1; FOR I:= K STEP 1 UNTIL N DO BEGIN A[I,K]:= A[I,K] - MATMAT(1, K1, I, K, A, A); S:= ABS(A[I,K]) * V[I]; IF S > R THEN BEGIN R:= S; PK:= I END END LOWER; P[K]:= PK; V[PK]:= V[K]; S:= A[PK,K]; IF ABS(S) < EPS THEN GOTO END; IF S < 0 THEN D:= -D; IF PK ^= K THEN BEGIN D:= - D; ICHROW(1, N, K, PK, A) END; FOR I:= K + 1 STEP 1 UNTIL N DO A[K,I]:= (A[K,I] - MATMAT(1, K1, K, I, A, A)) / S END LU; K:= N + 1; END: AUX[1]:= D; AUX[3]:= K - 1 END DEC; EOP CODE 34231; PROCEDURE GSSELM(A, N, AUX, RI, CI); VALUE N; INTEGER N; ARRAY A, AUX; INTEGER ARRAY RI, CI; BEGIN INTEGER I, J, P, Q, R, R1, JPIV, RANK, SIGNDET; REAL CRIT, PIVOT, RGROW, MAX, AID, MAX1, EPS; BOOLEAN PARTIAL; COMMENT; AUX[5]:= RGROW:= ABSMAXMAT(1, N, 1, N, I, J, A); CRIT:= N * RGROW * AUX[4]; EPS:= RGROW * AUX[2]; MAX:= 0; RANK:= N; SIGNDET:= 1; PARTIAL:= RGROW ^= 0; FOR Q:= 1 STEP 1 UNTIL N DO IF Q ^= J THEN BEGIN AID:= ABS(A[I,Q]); IF AID > MAX THEN MAX:= AID END; RGROW:= RGROW + MAX; FOR R:= 1 STEP 1 UNTIL N DO BEGIN R1:= R + 1; IF I ^= R THEN BEGIN SIGNDET:= - SIGNDET; ICHROW(1, N, R, I, A) END; IF J ^= R THEN BEGIN SIGNDET:= - SIGNDET; ICHCOL(1, N, R, J, A) END; RI[R]:= I; CI[R]:= J; PIVOT:= A[R,R]; IF PIVOT < 0 THEN SIGNDET:= - SIGNDET; IF PARTIAL THEN BEGIN MAX:= MAX1:= 0; J:= R1; ROWCST(R1, N, R, A, 1 / PIVOT); FOR P:= R1 STEP 1 UNTIL N DO BEGIN ELMROW(R1, N, P, R, A, A, - A[P,R]); AID:= ABS(A[P,R1]); IF MAX < AID THEN BEGIN MAX:= AID; I:= P END; END; FOR Q:= R1 + 1 STEP 1 UNTIL N DO BEGIN AID:= ABS(A[I,Q]); IF MAX1 < AID THEN MAX1:= AID END; AID:= RGROW; RGROW:= RGROW + MAX1; IF RGROW > CRIT OR MAX < EPS THEN BEGIN PARTIAL:= FALSE; RGROW:= AID; MAX:= ABSMAXMAT(R1, N, R1, N, I, J, A) END END PARTIAL PIVOTINGSTEP ELSE BEGIN IF MAX <= EPS THEN BEGIN RANK:= R - 1; IF PIVOT < 0 THEN SIGNDET:= - SIGNDET;GOTOOUT END; MAX:= - 1; ROWCST(R1, N, R, A, 1 / PIVOT); FOR P:= R1 STEP 1 UNTIL N DO BEGIN JPIV:= MAXELMROW(R1, N, P, R, A, A, - A[P,R]); AID:= ABS(A[P,JPIV]); IF MAX < AID THEN BEGIN MAX:= AID; I:= P; J:= JPIV END END; IF RGROW < MAX THEN RGROW:= MAX END COMPLETE PIVOTINGSTEP END ELIMINATIONSTEP; OUT: AUX[1]:= SIGNDET; AUX[3]:= RANK; AUX[7]:= RGROW END GSSELM EOP CODE 34240; REAL PROCEDURE ONENRMINV(A, N); VALUE N; INTEGER N; ARRAY A; BEGIN INTEGER I, J; REAL NORM, MAX, AID; ARRAY Y[1:N]; NORM:= 0; FOR J:= 1 STEP 1 UNTIL N DO BEGIN FOR I:= 1 STEP 1 UNTIL N DO Y[I]:= IF I < J THEN 0 ELSE IF I = J THEN 1 / A[I,I] ELSE - MATVEC(J, I - 1, I, A, Y) / A[I,I]; MAX:= 0; FOR I:= N STEP - 1 UNTIL 1 DO BEGIN AID:= Y[I]:= Y[I] - MATVEC(I + 1, N, I, A, Y); MAX:= MAX + ABS(AID) END; IF NORM < MAX THEN NORM:= MAX END; ONENRMINV:= NORM END ONENRMINV; EOP CODE 34241; PROCEDURE ERBELM(N, AUX, NRMINV); VALUE N, NRMINV; INTEGER N; REAL NRMINV; ARRAY AUX; BEGIN REAL AID, EPS; EPS:= AUX[0]; AID:= (1.06 * EPS * (.75 * N + 4.5) * N ** 2 * AUX[7] + AUX[5] * AUX[6]) * NRMINV; AUX[11]:= IF 2 * AID >= (1 - EPS) THEN - 1 ELSE AID / (1 - 2 * AID); AUX[9]:= NRMINV END ERBELM; EOP CODE 34242; PROCEDURE GSSERB(A, N, AUX, RI, CI); VALUE N; INTEGER N; ARRAY A, AUX; INTEGER ARRAY RI, CI; BEGIN GSSELM(A, N, AUX, RI, CI); IF AUX[3] = N THEN ERBELM(N, AUX, ONENRMINV(A, N)) END GSSERB; EOP CODE 34252; PROCEDURE GSSNRI(A, N, AUX, RI, CI); VALUE N; INTEGER N; ARRAY A, AUX; INTEGER ARRAY RI, CI; BEGIN GSSELM(A, N, AUX, RI, CI); IF AUX[3] = N THEN AUX[9]:= ONENRMINV(A, N) END GSSNRI; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.1.2 (MAY 1974) AUTHOR: J. C. P. BUS. CONTRIBUTOR: J.C.P. BUS AND P. A. BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730831. BRIEF DESCRIPTION: THIS SECTION CONTAINS A PROCEDURE FOR CALCULATING THE DETERMINANT OF A TRIANGULARLY DECOMPOSED MATRIX; KEYWORDS: DETERMINANT. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: REAL PROCEDURE DETERM(A, N, SIGN); VALUE N, SIGN; INTEGER N, SIGN; ARRAY A; CODE 34303; DETERM: DELIVERS THE CALCULATED VALUE OF THE DETERMINANT OF THE MATRIX; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY: THE DIAGONAL ELEMENTS OF THE LOWER-TRIANGULAR MATRIX L, OBTAINED BY TRIANGULAR DECOMPOSITION OF THE MATRIX, HAVE TO BE GIVEN IN A[I,I], I= 1, ..., N; N: ; THE ORDER OF THE MATRIX, WHOSE DETERMINANT HAS TO BE CALCULATED; SIGN: ; ENTRY: IF THE DETERMINANT OF THE MATRIX IS POSITIVE THEN THE VALUE OF SIGN SHOULD BE +1, ELSE -1; THIS VALUE IS DELIVERED BY GSSELM OR DEC IN AUX[1], (SECTION 3.1.1.1.1.1.1). PROCEDURES USED: NONE. RUNNING TIME: PROPORTIONAL TO N. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: A LOWER-TRIANGULAR MATRIX L HAS TO BE GIVEN, SUCH THAT FOR SOME UNIT UPPER-TRIANGULAR MATRIX U THE PRODUCT LU EQUALS THE MATRIX (WITH PERMUTED ROWS AND COLUMNS); THE SIGN OF THE DETERMINANT ALSO HAS TO BE GIVEN; THESE DATA ARE DELIVERED IN THE MATRIX AND AUX[1] BY THE PROCEDURES GSSELM OR DEC (SECTION 3.1.1.1.1.1.1) AND THE PROCEDURES GSSERB, GSSNRI (SECTION 3.1.1.1.1.1.1), DECSOL, GSSSOL, GSSSOLERB (SECTION 3.1.1.1.1.1.3), GSSITISOL AND GSSITISOLERB (SECTION 3.1.1.1.1.1.5), WHICH MAKE USE OF GSSELM OR DEC. THE CALCULATION OF THE DETERMINANT IS DONE STRAIGHT ON BY CALCULATING THE PRODUCT OF THE DIAGONAL ELEMENTS OF THE LOWER-TRIANGULAR MATRIX GIVEN IN ARRAY A; THE USER IS WARNED, THAT OVERFLOW MAY OCCUR IF THE ORDER OF THE MATRIX IS LARGE. EXAMPLE OF USE: THE DETERMINANT OF THE FOURTH ORDER SEGMENT OF THE HILBERT MATRIX MAY BE OBTAINED BY THE FOLLOWING PROGRAM: BEGIN INTEGER I, J; REAL D; INTEGER ARRAY RI, CI[1:4]; ARRAY A[1:4, 1:4], AUX[1:7]; FOR I:= 1 STEP 1 UNTIL 4 DO FOR J:= 1 STEP 1 UNTIL 4 DO A[I, J]:= 1 / (I + J - 1); AUX[2]:= -14; AUX[4]:= 8; GSSELM(A, 4, AUX, RI, CI); D:= IF AUX[3] = 4 THEN DETERM(A, 4, AUX[1]) ELSE 0; OUTPUT(71, ((DETERMINANT =)B+.15D+3D), D) END RESULT: DETERMINANT = +.165343915345370-006 SOURCE TEXT(S): CODE 34303; REAL PROCEDURE DETERM(A, N, SIGN); VALUE N, SIGN; INTEGER N, SIGN; ARRAY A; BEGIN INTEGER I; REAL DET; DET:= 1; FOR I:= 1 STEP 1 UNTIL N DO DET:= A[I, I] * DET; DETERM:= SIGN * ABS(DET) END DETERM; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.1.3 (MAY 1974) PAGE 1 AUTHORS: J. C. P. BUS AND T. J. DEKKER. CONTRIBUTOR: J.C.P. BUS AND P. A. BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730915. BRIEF DESCRIPTION: THIS SECTION CONTAINS FIVE PROCEDURES: SOL SOLVES THE LINEAR SYSTEM WHOSE MATRIX HAS BEEN TRIANGULARLY DECOMPOSED BY DEC; DECSOL SOLVES A LINEAR SYSTEM WHOSE ORDER IS SMALL RELATIVE TO THE NUMBER OF BINARY DIGITS IN THE NUMBER REPRSENTATION; SOLELM SOLVES A LINEAR SYSTEM WHOSE MATRIX HAS BEEN TRIANGULARLY DECOMPOSED BY GSSELM OR GSSERB(SECTION 3.1.1.1.1.1.1.). GSSSOL SOLVES A LINEAR SYSTEM; GSSSOLERB SOLVES A LINEAR SYSTEM AND CALCULATES A ROUGH UPPERBOUND FOR THE RELATIVE ERROR IN THE CALCULATED SOLUTION; THE DIFFERENCE BETWEEN DECSOL ON THE ONE SIDE AND GSSSOL AND GSSSOLERB ON THE OTHER SIDE LIES IN THE METHOD USED FOR TRIANGULAR DECOMPOSITION, PARTICULARLY IN THE PIVOTING STRATEGY; DECSOL USES DEC, GSSSOL AND GSSSOLERB USE GSSELM TO PERFORM THE TRIANGULAR DECOMPOSITION (SECTION 3.1.1.1.1.1.1); SINCE, IN EXCEPTIONAL CASES, DEC MAY YIELD USELESS RESULTS, ONE IS ADVISED TO USE GSSSOL OR GSSSOLERB; HOWEVER, IF THE ORDER OF THE LINEAR SYSTEM IS VERY SMALL RELATIVE TO THE NUMBER OF BINARY DIGITS IN THE NUMBER REPRESENTATION, THEN DECSOL ALSO MAY BE USED. KEYWORDS: ALGEBRAIC EQUATIONS, LINEAR SYSTEMS. SUBSECTION: SOL . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE SOL(A, N, P, B); VALUE N; INTEGER N; ARRAY A, B; INTEGER ARRAY P; CODE 34051; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY: THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX OF THE LINEAR SYSTEM AS PRODUCED BY DEC (SECTION 3.1.1.1.1.1.1); N: ; THE ORDER OF THE MATRIX; P: ; INTEGERARRAY P[1:N]; ENTRY:THE PIVOTAL INDICES, AS PRODUCED BY DEC. B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: THE SOLUTION OF THE LINEAR SYSTEM. PROCEDURES USED: MATVEC = CP34011. RUNNING TIME: PROPORTIONAL TO N ** 2. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SOL SHOULD BE CALLED AFTER DEC (SECTION 3.1.1.1.1.1.1) AND SOLVES THE LINEAR SYSTEM WITH A MATRIX, WHOSE TRIANGULARLY DECOMPOSED FORM AS PRODUCED BY DEC IS GIVEN IN ARRAY A, AND A RIGHT-HAND SIDE AS GIVEN IN ARRAY B; SOL LEAVES A AND P UNALTERED, SO, AFTER ONE CALL OF DEC, SEVERAL CALLS OF SOL MAY FOLLOW FOR SOLVING SEVERAL SYSTEMS HAVING THE SAME MATRIX BUT DIFFERENT RIGHT-HAND SIDES. EXAMPLE OF USE: SEE DECSOL (THIS SECTION). SUBSECTION: DECSOL . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE DECSOL(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; CODE 34301; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY:THE N-TH ORDER MATRIX; EXIT: THE CALCULATED LOWER-TRIANGULAR MATRIX AND UNIT UPPERTRIANGULAR MATRIX WITH ITS UNIT DIAGONAL OMITTED; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[1:3]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N THEN THE PROCESS IS TERMINATED AND NO SOLUTION WILL BE CALCULATED; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: IF AUX[3] = N, THEN THE CALCULATED SOLUTION OF THE LINEAR SYSTEM IS OVERWRITTEN ON B, ELSE B REMAINS UNALTERED. PROCEDURES USED: DEC = CP34300, SOL = CP34051. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: DECSOL DECLARES AN AUXILIARY ARRAY OF TYPE INTEGER AND ORDER N. RUNNING TIME: PROPORTIONAL TO N ** 3. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: DECSOL USES DEC TO PERFORM THE TRIANGULAR DECOMPOSITION OF THE MATRIX AND SOL TO CALCULATE THE SOLUTION WITH FORWARD AND BACK SUBSTITUTION; SINCE DECSOL MAY YIELD USELESS RESULTS, EVEN FOR WELL-CONDITIONED MATRICES (SEE DEC, SECTION 3.1.1.1.1.1.1), DECSOL SHOULD ONLY BE USED IF THE ORDER OF THE MATRIX IS SMALL RELATIVE TO THE NUMBER OF BINARY DIGITS IN THE NUMBER REPRESENTATION; IF AUX[3] < N, THEN THE EFFECT OF DECSOL IS MERELY THAT OF DEC. EXAMPLE OF USE: LET A BE THE FOURTH ORDER SEGMENT OF THE HILBERT MATRIX AND B THE THIRD COLUMN OF A, THEN THE SOLUTION OF THE LINEAR SYSTEM AX = B IS GIVEN BY THE THIRD UNIT VECTOR AND MAY BE CALCULATED BY THE FOLLOWING PROGRAM: BEGIN INTEGER I, J; ARRAY A[1:4, 1:4], B[1:4], AUX[1:3]; PROCEDURE LIST(ITEM); PROCEDURE ITEM; BEGIN INTEGER I; FOR I:= 1 STEP 1 UNTIL 4 DO ITEM(B[I]); FOR I:= 1 STEP 2 UNTIL 3 DO ITEM(AUX[I]) END LIST; PROCEDURE LAYOUT; FORMAT((/, (SOLUTION:)B+.15D+3D,/,3(10B+.15D+3D,/), (SIGN(DET) = )+D,/,(NUMBER OF ELIMINATIONSTEPS = ) +D)); FOR I:= 1 STEP 1 UNTIL 4 DO BEGIN FOR J:= 1 STEP 1 UNTIL 4 DO A[I,J]:= 1 / (I + J - 1); B[I]:= A[I,3] END; AUX[2]:= -14; DECSOL(A, 4, AUX, B); OUTLIST(71, LAYOUT, LIST) END RESULTS: SOLUTION: +.000000000000000+000 +.000000000000000+000 +.100000000000000+001 +.000000000000000+000 SIGN(DET) = +1 NUMBER OF ELIMINATIONSTEPS = +4 SUBSECTION: SOLELM . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE SOLELM(A, N, RI, CI, B); VALUE N; INTEGER N; ARRAY A, B; INTEGER ARRAY RI, CI; CODE 34061; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY: THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX OF THE LINEAR SYSTEM AS PRODUCED BY GSSELM (SECTION 3.1.1.1.1.1.1); N: ; THE ORDER OF THE MATRIX; RI: ; INTEGERARRAY RI[1:N]; ENTRY:THE PIVOTAL ROW INDICES, AS PRODUCED BY GSSELM; CI: ; INTEGERARRAY CI[1:N]; ENTRY:THE PIVOTAL COLUMN INDICES, AS PRODUCED BY GSSELM; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: THE SOLUTION OF THE LINEAR SYSTEM. PROCEDURES USED: SOL = CP34051. RUNNING TIME: PROPORTIONAL TO N ** 2. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SOLELM SHOULD BE CALLED AFTER GSSELM OR GSSERB (SECTION 3.1.1.1.1.1.1) AND SOLVES THE LINEAR SYSTEM WITH THE MATRIX, WHOSE TRIANGULARLY DECOMPOSED FORM AS PRODUCED BY GSSELM IS GIVEN IN ARRAY A, AND A RIGHT-HAND SIDE AS GIVEN IN ARRAY B; SOLELM LEAVES A, RI AND CI UNALTERED, SO, AFTER ONE CALL OF GSSELM OR GSSERB, SEVERAL CALLS OF SOLELM MAY FOLLOW FOR SOLVING SEVERAL SYSTEMS HAVING THE SAME MATRIX BUT DIFFERENT RIGHT-HAND SIDES. EXAMPLE OF USE: SEE GSSSOL OR GSSSOLERB (THIS SECTION). SUBSECTION: GSSSOL . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE GSSSOL(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; CODE 34232; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY:THE N-TH ORDER MATRIX; EXIT: THE CALCULATED LOWER-TRIANGULAR MATRIX AND UNIT UPPERTRIANGULAR MATRIX WITH ITS UNIT DIAGONAL OMITTED; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[1:7]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; AUX[4]: A VALUE WHICH IS USED FOR CONTROLLING PIVOTING (SEE GSSELM, SECTION 3.1.1.1.1.1.1); EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N THEN THE PROCESS IS TERMINATED AND NO SOLUTION WILL HAVE BEEN CALCULATED; AUX[5]: THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX GIVEN IN ARRAY A; AUX[7]: AN UPPER BOUND FOR THE GROWTH (SEE GSSELM, SECTION 3.1.1.1.1.1.1); B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: IF AUX[3] = N, THEN THE CALCULATED SOLUTION OF THE LINEAR SYSTEM IS OVERWRITTEN ON B, ELSE B REMAINS UNALTERED. PROCEDURES USED: SOLELM = CP34061, GSSELM = CP34231. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: GSSSOL DECLARES TWO AUXILIARY ARRAYS OF TYPE INTEGER AND ORDER N. RUNNING TIME: PROPORTIONAL TO N ** 3. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: GSSSOL USES GSSELM (SECTION 3.1.1.1.1.1.1) TO PERFORM A TRIANGULAR DECOMPOSITION OF THE MATRIX AND SOLELM (THIS SECTION) TO CALCULATE THE SOLUTION OF THE GIVEN LINEAR SYSTEM; IF AUX[3] < N, THEN THE EFFECT OF GSSSOL IS MERELY THAT OF GSSELM. EXAMPLE OF USE: LET A BE THE FOURTH ORDER SEGMENT OF THE HILBERT MATRIX AND B THE THIRD COLUMN OF A, THEN THE SOLUTION OF THE LINEAR SYSTEM AX = B IS GIVEN BY THE THIRD UNIT VECTOR AND MAY BE CALCULATED BY THE FOLLOWING PROGRAM: BEGIN INTEGER I, J; ARRAY A[1:4, 1:4], B[1:4], AUX[1:7]; PROCEDURE LIST(ITEM); PROCEDURE ITEM; BEGIN INTEGER I; FOR I:= 1 STEP 1 UNTIL 4 DO ITEM(B[I]); FOR I:= 1 STEP 2 UNTIL 7 DO ITEM(AUX[I]) END LIST; PROCEDURE LAYOUT; FORMAT((/, (SOLUTION:)B+.15D+3D,/,3(10B+.15D+3D,/), (SIGN(DET) = )+D,/,(NUMBER OF ELIMINATIONSTEPS = ) +D,/,(MAX(ABS(A[I,J]))= )+.15D+3D,/, (UPPER BOUND GROWTH: )+.15D+3D)); FOR I:= 1 STEP 1 UNTIL 4 DO BEGIN FOR J:= 1 STEP 1 UNTIL 4 DO A[I,J]:= 1 / (I + J - 1); B[I]:= A[I,3] END; AUX[2]:= -14; AUX[4]:= 8; GSSSOL(A, 4, AUX, B); OUTLIST(71, LAYOUT, LIST) END RESULTS: SOLUTION: +.888178419700120-014 -.497379915032070-013 +.100000000000010+001 +.000000000000000+000 SIGN(DET) = +1 NUMBER OF ELIMINATIONSTEPS = +4 MAX(ABS(A[I,J]))= +.100000000000000+001 UPPER BOUND GROWTH: +.159619047619050+001 SUBSECTION: GSSSOLERB. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE GSSSOLERB(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; CODE 34243; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY:THE N-TH ORDER MATRIX; EXIT: THE CALCULATED LOWER-TRIANGULAR MATRIX AND UNIT UPPERTRIANGULAR MATRIX WITH ITS UNIT DIAGONAL OMITTED; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[0:11]; ENTRY: AUX[0]: THE MACHINE PRECISION; AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; AUX[4]: A VALUE WHICH IS USED FOR CONTROLLING PIVOTING (SEE GSSELM, SECTION 3.1.1.1.1.1.1); AUX[6]: AN UPPER BOUND FOR THE RELATIVE PRECISION OF THE GIVEN MATRIX ELEMENTS; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N THEN THE PROCESS IS TERMINATED AND NO SOLUTION OR ERROR BOUND WILL HAVE BEEN CALCULATED; AUX[5]: THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX GIVEN IN ARRAY A; AUX[7]: AN UPPER BOUND FOR THE GROWTH (SEE GSSELM, SECTION 3.1.1.1.1.1.1); AUX[9]: IF AUX[3] = N, THEN AUX[9] WILL EQUAL THE 1-NORM OF THE INVERSE MATRIX, ELSE AUX[9] WILL BE UNDEFINED; AUX[11]: IF AUX[3] = N THEN THE VALUE OF AUX[11] WILL BE A ROUGH UPPER BOUND FOR THE RELATIVE ERROR IN THE CALCULATED SOLUTION OF THE GIVEN LINEAR SYSTEM, ELSE AUX[11] WILL BE UNDEFINED; IF NO USE CAN BE MADE OF THE FORMULA FOR THE ERROR BOUND AS GIVEN IN SECTION 3.1.1.1.1.1.1 (SUBSECTION ERBELM), BECAUSE OF A VERY BAD CONDITION OF THE MATRIX, THEN AUX[11]:= -1; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: IF AUX[3] = N, THEN THE CALCULATED SOLUTION OF THE LINEAR SYSTEM, ELSE B REMAINS UNALTERED. PROCEDURES USED: SOLELM = CP34061, GSSERB = CP34242. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: GSSSOLERB DECLARES TWO AUXILIARY ARRAYS OF TYPE INTEGER AND ORDER N. RUNNING TIME: PROPORTIONAL TO N ** 3. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: GSSSOLERB USES GSSERB (SECTION 3.1.1.1.1.1.1) TO PERFORM THE TRIANGULAR DECOMPOSITION OF THE MATRIX AND TO CALCULATE AN UPPER BOUND FOR THE RELATIVE ERROR IN THE CALCULATED SOLUTION OF THE GIVEN LINEAR SYSTEM, AND SOLELM (THIS SECTION) TO CALCULATE THIS SOLUTION; IF AUX[3] < N, THEN THE EFFECT OF GSSSOLERB IS MERELY THAT OF GSSELM (SECTION 3.1.1.1.1.1.1). EXAMPLE OF USE: LET A BE THE FOURTH ORDER SEGMENT OF THE HILBERT MATRIX AND B THE THIRD COLUMN OF A, THEN THE SOLUTION OF THE LINEAR SYSTEM AX = B IS GIVEN BY THE THIRD UNIT VECTOR AND THIS SOLUTION, AS WELL AS AN UPPER BOUND FOR THE RELATIVE ERROR IN THE CALCULATED ONE , MAY BE OBTAINED BY THE FOLLOWING PROGRAM: BEGIN INTEGER I, J; ARRAY A[1:4, 1:4], B[1:4], AUX[0:11]; PROCEDURE LIST(ITEM); PROCEDURE ITEM; BEGIN INTEGER I; FOR I:= 1 STEP 1 UNTIL 4 DO ITEM(B[I]); FOR I:= 1 STEP 2 UNTIL 11 DO ITEM(AUX[I]) END LIST; PROCEDURE LAYOUT; FORMAT((/, (SOLUTION:)B+.15D+3D,/,3(10B+.15D+3D,/), (SIGN(DET) = )+D,/,(NUMBER OF ELIMINATIONSTEPS = ) +D,/,(MAX(ABS(A[I,J]))= )+.15D+3D,/, (UPPER BOUND GROWTH: )+.15D+3D,/, (1-NORM OF THE INVERSE MATRIX:)B+.15D+3D,/, (UPPER BOUND REL. ERR. IN THE CALC. SOL.) B+.15D+3D)); FOR I:= 1 STEP 1 UNTIL 4 DO BEGIN FOR J:= 1 STEP 1 UNTIL 4 DO A[I,J]:= 1 / (I + J - 1); B[I]:= A[I,3] END; AUX[0]:= AUX[2]:= -14; AUX[4]:= 8; AUX[6]:= -14; GSSSOLERB(A, 4, AUX, B); OUTLIST(71, LAYOUT, LIST) END RESULTS: SOLUTION: +.888178419700120-014 -.497379915032070-013 +.100000000000010+001 +.000000000000000+000 SIGN(DET) = +1 NUMBER OF ELIMINATIONSTEPS = +4 MAX(ABS(A[I,J]))= +.100000000000000+001 UPPER BOUND GROWTH: +.159619047619050+001 1-NORM OF THE INVERSE MATRIX: +.136199999998790+005 UPPER BOUND REL. ERR. IN THE CALC. SOL. +.277896269157090-007 REFERENCES: [1] BUS, J. C. P. LINEAR SYSTEMS WITH CALCULATION OF ERROR BOUNDS AND ITERATIVE REFINEMENT (DUTCH). MATHEMATICAL CENTRE, AMSTERDAM, LR 3. 4. 19 (1972). [2] DEKKER, T. J. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1. MATHEMATICAL CENTRE, AMSTERDAM, TRACT 22 (1968). SOURCE TEXT(S): CODE 34051; PROCEDURE SOL(A, N, P, B); VALUE N; INTEGER N; ARRAY A, B; INTEGER ARRAY P; BEGIN INTEGER K, PK; REAL R; FOR K:= 1 STEP 1 UNTIL N DO BEGIN R:= B[K]; PK:= P[K]; B[K]:= (B[PK] - MATVEC(1, K - 1, K, A, B)) / A[K,K]; IF PK ^= K THEN B[PK]:= R END; FOR K:= N STEP - 1 UNTIL 1 DO B[K]:= B[K] - MATVEC(K + 1, N, K, A, B) END SOL; EOP 0CODE 34301; PROCEDURE DECSOL(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; BEGIN INTEGER ARRAY P[1:N]; DEC(A, N, AUX, P); IF AUX[3] = N THEN SOL(A, N, P, B) END DECSOL; EOP 0CODE 34061; PROCEDURE SOLELM(A, N, RI, CI, B); VALUE N; INTEGER N; ARRAY A, B; INTEGER ARRAY RI, CI; BEGIN INTEGER R, CIR; REAL W; SOL(A, N, RI, B); FOR R:= N STEP - 1 UNTIL 1 DO BEGIN CIR:= CI[R]; IF CIR ^= R THEN BEGIN W:= B[R]; B[R]:= B[CIR]; B[CIR]:= W END END END SOLELM; EOP CODE 34232; PROCEDURE GSSSOL(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; BEGIN INTEGER ARRAY RI, CI[1:N]; GSSELM(A, N, AUX, RI, CI); IF AUX[3] = N THEN SOLELM(A, N, RI, CI, B) END GSSSOL; EOP 0CODE 34243; PROCEDURE GSSSOLERB(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; BEGIN INTEGER ARRAY RI, CI[1:N]; GSSERB(A, N, AUX, RI, CI); IF AUX[3] = N THEN SOLELM(A, N, RI, CI, B) END GSSSOLERB; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.1.4 (DECEMBER 1975) AUTHORS: J. C. P. BUS AND T. J. DEKKER. CONTRIBUTOR: J.C.P. BUS AND P.A. BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730920. BRIEF DESCRIPTION: THIS SECTION CONTAINS FIVE PROCEDURES FOR INVERSION OF MATRICES: INV CALCULATES THE INVERSE OF A MATRIX THAT HAS BEEN TRIANGULARLY DECOMPOSED BY DEC; DECINV CALCULATES THE INVERSE OF A MATRIX WHOSE ORDER IS SMALL RELATIVE TO THE NUMBER OF BINARY DIGITS IN THE NUMBER REPRESENTATION; INV1 CALCULATES THE INVERSE OF A MATRIX THAT HAS BEEN TRIANGULARLY DECOMPOSED BY GSSELM OR GSSERB.THE 1-NORM OF THE INVERSE MATRIX MIGHT ALSO BE CALCULATED GSSINV CALCULATES THE INVERSE OF A MATRIX; GSSINVERB CALCULATES THE INVERSE OF A MATRIX AND ITS 1-NORM. A ROUGH UPPERBOUND FOR THE RELATIVE ERROR IN THE CALCULATED INVERSE MATRIX IS ALSO GIVEN; THE DIFFERENCE BETWEEN DECINV ON THE ONE SIDE AND GSSINV AND GSSINVERB ON THE OTHER SIDE LIES IN THE METHOD USED FOR TRIANGULAR DECOMPOSITION, PARTICULARLY IN THE PIVOTING STRATEGY; DECINV USES DEC, GSSINV AND GSSINVERB USE GSSELM TO PERFORM THE TRIANGULAR DECOMPOSITION; THE USER IS ADVISED TO USE GSSINV OR GSSINVERB (SEE SECTION 3.1.1.1.1.1.1). KEYWORDS: MATRIX INVERSION. SUBSECTION: INV . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE INV(A, N, P); VALUE N; INTEGER N; ARRAY A; INTEGER ARRAY P; CODE 34053; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY: THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX AS PRODUCED BY DEC (SECTION 3.1.1.1.1.1.1); EXIT: THE CALCULATED INVERSE MATRIX; N: ; THE ORDER OF THE MATRIX; P: ; INTEGERARRAY P[1:N]; ENTRY:THE PIVOTAL INDICES, AS PRODUCED BY DEC; PROCEDURES USED: MATMAT = CP34013, ICHCOL = CP34031, DUPCOLVEC = CP31034. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: INV DECLARES AN AUXILIARY ARRAY OF TYPE REAL AND ORDER N. RUNNING TIME: PROPORTIONAL TO N ** 3. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: INV SHOULD BE CALLED AFTER DEC (SECTION 3.1.1.1.1.1.1) AND CALCULATES THE INVERSE OF THE MATRIX, WHOSE TRIANGULARLY DECOMPOSED FORM AS PRODUCED BY DEC IS GIVEN IN ARRAY A; THE INVERSE MATRIX IS OVERWRITTEN ON A. EXAMPLE OF USE: SEE DECINV (THIS SECTION). SUBSECTION: DECINV . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE DECINV(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; CODE 34302; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY: THE MATRIX, WHOSE INVERSE HAS TO BE CALCULATED; EXIT: IF AUX[3] = N, THEN THE CALCULATED INVERSE MATRIX; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[1:3]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N, THEN THE PROCESS IS TERMINATED AND NO INVERSE WILL HAVE BEEN CALCULATED. PROCEDURES USED: DEC = CP34300, INV = CP34053. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: DECINV DECLARES AN AUXILIARY ARRAY OF TYPE INTEGER AND ORDER N. RUNNING TIME: PROPORTIONAL TO N ** 3. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: DECINV USES DEC (SECTION 3.1.1.1.1.1.1) TO PERFORM THE TRIANGULAR DECOMPOSITION OF A MATRIX AND INV TO CALCULATE ITS INVERSE; DECINV SHOULD ONLY BE USED IF THE ORDER OF THE MATRIX IS SMALL RELATIVE TO THE NUMBER OF BINARY DIGITS IN THE NUMBER REPRESENTATION (SEE DEC); IF AUX[3] < N, THEN THE EFFECT OF DECINV IS MERELY THAT OF DEC. EXAMPLE OF USE: THE FOLLOWING PROGRAM CALCULATES THE INVERSE OF THE INPUT MATRIX AND PRINTS THE RESULTS: BEGIN ARRAY A[1:4, 1:4], AUX[1:3]; PROCEDURE LIST(ITEM); PROCEDURE ITEM; BEGIN INTEGER I, J; FOR I:= 1 STEP 1 UNTIL 4 DO FOR J:= 1 STEP 1 UNTIL 4 DO ITEM(A[I,J]) END LIST; PROCEDURE LAYOUT; FORMAT((4(4B,4(B+ZDB),/),/)); BEGIN INTEGER I, J; FOR I:= 1 STEP 1 UNTIL 4 DO FOR J:= 1 STEP 1 UNTIL 4 DO INREAL(70, A[I,J]) END IN LIST; AUX[2]:= -14; OUTPUT(71,(/,(INPUT:),///)); OUTLIST(71, LAYOUT, LIST); OUTPUT(71,(/,(CALCULATED INVERSE:),/)); DECINV(A, 4, AUX); OUTLIST(71, LAYOUT, LIST); OUTPUT(71, ((AUX[1]=)B+D,/,(AUX[3]=)B+D), AUX[1], AUX[3]) END INPUT: + 4 + 2 + 4 + 1 +30 +20 +45 +12 +20 +15 +36 +10 +35 +28 +70 +20 RESULTS: CALCULATED INVERSE: +4 -2 +4 -1 -30 +20 -45 +12 +20 -15 +36 -10 -35 +28 -70 +20 AUX[1]= +1 AUX[3]= +4 SUBSECTION: INV1 . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: REAL PROCEDURE INV1(A, N, RI, CI, WITHNORM); VALUE N, WITHNORM; INTEGER N; BOOLEAN WITHNORM; ARRAY A; INTEGER ARRAY RI, CI; CODE 34235; INV1: IF THE VALUE OF WITHNORM IS TRUE, THEN THE VALUE OF INV1 WILL EQUAL THE 1-NORM OF THE CALCULATED INVERSE MATRIX, ELSE INV1:= 0; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY: THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX AS PRODUCED BY GSSELM (SECTION 3.1.1.1.1.1.1); EXIT: THE CALCULATED INVERSE MATRIX; N: ; THE ORDER OF THE MATRIX; RI: ; INTEGERARRAY RI[1:N]; ENTRY:THE PIVOTAL ROW INDICES, AS PRODUCED BY GSSELM; CI: ; INTEGERARRAY CI[1:N]; ENTRY:THE PIVOTAL COLUMN INDICES, AS PRODUCED BY GSSELM; WITHNORM: ; IF THE VALUE OF WITHNORM IS TRUE, THEN THE 1-NORM OF THE INVERSE MATRIX WILL BE CALCULATED AND ASSIGNED TO INV1, ELSE INV1:= 0; PROCEDURES USED: ICHROW = CP34032, INV = CP34053. RUNNING TIME: PROPORTIONAL TO N ** 3. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: INV1 SHOULD BE CALLED AFTER GSSELM OR GSSERB (SECTION 3.1.1.1.1.1.1),WHICH DELIVERS THE TRIANGULARLY DECOMPOSED FORM OF A MATRIX; INV1 CALCULATES THE INVERSE MATRIX AND ALSO ITS 1-NORM MIGHT BE CALCULATED; THE INVERSE MATRIX IS OVERWRITTEN ON A. EXAMPLE OF USE: SEE GSSINV AND GSSINVERB (THIS SECTION). SUBSECTION: GSSINV . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE GSSINV(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; CODE 34236; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY: THE MATRIX, WHOSE INVERSE HAS TO BE CALCULATED; EXIT: IF AUX[3] = N, THEN THE CALCULATED INVERSE MATRIX; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[1:9]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; AUX[4]: A VALUE WHICH IS USED FOR CONTROLLING PIVOTING (SEE GSSELM, SECTION 3.1.1.1.1.1.1); EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N THEN THE PROCESS IS TERMINATED AND NO SOLUTION WILL BE CALCULATED; AUX[5]: THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX GIVEN IN ARRAY A; AUX[7]: AN UPPER BOUND FOR THE GROWTH (SEE GSSELM, SECTION 3.1.1.1.1.1.1); AUX[9]: IF AUX[3] = N, THEN AUX[9] WILL EQUAL THE 1-NORM OF THE CALCULATED INVERSE MATRIX, ELSE AUX[9] WILL BE UNDEFINED. PROCEDURES USED: INV1 = CP34235, GSSELM = CP34231. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: GSSINV DECLARES TWO AUXILIARY ARRAYS OF TYPE INTEGER AND ORDER N. RUNNING TIME: PROPORTIONAL TO N ** 3. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: GSSINV USES GSSELM (SECTION 3.1.1.1.1.1.1) TO PERFORM A TRIANGULAR DECOMPOSITION OF THE MATRIX AND INV1 (THIS SECTION) TO CALCULATE THE INVERSE MATRIX; IF AUX[3] < N, THEN THE EFFECT OF GSSINV IS MERELY THAT OF GSSELM. EXAMPLE OF USE: THE FOLLOWING PROGRAM CALCULATES THE INVERSE OF THE INPUT MATRIX AND PRINTS THE RESULTS: BEGIN ARRAY A[1:4, 1:4], AUX[1:9]; PROCEDURE LIST(ITEM); PROCEDURE ITEM; BEGIN INTEGER I, J; FOR I:= 1 STEP 1 UNTIL 4 DO FOR J:= 1 STEP 1 UNTIL 4 DO ITEM(A[I,J]) END LIST; PROCEDURE LAYOUT; FORMAT((4(4B,4(B+ZDB),/),/)); BEGIN INTEGER I, J; FOR I:= 1 STEP 1 UNTIL 4 DO FOR J:= 1 STEP 1 UNTIL 4 DO INREAL(70, A[I,J]) END IN LIST; AUX[2]:= -14; AUX[4]:= 8; OUTPUT(71,(/,(INPUT:),///)); OUTLIST(71, LAYOUT, LIST); GSSINV(A, 4, AUX); OUTPUT(71,(/,(CALCULATED INVERSE:),/)); OUTLIST(71, LAYOUT, LIST); OUTPUT(71, (4B(AUX ELEMENTS:),/,2(4B+D,/), 3(4B+.15D+3D,/)), AUX[1], AUX[3], AUX[5], AUX[7], AUX[9]) END INPUT: + 4 + 2 + 4 + 1 +30 +20 +45 +12 +20 +15 +36 +10 +35 +28 +70 +20 RESULTS: CALCULATED INVERSE: +4 -2 +4 -1 -30 +20 -45 +12 +20 -15 +36 -10 -35 +28 -70 +20 AUX ELEMENTS: +1 +4 +.700000000000000+002 +.112528571428570+003 +.154999999999730+003 SUBSECTION: GSSINVERB. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE GSSINVERB(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; CODE 34244; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N, 1:N]; ENTRY: THE MATRIX, WHOSE INVERSE HAS TO BE CALCULATED; EXIT: IF AUX[3] = N, THEN THE CALCULATED INVERSE MATRIX; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[0:11]; ENTRY: AUX[0]: THE MACHINE PRECISION; AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; AUX[4]: A VALUE WHICH IS USED FOR CONTROLLING PIVOTING (SEE GSSELM, SECTION 3.1.1.1.1.1.1); AUX[6]: AN UPPER BOUND FOR THE RELATIVE PRECISION OF THE GIVEN MATRIX ELEMENTS; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N THEN THE PROCESS IS TERMINATED AND NO SOLUTION WILL HAVE BEEN CALCULATED; AUX[5]: THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX GIVEN IN ARRAY A; AUX[7]: AN UPPER BOUND FOR THE GROWTH (SEE GSSELM, SECTION 3.1.1.1.1.1.1); AUX[9]: IF AUX[3] = N, THEN AUX[9] WILL EQUAL THE 1-NORM OF THE INVERSE MATRIX, ELSE AUX[9] WILL BE UNDEFINED; AUX[11]: IF AUX[3] = N THEN THE VALUE OF AUX[11] WILL BE A ROUGH UPPER BOUND FOR THE RELATIVE ERROR IN THE CALCULATED INVERSE MATRIX, ELSE AUX[11] WILL BE BE UNDEFINED; IF NO USE CAN BE MADE OF THE FORMULA FOR THE ERROR BOUND AS GIVEN IN SECTION 3.1.1.1.1.1.1 (SUBSECTION ERBELM), BECAUSE OF A VERY BAD CONDITION OF THE MATRIX, THEN AUX[11]:=-1. PROCEDURES USED: INV1 = CP34235, GSSELM = CP34231, ERBELM = CP34241. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: GSSINVERB DECLARES TWO AUXILIARY ARRAYS OF TYPE INTEGER AND ORDER N. RUNNING TIME: PROPORTIONAL TO N ** 3. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: GSSINVERB USES GSSELM (SECTION 3.1.1.1.1.1.1) TO PERFORM THE TRIANGULAR DECOMPOSITION OF THE MATRIX, INV1 (THIS SECTION) TO CALCULATE THE INVERSE MATRIX AND ITS 1-NORM AND ERBELM (SECTION 3.1.1.1.1.1.1) TO CALCULATE AN UPPER BOUND FOR THE RELATIVE ERROR IN THE CALCULATED INVERSE; IF AUX[3] < N, THEN THE EFFECT OF GSSINVERB IS MERELY THAT OF GSSELM. EXAMPLE OF USE: THE FOLLOWING PROGRAM CALCULATES THE INVERSE OF THE INPUT MATRIX WITH AN UPPER BOUND FOR THE RELATIVE ERROR IN IT AND PRINTS THE RESULTS: BEGIN ARRAY A[1:4, 1:4], AUX[0:11]; PROCEDURE LIST(ITEM); PROCEDURE ITEM; BEGIN INTEGER I, J; FOR I:= 1 STEP 1 UNTIL 4 DO FOR J:= 1 STEP 1 UNTIL 4 DO ITEM(A[I,J]) END LIST; PROCEDURE LAYOUT; FORMAT((4(4B,4(B+ZDB),/),/)); BEGIN INTEGER I, J; FOR I:= 1 STEP 1 UNTIL 4 DO FOR J:= 1 STEP 1 UNTIL 4 DO INREAL(70, A[I,J]) END IN LIST; AUX[0]:= AUX[2]:= AUX[6]:= -14; OUTPUT(71,(/,(INPUT:),///)); OUTLIST(71, LAYOUT, LIST); AUX[4]:= 8; GSSINVERB(A, 4, AUX); OUTPUT(71,(/,(CALCULATED INVERSE:),/)); OUTLIST(71, LAYOUT, LIST); OUTPUT(71, (4B(AUX ELEMENTS:),/,2(4B+D,/), 4(4B+.15D+3D,/)), AUX[1], AUX[3], AUX[5], AUX[7], AUX[9], AUX[11]) END INPUT: + 4 + 2 + 4 + 1 +30 +20 +45 +12 +20 +15 +36 +10 +35 +28 +70 +20 RESULTS: CALCULATED INVERSE: +4 -2 +4 -1 -30 +20 -45 +12 +20 -15 +36 -10 -35 +28 -70 +20 AUX ELEMENTS: +1 +4 +.700000000000000+002 +.112528571428570+003 +.154999999999730+003 +.222946341369190-007 REFERENCES: [1] BUS, J. C. P. LINEAR SYSTEMS WITH CALCULATION OF ERROR BOUNDS AND ITERATIVE REFINEMENT (DUTCH). MATHEMATICAL CENTRE, AMSTERDAM, LR 3. 4. 19 (1972). [2] DEKKER, T. J. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1. MATHEMATICAL CENTRE, AMSTERDAM, TRACT 22 (1968). SOURCE TEXT(S): CODE 34053; PROCEDURE INV(A, N, P); VALUE N; INTEGER N; ARRAY A; INTEGER ARRAY P; BEGIN INTEGER J, K, K1; REAL R; ARRAY V[1:N]; FOR K:= N STEP - 1 UNTIL 1 DO BEGIN K1:= K + 1; FOR J:= N STEP - 1 UNTIL K1 DO BEGIN A[J,K1]:= V[J]; V[J]:= - MATMAT(K1, N, K, J, A, A) END; R:= A[K,K]; FOR J:= N STEP - 1 UNTIL K1 DO BEGIN A[K,J]:= V[J]; V[J]:= - MATMAT(K1, N, J, K, A, A) / R END; V[K]:= (1 - MATMAT(K1, N, K, K, A, A)) / R END; DUPCOLVEC(1, N, 1, A, V); FOR K:= N - 1 STEP - 1 UNTIL 1 DO BEGIN K1:= P[K]; IF K1 ^= K THEN ICHCOL(1, N, K, K1, A) END END INV; EOP 0CODE 34302; PROCEDURE DECINV(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; BEGIN INTEGER ARRAY P[1:N]; DEC(A, N, AUX, P); IF AUX[3] = N THEN INV(A, N, P) END DECINV EOP CODE 34235; REAL PROCEDURE INV1(A, N, RI, CI, WITHNORM); VALUE N, WITHNORM; INTEGER N; BOOLEAN WITHNORM; ARRAY A; INTEGER ARRAY RI, CI; BEGIN INTEGER L, K, K1; REAL AID, NRMINV; INV(A, N, RI); NRMINV:= 0; IF WITHNORM THEN FOR L:= 1 STEP 1 UNTIL N DO NRMINV:= NRMINV + ABS(A[L,N]); FOR K:= N - 1 STEP - 1 UNTIL 1 DO BEGIN IF WITHNORM THEN BEGIN AID:= 0; FOR L:= 1 STEP 1 UNTIL N DO AID:= AID + ABS(A[L,K]); IF NRMINV < AID THEN NRMINV:= AID END; K1:= CI[K]; IF K1 ^= K THEN ICHROW(1, N, K, K1, A) END; INV1:= NRMINV END INV1; EOP 0CODE 34236; PROCEDURE GSSINV(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; BEGIN INTEGER ARRAY RI, CI[1:N]; GSSELM(A, N, AUX, RI, CI); IF AUX[3] = N THEN AUX[9]:= INV1(A, N, RI, CI, TRUE) END GSSINV; EOP 0CODE 34244; PROCEDURE GSSINVERB(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; BEGIN INTEGER ARRAY RI, CI[1:N]; GSSELM(A, N, AUX, RI, CI); IF AUX[3] = N THEN ERBELM(N, AUX, INV1(A, N, RI, CI, TRUE)) END GSSINVERB; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.1.5 (FEBRUARY 1979) AUTHOR: J. C. P. BUS. CONTRIBUTOR: J.C.P. BUS AND P. A. BEENTJES. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731008. BRIEF DESCRIPTION: THIS SECTION CONTAINS FOUR PROCEDURES FOR CALCULATING AN ITERATIVELY IMPROVED SOLUTION OF A SYSTEM OF LINEAR EQUATIONS: ITISOL SOLVES A LINEAR SYSTEM WHOSE MATRIX HAS BEEN TRIANGULARLY DECOMPOSED BY GSSELM OR GSSERB. THIS SOLUTION THUS OBTAINED NUMERICALLY, IS IMPROVED ITERATIVELY; GSSITISOL SOLVES A LINEAR SYSTEM AND THIS SOLUTION THUS OBTAINED NUMERICALLY, IS IMPROVED ITERATIVELY; ITISOLERB SOLVES A LINEAR SYSTEM WHOSE MATRIX HAS BEEN TRIANGULARLY DECOMPOSED BY GSSNRI.THIS SOLUTION IS IMPROVED ITERATIVELY.MOREOVER A REALISTIC UPPERBOUND FOR THE RELATIVE ERROR IN THE SOLUTION IS CALCULATED. GSSITISOLERB SOLVES A LINEAR SYSTEM.THIS SOLUTION IS IMPROVED ITERATIVELY AND A REALISTIC UPPERBOUND FOR THE RELATIVE ERROR IN THE SOLUTION IS CALCULATED; KEYWORDS: ALGEBRAIC EQUATIONS, LINEAR SYSTEMS, ITERATIVE REFINEMENT. SUBSECTION: ITISOL . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE ITISOL(A, LU, N, AUX, RI, CI, B); VALUE N; INTEGER N; ARRAY A, LU, AUX, B; INTEGER ARRAY RI, CI; CODE 34250; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY:THE MATRIX OF THE LINEAR SYSTEM; LU: ; ARRAY LU[1:N, 1:N]; ENTRY:THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX GIVEN IN A, AS DELIVERED BY GSSELM (SECTION 3.1.1.1.1.1.1); N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[10:13]; ENTRY: AUX[10]: A RELATIVE TOLERANCE FOR THE SOLUTION VECTOR; IF THE 1-NORM OF THE VECTOR OF CORRECTIONS TO THE SOLUTION, DIVIDED BY THE 1-NORM OF THE CALCULATED SOLUTION, IS SMALLER THAN AUX[10], THEN THE PROCESS WILL STOP; THE USER SHOULD NOT CHOOSE THE VALUE OF AUX[10] SMALLER THAN THE RELATIVE PRECISION OF THE ELEMENTS OF THE MATRIX AND THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; AUX[12]: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED FOR THE REFINEMENT OF THE SOLUTION; IF THE NUMBER OF ITERATIONS EXCEEDS THE VALUE OF AUX[12], THEN THE PROCESS WILL BE BROKEN OFF; USUALLY AUX[12] = 5 WILL GIVE GOOD RESULTS; EXIT: AUX[11]: THE 1-NORM OF THE VECTOR OF CORRECTIONS TO THE SOLUTION IN THE LAST ITERATION STEP, DIVIDED BY THE 1-NORM OF THE CALCULATED SOLUTION; IF AUX[11] > AUX[10], THEN THE PROCESS HAS BEEN BROKEN OFF, BECAUSE THE NUMBER OF ITERATIONS EXCEEDED THE VALUE GIVEN IN AUX[12]; AUX[13]: THE 1-NORM OF THE RESIDUAL VECTOR (SEE METHOD AND PERFORMANCE; RI: ; INTEGERARRAY RI[1:N]; ENTRY:THE PIVOTAL ROW-INDICES, AS PRODUCED BY GSSELM; CI: ; INTEGERARRAY CI[1:N]; ENTRY:THE PIVOTAL COLUMN-INDICES, AS PRODUCED BY GSSELM; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: THE CALCULATED SOLUTION OF THE LINEAR SYSTEM. PROCEDURES USED: SOLELM = CP34061, INIVEC = CP31010, DUPVEC = CP31030, LNGMATVEC = CP34411. REQUIRED CENTRAL MEMORY: TWO REAL ARRAYS, BOTH OF ORDER N, ARE DECLARED. RUNNING TIME: THE NUMBER OF ARITHMETICAL OPERATIONS IN EACH ITERATION STEP IS PROPORTIONAL TO N ** 2. METHOD AND PERFORMANCE: ITISOL SHOULD BE CALLED AFTER GSSELM OR GSSERB (SECTION 3.1.1.1.1.1.1) AND SOLVES THE LINEAR SYSTEM WITH A MATRIX GIVEN IN ARRAY A, AND A RIGHT-HAND SIDE GIVEN IN ARRAY B; ONCE A SOLUTION IS CALCULATED WITH SOLELM (SECTION 3.1.1.1.1.1.3), THIS SOLUTION WILL BE REFINED ITERATIVELY UNTIL THE CALCULATED RELATIVE CORRECTION TO THIS SOLUTION WILL BE LESS THAN A PRESCRIBED VALUE (SEE AUX[10]); EACH ITERATION OF THE REFINEMENT PROCESS CONSISTS OF THE FOLLOWING THREE STEPS (SEE [1], [2], [3]): 1 CALCULATE, IN DOUBLE PRECISION, THE RESIDUAL VECTOR R, DEFINED BY: R = AX - B, WHERE X DENOTES THE SOLUTION, OBTAINED IN THE PREVIOUS ITERATION, B THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM, GIVEN IN B[1:N], AND A THE MATRIX GIVEN IN A[1:N, 1:N]; 2 CALCULATE THE SOLUTION C, SAY, OF THE LINEAR SYSTEM: AC = R, WITH THE AID OF THE TRIANGULARLY DECOMPOSED MATRIX AS GIVEN IN LU[1:N, 1:N]; 3 CALCULATE THE NEW SOLUTION: XNEW = X - C; CONDITION OF THE MATRIX IS NOT TOO BAD, THEN THE PRECISION OF THE CALCULATED SOLUTION WILL BE OF THE ORDER OF THE PRECISION ASKED FOR IN AUX[10]; HOWEVER, IF THE CONDITION OF THE MATRIX IS VERY BAD, THEN THIS PROCESS WILL POSSIBLY NOT CONVERGE OR, IN EXCEPTIONAL CASES, CONVERGE TO A USELESS RESULT; IF THE USER WANTS TO MAKE CERTAIN ABOUT THE PRECISION OF THE CALCULATED SOLUTION, THEN HE HAS TO USE ITISOLERB (THIS SECTION), WHICH NEEDS THE CALCULATION (OF ORDER N ** 3) OF THE INVERSE MATRIX TO GET AN UPPER BOUND FOR THE CONDITION NUMBER AND WHICH GIVES A REALISTIC UPPER BOUND FOR THE RELATIVE ERROR IN THE CALCULATED SOLUTION; ITISOL LEAVES A, LU, RI AND CI UNALTERED, SO AFTER ONE CALL OF GSSELM SEVERAL CALLS OF ITISOL MAY FOLLOW TO CALCULATE THE SOLUTION OF SEVERAL LINEAR SYSTEMS WITH THE SAME MATRIX BUT DIFFERENT RIGHT- HAND SIDES. EXAMPLE OF USE: SEE GSSITISOL (THIS SECTION). SUBSECTION: GSSITISOL . CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE GSSITISOL(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; CODE 34251; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY:THE N-TH ORDER MATRIX; EXIT: THE CALCULATED LOWER-TRIANGULAR MATRIX AND UNIT UPPERTRIANGULAR MATRIX WITH ITS UNIT DIAGONAL OMITTED; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[1:13]; ENTRY: AUX[2]: A RELATIVE TOLERANCE FOR THE PROCESS OF TRIANGULAR DECOMPOSITION;A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER,IT SHOULD NOT BE CHOSEN SMALLER THANN THE MACHINE PRECISION; AUX[4]: A VALUE WHICH IS USED FOR CONTROLLING PIVOTING (SEE GSSELM, SECTION 3.1.1.1.1.1.1); AUX[10]: A RELATIVE TOLERANCE FOR THE SOLUTION VECTOR; IF THE 1-NORM OF THE VECTOR OF CORRECTIONS TO THE SOLUTION, DIVIDED BY THE 1-NORM OF THE CALCULATED SOLUTION, IS SMALLER THAN AUX[10], THEN THE PROCESS WILL STOP; THE USER SHOULD NOT CHOOSE THE VALUE OF AUX[10] SMALLER THAN THE RELATIVE PRECISION OF THE ELEMENTS OF THE MATRIX AND THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; AUX[12]: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED FOR THE REFINEMENT OF THE SOLUTION; IF THE NUMBER OF ITERATIONS EXCEEDS THE VALUE OF AUX[12], THEN THE PROCESS WILL BE BROKEN OFF; USUALLY AUX[12] = 5 WILL GIVE GOOD RESULTS; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N THEN THE PROCESS HAS BEEN BROKEN OFF AND NO SOLUTION WILL HAVE BEEN CALCULATED; AUX[5]: THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX WHICH HAD BEEN GIVEN IN ARRAY A; AUX[7]: AN UPPER BOUND FOR THE GROWTH (SEE GSSELM, SECTION 3.1.1.1.1.1.1); AUX[11]: IF AUX[3] < N, THEN AUX[11] WILL BE UNDEFINED, ELSE AUX[11] EQUALS THE 1-NORM OF THE VECTOR OF CORRECTIONS TO THE SOLUTION IN THE LAST STEP, DIVIDED BY THE 1-NORM OF THE CALCULATED SOLUTION; IF AUX[11] > AUX[10], THEN THE PROCESS HAS BEEN BROKEN OFF, BECAUSE THE NUMBER OF ITERATIONS EXCEEDED THE VALUE GIVEN IN AUX[12]; AUX[13]: IF AUX[3] = N, THEN THE VALUE OF AUX[13] WILL EQUAL THE 1-NORM OF THE RESIDUAL VECTOR (SEE ITISOL IN THIS SECTION), ELSE AUX[13] WILL BE UNDEFINED; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: IF AUX[3] = N, THEN THE CALCULATED SOLUTION OF THE LINEAR SYSTEM IS OVERWRITTEN ON B, ELSE B REMAINS UNALTERED. PROCEDURES USED: DUPMAT = CP31035, GSSELM = CP34231, ITISOL = CP34250. REQUIRED CENTRAL MEMORY: THREE REAL ARRAYS, TWO OF ORDER N AND ONE OF ORDER N ** 2, ARE DECLARED. FURTHERMORE, TWO INTEGER ARRAYS OF ORDER N ARE USED. RUNNING TIME: PROPORTIONAL TO N ** 3. METHOD AND PERFORMANCE: GSSITISOL USES GSSELM (SECTION 3.1.1.1.1.1.1) TO PERFORM A TRIANGULAR DECOMPOSITION OF THE MATRIX AND ITISOL (THIS SECTION) TO CALCULATE AN ITERATIVELY REFINED SOLUTION OF THE GIVEN LINEAR SYSTEM; IF AUX[3] < N, THEN THE EFFECT OF GSSITISOL IS MERELY THAT OF GSSELM; IF THE CONDITION OF THE MATRIX IS VERY BAD, THEN, IN EXCEPTIONAL CASES, THE CALCULATED SOLUTION MAY BE USELESS (SEE ITISOL, IN THIS SECTION). EXAMPLE OF USE: LET A BE THE FOURTH ORDER SEGMENT OF THE HILBERT MATRIX, MULTIPLIED WITH 840 TO GET INTEGER ELEMENTS, AND B THE THIRD COLUMN OF A, THEN THE SOLUTION OF THE LINEAR SYSTEM AX = B IS GIVEN BY THE THIRD UNIT VECTOR AND MAY BE OBTAINED BY THE FOLLOWING PROGRAM: BEGIN INTEGER I, J; ARRAY A[1:4, 1:4], B[1:4], AUX[1:13]; PROCEDURE LIST(ITEM); PROCEDURE ITEM; BEGIN INTEGER I; FOR I:= 1 STEP 1 UNTIL 4 DO ITEM(B[I]); FOR I:= 1 STEP 2 UNTIL 7 DO ITEM(AUX[I]); ITEM(AUX[11]); ITEM(AUX[13]) END LIST; PROCEDURE LAYOUT; FORMAT((*, (SOLUTION:)B+.15D+3D,/,3(10B+.15D+3D,/), (SIGN(DET) = )+D,/,(NUMBER OF ELIMINATIONSTEPS = ) +D,/,(MAX(ABS(A[I,J]))= )+.15D+3D,/, (UPPER BOUND GROWTH: )+.15D+3D,/, (NORM LAST CORRECTION VECTOR: )+.15D+3D,/, (NORM RESIDUAL VECTOR: )+.15D+3D)); FOR I:= 1 STEP 1 UNTIL 4 DO BEGIN FOR J:= 1 STEP 1 UNTIL 4 DO A[I,J]:= 840 // (I + J - 1); B[I]:= A[I,3] END; AUX[2]:= -14; AUX[4]:= 8; AUX[10]:= -14; AUX[12]:= 5; GSSITISOL(A, 4, AUX, B); OUTLIST(71, LAYOUT, LIST) END RESULTS: SOLUTION: +.000000000000000+000 +.000000000000000+000 +.100000000000000+001 +.000000000000000+000 SIGN(DET) = +1 NUMBER OF ELIMINATIONSTEPS = +4 MAX(ABS(A[I,J]))= +.840000000000000+003 UPPER BOUND GROWTH: +.134080000000000+004 NORM LAST CORRECTION VECTOR: +.000000000000000+000 NORM RESIDUAL VECTOR: +.000000000000000+000 SUBSECTION: ITISOLERB. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE ITISOLERB(A, LU, N, AUX, RI, CI, B); VALUE N; INTEGER N; ARRAY A, LU, AUX, B; INTEGER ARRAY RI, CI; CODE 34253; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY[1:N,1:N]; ENTRY:THE MATRIX OF THE LINEAR SYSTEM; LU: ; ARRAY LU[1:N,1:N]; ENTRY:THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX GIVEN IN A AS DELIVERED BY GSSNRI (SECTION 3.1.1.1.1.1.1); N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[0:13]; ENTRY: AUX[0]: THE MACHINE PRECISION; AUX[5]: THE MODULUS OF AN ELEMENT, WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX OF THE LINEAR SYSTEM; THIS VALUE IS DELIVERED BY GSSNRI (SECTION 3.1.1.1.1.1.1) IN AUX[5]; AUX[6]: AN UPPER BOUND FOR THE RELATIVE ERROR IN THE ELEMENTS OF THE MATRIX OF THE LINEAR SYSTEM; AUX[7]: AN UPPER BOUND FOR THE GROWTH DURING GAUSSIAN ELIMINATION; THIS VALUE IS DELIVERED BY GSSNRI IN AUX[7]; AUX[8]: AN UPPER BOUND FOR THE RELATIVE ERROR IN THE ELEMENTS OF THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; AUX[9]: THE 1-NORM OF THE INVERSE MATRIX; THIS VALUE IS DELIVERED BY GSSNRI IN AUX[9]; AUX[10]: A RELATIVE TOLERANCE FOR THE SOLUTION VECTOR; IF THE 1-NORM OF THE VECTOR OF CORRECTIONS TO THE SOLUTION, DIVIDED BY THE 1-NORM OF THE CALCULATED SOLUTION, IS SMALLER THAN AUX[10], THEN THE PROCESS WILL STOP; THE USER SHOULD NOT CHOOSE THE VALUE OF AUX[10] SMALLER THAN THE RELATIVE PRECISION OF THE ELEMENTS OF THE MATRIX AND THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM, GIVEN IN AUX[6] AND AUX[8]; AUX[12]: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED FOR THE REFINEMENT OF THE SOLUTION; IF THE NUMBER OF ITERATIONS EXCEEDS THE VALUE OF AUX[12], THEN THE PROCESS WILL BE BROKEN OFF; USUALLY AUX[12] = 5 WILL GIVE GOOD RESULTS; EXIT: AUX[11]:A REALISTIC UPPERBOUND FOR THE RELATIVE ERROR IN THE CALCULATED SOLUTION; HOWEVER, IF NO USE CAN BE MADE OF THE ERROR-FORMULA, THEN AUX[11] := -1; AUX[13]:THE 1-NORM OF THE RESIDUAL VECTOR (SEE METHOD AND PERFORMANCE); RI: ; INTEGERARRAY RI[1:N]; ENTRY:THE PIVOTAL ROW-INDICES, AS PRODUCED BY GSSNRI; CI: ; INTEGERARRAY CI[1:N]; EXIT:THE PIVOTAL COLUMN-INDICES, AS PRODUCED BY GSSNRI; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: THE SOLUTION OF THE LINEAR SYSTEM. PROCEDURES USED: ITISOL = CP34250. REQUIRED CENTRAL MEMORY:TWO REAL AARRYS, BOTH OF ORDER N, ARE DECLARED. RUNNING TIME: THE NUMBER OF ARITHMETICAL OPERATIONS IN EACH ITERATION STEP OF THE REFINEMENT PROCESS IS PROPORTIONAL TO N ** 2. METHOD AND PERFORMANCE: ITISOLERB SHOULD BE CALLED AFTER GSSNRI (SECTION 3.1.1.1.1.1.1), WHICH DELIVERS THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX AND THE PROPER VALUES FOR THE ODD ELEMENTS OF ARRAY AUX; ITISOLERB CALCULATES, WITH THE USE OF ITISOL (THIS SECTION), AN ITERATIVELY IMPROVED SOLUTION OF THE LINEAR SYSTEM WITH A MATRIX AS GIVEN IN ARRAY A AND A RIGHT-HAND SIDE AS GIVEN IN B; MOREOVER, ITISOLERB CALCULATES A REALISTIC UPPER BOUND FOR THE RELATIVE ERROR IN THE CALCULATED SOLUTION, BY (SEE [1], [2]): NORM(DX) / NORM(X) <= P / (1 - P), WHERE : P = ( NORM(R) / NORM(X) + DB / NORM(X) + DA ) * NORM(C) / (1 - Q * NORM(C) ) FOR Q SEE SECTION 3.1.1.1.1.1.1 (SUBSECTION ERBELM), R IS THE RESIDUAL VECTOR (SEE ITISOL IN THIS SECTION), X IS THE CALCULATED SOLUTION, DB IS THE UPPER BOUND FOR THE RELATIVE ERROR IN THE RIGHT-HAND SIDE ELEMENTS, DA IS THE UPPER BOUND FOR THE RELATIVE ERROR IN THE MATRIX ELEMENTS, C IS THE CALCULATED INVERSE MATRIX, AND THE 1-NORM OF A VECTOR OR A MATRIX IS DENOTED BY: NORM(.) IF 1 - P < AUX[0], THEN THE VALUE -1 IS DELIVERED IN AUX[11]; ITISOLERB LEAVES A, LU, RI AND CI UNALTERED, SO AFTER ONE CALL OF GSSNRI SEVERAL CALLS OF ITISOLERB MAY FOLLOW, TO CALCULATE THE SOLUTION OF SEVERAL LINEAR SYSTEMS WITH THE SAME MATRIX BUT DIFFERENT RIGHT-HAND SIDES. EXAMPLE OF USE: SEE GSSITISOLERB (THIS SECTION). SUBSECTION: GSSITISOLERB. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE GSSITISOLERB(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; CODE 34254; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY:THE N-TH ORDER MATRIX; EXIT: THE CALCULATED LOWER-TRIANGULAR MATRIX AND UNIT UPPER-TRIANGULAR MATRIX WITH ITS UNIT DIAGONAL OMITTED; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[0:13]; ENTRY: AUX[0]: THE MACHINE PRECISION; AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS; HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; AUX[4]: A VALUE WHICH IS USED FOR CONTROLLING PIVOTING (SEE GSSELM, SECTION 3.1.1.1.1.1.1); AUX[6]: AN UPPER BOUND FOR THE RELATIVE ERROR IN THE MATRIX ELEMENTS OF THE LINEAR SYSTEM; AUX[8]: AN UPPER BOUND FOR THE RELATIVE ERROR IN THE ELEMENTS OF THE RIGHT-HAND SIDE; AUX[10]: A RELATIVE TOLERANCE FOR THE SOLUTION VECTOR; IF THE 1-NORM OF THE VECTOR OF CORRECTIONS TO THE SOLUTION, DIVIDED BY THE 1-NORM OF THE CALCULATED SOLUTION, IS SMALLER THAN AUX[10], THEN THE PROCESS WILL STOP; THE USER SHOULD NOT CHOOSE THE VALUE OF AUX[10] SMALLER THAN THE RELATIVE PRECISION OF THE ELEMENTS OF THE MATRIX AND THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM (AUX[10] >= AUX[2]); AUX[12]: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED FOR THE REFINEMENT OF THE SOLUTION; IF THE NUMBER OF ITERATIONS EXCEEDS THE VALUE OF AUX[12], THEN THE PROCESS WILL BE BROKEN OFF; USUALLY AUX[12] = 5 WILL GIVE GOOD RESULTS; EXIT: AUX[1]: IF R IS THE NUMBER OF ELIMINATION STEPS PERFORMED (SEE AUX[3]), THEN AUX[1] EQUALS 1 IF THE DETERMINANT OF THE PRINCIPAL SUBMATRIX OF ORDER R IS POSITIVE, ELSE AUX[1] = -1; AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; IF AUX[3] < N THEN THE PROCESS HAS BEEN BROKEN OFF AND NO SOLUTION WILL HAVE BEEN CALCULATED; AUX[5]: THE MODULUS OF AN ELEMENT WHICH IS OF MAXIMUM ABSOLUTE VALUE FOR THE MATRIX WHICH HAD BEEN GIVEN IN ARRAY A; AUX[7]: AN UPPER BOUND FOR THE GROWTH (SEE GSSELM, SECTION 3.1.1.1.1.1.1); AUX[9]: IF AUX[3] = N THEN AUX[9] EQUALS THE 1-NORM OF THE CALCULATED INVERSE MATRIX, ELSE AUX[9] WILL BE UNDEFINED; AUX[11]: IF AUX[3] < N, THEN AUX[11] WILL BE UNDEFINED, ELSE THE VALUE OF AUX[11] EQUALS A REALISTIC UPPER BOUND FOR THE RELATIVE ERROR IN THE CALCULATED SOLUTION; HOWEVER, IF NO USE CAN BE MADE OF THE ERROR FORMULA (SEE ITISOLERB IN THIS SECTION), THEN AUX[11]:= -1; AUX[13]: IF AUX[3] = N, THEN AUX[13] EQUALS THE 1-NORM OF THE RESIDUAL VECTOR (SEE ITISOL IN THIS SECTION), ELSE AUX[13] WILL BE UNDEFINED; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: IF AUX[3] = N, THEN THE CALCULATED SOLUTION OF THE LINEAR SYSTEM IS OVERWRITTEN ON B, ELSE B REMAINS UNALTERED. PROCEDURES USED: DUPMAT = CP31035, GSSNRI = CP34252, ITISOLERB = CP34253. REQUIRED CENTRAL MEMORY: THREE REAL ARRAYS, TWO OF ORDER N AND ONE OF ORDER N ** 2 , ARE USED. FURTHERMORE, TWO INTEGER ARRAYS OF ORDER N ARE USED. RUNNING TIME: PROPORTIONAL TO N ** 3. METHOD AND PERFORMANCE: GSSITISOLERB USES GSSNRI (SECTION 3.1.1.1.1.1.1) TO PERFORM A TRIANGULAR DECOMPOSITION OF THE MATRIX AND ITISOLERB (THIS SECTION) TO CALCULATE AN ITERATIVELY REFINED SOLUTION OF THE GIVEN LINEAR SYSTEM AND A REALISTIC UPPER BOUND FOR THE RELATIVE ERROR IN THIS SOLUTION; IF AUX[3] < N, THEN THE EFFECT OF GSSITISOLERB IS MERELY THAT OF GSSELM (SECTION 3.1.1.1.1.1.1). EXAMPLE OF USE: LET A BE THE FOURTH ORDER SEGMENT OF THE HILBERT MATRIX, MULTIPLIED WITH 840 TO GET INTEGER ELEMENTS, AND B THE THIRD COLUMN OF A, THEN THE SOLUTION OF THE LINEAR SYSTEM AX = B IS GIVEN BY THE THIRD UNIT VECTOR AND THIS SOLUTION, AS WELL AS A REALISTIC UPPER BOUND FOR THE RELATIVE ERROR IN IT, MAY BE OBTAINED BY THE FOLLOWING PROGRAM: BEGIN INTEGER I, J; ARRAY A[1:4, 1:4], B[1:4], AUX[0:13]; PROCEDURE LIST(ITEM); PROCEDURE ITEM; BEGIN INTEGER I; FOR I:= 1 STEP 1 UNTIL 4 DO ITEM(B[I]); FOR I:= 1 STEP 2 UNTIL 13 DO ITEM(AUX[I]) END LIST; PROCEDURE LAYOUT; FORMAT((*, (SOLUTION:)B+.15D+3D,/,3(10B+.15D+3D,/), (SIGN(DET) = )+D,/,(NUMBER OF ELIMINATIONSTEPS = ) +D,/,(MAX(ABS(A[I,J]))= )+.15D+3D,/, (UPPER BOUND GROWTH: )+.15D+3D,/, (NORM CALCULATED INVERSE MATRIX: )+.15D+3D,/, (UPPER BOUND FOR THE RELATIVE ERROR: )+.15D+3D,/, (NORM RESIDUAL VECTOR: )+.15D+3D)); FOR I:= 1 STEP 1 UNTIL 4 DO BEGIN FOR J:= 1 STEP 1 UNTIL 4 DO A[I,J]:= 840 // (I + J - 1); B[I]:= A[I,3] END; AUX[0]:= AUX[2]:= -14; AUX[4]:= 8; AUX[6]:= AUX[8]:= 0; AUX[10]:= -14; AUX[12]:= 5; GSSITISOLERB(A, 4, AUX, B); OUTLIST(71, LAYOUT, LIST) END RESULTS: SOLUTION: +.000000000000000+000 +.000000000000000+000 +.100000000000000+001 +.000000000000000+000 SIGN(DET) = +1 NUMBER OF ELIMINATIONSTEPS = +4 MAX(ABS(A[I,J]))= +.840000000000000+003 UPPER BOUND GROWTH: +.134080000000000+004 NORM CALCULATED INVERSE MATRIX: +.162142857143540+002 UPPER BOUND FOR THE RELATIVE ERROR: +.000000000000000+000 NORM RESIDUAL VECTOR: +.000000000000000+000 REFERENCES: [1] BUS, J. C. P. LINEAR SYSTEMS WITH CALCULATION OF ERROR BOUNDS AND ITERATIVE REFINEMENT (DUTCH). MATHEMATICAL CENTRE, AMSTERDAM, LR 3.4.19, (1972). [2] DEKKER, T. J. NUMERICAL ALGEBRA (DUTCH). MATHEMATICAL CENTRE, AMSTERDAM, SYLLABUS 12, (1971). [3] WILKINSON, J. H. THE ALGEBRAIC EIGENVALUE PROBLEM. OXFORD (1965). SOURCE TEXT(S): CODE 34250; PROCEDURE ITISOL(A, LU, N, AUX, RI, CI, B); VALUE N; INTEGER N; ARRAY A, LU, AUX, B; INTEGER ARRAY RI, CI; BEGIN INTEGER I, ITER, MAXITER; REAL MAXERX, ERX, NRMRES, NRMSOL, R, RR; ARRAY RES, SOL[1:N]; MAXERX:= ERX:= AUX[10]; MAXITER:= AUX[12]; INIVEC(1, N, SOL, 0); DUPVEC(1, N, 0, RES, B); FOR ITER:= 1, ITER + 1 WHILE ITER <= MAXITER & MAXERX < ERX DO BEGIN SOLELM(LU, N, RI, CI, RES); ERX:= NRMSOL:= NRMRES:= 0; FOR I:= 1 STEP 1 UNTIL N DO BEGIN R:= RES[I]; ERX:= ERX + ABS(R); RR:= SOL[I] + R; SOL[I]:= RR; NRMSOL:= NRMSOL + ABS(RR) END; ERX:= ERX / NRMSOL; FOR I:= 1 STEP 1 UNTIL N DO BEGIN LNGMATVEC(1, N, I, A, SOL, - B[I], 0, R, RR); R:= - (R + RR); RES[I]:= R; NRMRES:= NRMRES + ABS(R) END END ITERATION; DUPVEC(1, N, 0, B, SOL); AUX[11]:= ERX; AUX[13]:= NRMRES END ITISOL; EOP 0CODE 34251; PROCEDURE GSSITISOL(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; BEGIN INTEGER I, J; ARRAY AA[1:N,1:N]; INTEGER ARRAY RI, CI[1:N]; DUPMAT(1, N, 1, N, AA, A); GSSELM(A, N, AUX, RI, CI); IF AUX[3] = N THEN ITISOL(AA, A, N, AUX, RI, CI, B) END GSSITISOL; EOP CODE 34253; PROCEDURE ITISOLERB(A, LU, N, AUX, RI, CI, B); VALUE N; INTEGER N; ARRAY A, LU, AUX, B; INTEGER ARRAY RI, CI; BEGIN INTEGER I; REAL NRMSOL, NRMINV, NRMB, ALFA, TOLA, EPS; EPS:= AUX[0]; NRMINV:= AUX[9]; TOLA:= AUX[5] * AUX[6]; NRMB:= NRMSOL:= 0; FOR I:= 1 STEP 1 UNTIL N DO NRMB:= NRMB + ABS(B[I]); ITISOL(A, LU, N, AUX, RI, CI, B); FOR I:= 1 STEP 1 UNTIL N DO NRMSOL:= NRMSOL + ABS(B[I]); ALFA:= 1 - (1.06 * EPS * AUX[7] * (.75 * N + 4.5) * N ** 2 + TOLA) * NRMINV; IF ALFA < EPS THEN AUX[11]:= - 1 ELSE BEGIN ALFA:= ((AUX[13] + AUX[8] * NRMB) / NRMSOL + TOLA) * NRMINV / ALFA; AUX[11]:= IF 1 - ALFA < EPS THEN - 1 ELSE ALFA / (1 - ALFA) END END ITISOLERB; EOP 0CODE 34254; PROCEDURE GSSITISOLERB(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; BEGIN INTEGER I, J; ARRAY AA[1:N,1:N]; INTEGER ARRAY RI, CI[1:N]; DUPMAT(1, N, 1, N, AA, A); GSSNRI(A, N, AUX, RI, CI); IF AUX[3] = N THEN ITISOLERB(AA, A, N, AUX, RI, CI, B) END GSSITISOLERB; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.2.1 (MAY 1974) AUTHOR: T.J. DEKKER. CONTRIBUTORS: S.P.N. VAN KAMPEN, J. KOK. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731015. BRIEF DESCRIPTION: THIS SECTION CONTAINS TWO PROCEDURES: A) CHLDEC2 CALCULATES THE CHOLESKY DECOMPOSITION OF A POSITIVE DEFINITE SYMMETRIC MATRIX WH0SE UPPER TRIANGLE IS GIVEN IN A TWO- DIMENSIONAL ARRAY; B) CHLDEC1 CALCULATES THE CHOLESKY DECOMPOSITION OF A POSITIVE DEFINITE SYMMETRIC MATRIX WHOSE UPPER TRIANGLE IS GIVEN COLUMNWISE IN A ONE-DIMENSIONAL ARRAY. KEYWORDS: LINEAR EQUATIONS, POSITIVE DEFINITE SYMMETRIC MATRIX, CHOLESKY DECOMPOSITION. SUBSECTION: CHLDEC2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLDEC2(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; CODE 34310; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY: THE UPPER TRIANGLE OF THE POSITIVE DEFINITE MATRIX MUST BE GIVEN IN THE UPPER-TRIANGULAR PART OF A (THE ELEMENTS A[I,J], I <= J); EXIT: THE CHOLESKY DECOMPOSITION OF THE MATRIX IS DELIVERED IN THE UPPER TRIANGLE OF A; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:3]; ENTRY: AUX[2]: A RELATIVE TOLERANCE USED TO CONTROL THE CALCULATION OF THE DIAGONAL ELEMENTS; NORMAL EXIT: AUX[3]:= N; ABNORMAL EXIT: IF THE DECOMPOSITION CANNOT BE CARRIED OUT BECAUSE THE MATRIX IS (NUMERICALLY) NOT POSITIVE DEFINITE, AUX[3]:= K - 1, WHERE K IS THE LAST STAGE NUMBER. PROCEDURES USED: TAMMAT = CP34014. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: CHLDEC2 PERFORMS THE CHOLESKY DECOMPOSITION OF A SYMMETRIC POSITIVE DEFINITE MATRIX. THE METHOD USED IS CHOLESKY'S SQUARE ROOT METHOD WITHOUT PIVOTING (SEE REF[1] AND [2]). IF THE GIVEN SYMMETRIC MATRIX IS POSITIVE DEFINITE, THE METHOD YIELDS AN UPPER-TRIANGULAR MATRIX U SUCH THAT U'U EQUALS THE GIVEN MATRIX. THE PROCESS IS TERMINATED AT STAGE K, IF THE K-TH DIAGONAL ELEMENT OF THE GIVEN MATRIX MINUS THE SUM OF THE SQUARED ELEMENTS OF THE K-TH COLUMN OF U IS LESS THAN A TOLERANCE (AUX[2]) TIMES THE MAXIMAL DIAGONAL ELEMENT OF THE GIVEN MATRIX. IN THIS CASE THE MATRIX, POSSIBLY MODIFIED BY ROUNDING ERRORS, IS NOT POSITIVE DEFINITE. REFERENCES: [1]. T.J. DEKKER. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1. MC TRACT 22, 1968, MATH. CENTR., AMSTERDAM. [2]. J.H. WILKINSON. THE ALGEBRAIC EIGENVALUE PROBLEM. CLARENDON PRESS, OXFORD, 1965. EXAMPLE OF USE: SEE EXAMPLE OF USE OF CHLINV2, SECTION 3.1.1.1.1.2.4. SUBSECTION: CHLDEC1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLDEC1(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; CODE 34311; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1 : (N + 1) * N // 2]; ENTRY: THE UPPER-TRIANGULAR PART OF THE POSITIVE DEFINITE SYMMETRIC MATRIX MUST BE GIVEN COLUMNWISE IN ARRAY A (THE (I,J)-TH ELEMENT OF THE MATRIX MUST BE GIVEN IN A[(J - 1) * J // 2 + I] FOR 1 <= I <= J <= N); EXIT: THE CHOLESKY DECOMPOSITION OF THE MATRIX IS DELIVERED COLUMNWISE IN A. N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:3]; ENTRY: AUX[2]: A RELATIVE TOLERANCE USED TO CONTROL THE CALCULATION OF THE DIAGONAL ELEMENTS; NORMAL EXIT: AUX[3]:= N; ABNORMAL EXIT: IF THE DECOMPOSITION CANNOT BE CARRIED OUT BECAUSE THE MATRIX IS (NUMERICALLY) NOT POSITIVE DEFINITE, AUX[3]:= K - 1, WHERE K IS THE LAST STAGE NUMBER. PROCEDURES USED: VECVEC = CP34010. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: CHLDEC1 PERFORMS THE CHOLESKY DECOMPOSITION OF A SYMMETRIC POSITIVE DEFINITE MATRIX, WHOSE UPPER TRIANGLE IS STORED IN A ONE- DIMENSIONAL ARRAY, BY CHOLESKY'S SQUARE ROOT METHOD WITHOUT PIVOTING. SEE ALSO METHOD AND PERFORMANCE OF CHLDEC2, (THIS SECTION). EXAMPLE OF USE: SEE EXAMPLE OF USE OF CHLINV1, SECTION 3.1.1.1.1.2.4. SOURCE TEXT(S) : CODE 34310; PROCEDURE CHLDEC2(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; BEGIN INTEGER K, J; REAL R, EPSNORM; R:= 0; FOR K:= 1 STEP 1 UNTIL N DO IF A[K,K] > R THEN R:= A[K,K]; EPSNORM:= AUX[2] * R; FOR K:= 1 STEP 1 UNTIL N DO BEGIN R:= A[K,K] - TAMMAT(1, K - 1, K, K, A, A); IF R <= EPSNORM THEN BEGIN AUX[3]:= K - 1; GOTO END END; A[K,K]:= R:= SQRT(R); FOR J:= K + 1 STEP 1 UNTIL N DO A[K,J]:= (A[K,J] - TAMMAT(1, K - 1, J, K, A, A)) / R END; AUX[3]:= N; END: END CHLDEC2; EOP CODE 34311; PROCEDURE CHLDEC1(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; BEGIN INTEGER J, K, KK, KJ, LOW, UP; REAL R, EPSNORM; R:= 0; KK:= 0; FOR K:= 1 STEP 1 UNTIL N DO BEGIN KK:= KK + K; IF A[KK] > R THEN R:= A[KK] END; EPSNORM:= AUX[2] * R; KK:= 0; FOR K:= 1 STEP 1 UNTIL N DO BEGIN KK:= KK + K; LOW:= KK - K + 1; UP:= KK - 1; R:= A[KK] - VECVEC(LOW, UP, 0, A, A); IF R <= EPSNORM THEN BEGIN AUX[3]:= K - 1; GOTO END END; A[KK]:= R:= SQRT(R); KJ:= KK + K; FOR J:= K + 1 STEP 1 UNTIL N DO BEGIN A[KJ]:= (A[KJ] - VECVEC(LOW, UP, KJ - KK, A, A)) / R; KJ:= KJ + J END END; AUX[3]:= N; END: END CHLDEC1; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.2.2 (FEBRUARY 1979) PAGE 1 CONTRIBUTORS: S.P.N. VAN KAMPEN, J. KOK. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731015. BRIEF DESCRIPTION: THIS SECTION CONTAINS TWO PROCEDURES: CHLDETERM2, FOR THE CALCULATION OF THE DETERMINANT OF A SYMMETRIC POSITIVE DEFINITE MATRIX WHOSE CHOLESKY MATRIX IS GIVEN IN THE UPPER TRIANGLE OF A TWO-DIMENSIONAL ARRAY; CHLDETERM1, FOR THE CALCULATION OF THE DETERMINANT OF A SYMMETRIC POSITIVE DEFINITE MATRIX WHOSE CHOLESKY MATRIX IS GIVEN COLUMNWISE IN A ONE-DIMENSIONAL ARRAY. KEYWORDS: DETERMINANT, POSITIVE DEFINITE SYMMETRIC MATRIX, CHOLESKY DECOMPOSITION. SUBSECTION: CHLDETERM2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: REAL PROCEDURE CHLDETERM2(A, N); VALUE N; INTEGER N; ARRAY A; CODE 34312; CHLDETERM2 := THE DETERMINANT OF THE SYMMETRIC POSITIVE DEFINITE MATRIX OF WHICH THE CHOLESKY MATRIX IS STORED IN A; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY: THE UPPER-TRIANGULAR PART OF THE CHOLESKY MATRIX AS PRODUCED BY CHLDEC2 (SECTION 3.1.1.1.1.2.1) OR CHLDECSOL2 (SECTION 3.1.1.1.1.2.3) MUST BE GIVEN IN THE UPPER TRIANGLE OF A; EXIT: THE CONTENTS OF A ARE NOT CHANGED; N: ; THE ORDER OF THE MATRIX. PROCEDURES USED: NONE. REQUIRED CENTRAL MEMORY: NO EXTRA ARRAYS ARE DECLARED. RUNNING TIME: PROPORTIONAL TO N. METHOD AND PERFORMANCE: THE PROCEDURE CHLDETERM2 SHOULD BE CALLED AFTER A SUCCESSFUL CALL OF CHLDEC2 OR CHLDECSOL2, I.E. IF AUX[3] = N; CHLDETERM2 SHOULD NOT BE CALLED IF OVERFLOW IS TO BE EXPECTED. EXAMPLE OF USE: SEE EXAMPLE OF USE OF CHLDECINV2 (SECTION 3.1.1.1.1.2.4) SUBSECTION: CHLDETERM1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: REAL PROCEDURE CHLDETERM1(A, N); VALUE N; INTEGER N; ARRAY A; CODE 34313; CHLDETERM1 := THE DETERMINANT OF THE SYMMETRIC POSITIVE DEFINITE MATRIX OF WHICH THE CHOLESKY MATRIX IS STORED IN A; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1 : (N + 1) * N // 2]; ENTRY: THE UPPER-TRIANGULAR PART OF THE CHOLESKY MATRIX AS PRODUCED BY CHLDEC1 (SECTION 3.1.1.1.1.2.1) OR CHLDECSOL1 (SECTION 3.1.1.1.1.2.3) MUST BE GIVEN COLUMNWISE IN ARRAY A; EXIT: THE CONTENTS OF A ARE NOT CHANGED; N: ; THE ORDER OF THE MATRIX. PROCEDURES USED: NONE. REQUIRED CENTRAL MEMORY: NO EXTRA ARRAYS ARE DECLARED. RUNNING TIME: PROPORTIONAL TO N. METHOD AND PERFORMANCE: THE PROCEDURE CHLDETERM1 SHOULD BE CALLED AFTER A SUCCESSFUL CALL OF CHLDEC1 OR CHLDECSOL1, I.E. IF AUX[3] = N; CHLDETERM1 SHOULD NOT BE CALLED IF OVERFLOW IS TO BE EXPECTED. EXAMPLE OF USE: SEE EXAMPLE OF USE OF CHLDECINV1, SECTION 3.1.1.1.1.2.4. SOURCE TEXT(S) : CODE 34312; REAL PROCEDURE CHLDETERM2(A, N); VALUE N; INTEGER N; ARRAY A; BEGIN INTEGER K; REAL D; D:= 1; FOR K:= 1 STEP 1 UNTIL N DO D:= A[K,K] * D; CHLDETERM2:= D * D END CHLDETERM2; EOP CODE 34313; REAL PROCEDURE CHLDETERM1(A, N); VALUE N; INTEGER N; ARRAY A; BEGIN INTEGER K, KK; REAL D; D:= 1; KK:= 0; FOR K:= 1 STEP 1 UNTIL N DO BEGIN KK:= KK + K; D:= A[KK] * D END; CHLDETERM1:= D * D END CHLDETERM1; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.2.3 (MAY 1974) AUTHOR: T.J. DEKKER. CONTRIBUTORS: S.P.N. VAN KAMPEN, J. KOK. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731015. BRIEF DESCRIPTION: THIS SECTION CONTAINS FOUR PROCEDURES: A) CHLSOL2, FOR THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS IF THE COEFFICIENT MATRIX HAS BEEN DECOMPOSED BY A CALL OF THE PROCEDURE CHLDEC2, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL2; B) CHLSOL1, FOR THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS IF THE COEFFICIENT MATRIX HAS BEEN DECOMPOSED BY A CALL OF THE PROCEDURE CHLDEC1, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL1; C) CHLDECSOL2, FOR THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS BY CHOLESKY'S SQUARE ROOT METHOD; THE COEFFICIENT MATRIX HAS TO BE SYMMETRIC POSITIVE DEFINITE AND MUST BE GIVEN IN THE UPPER TRIANGLE OF A TWO-DIMENSIONAL ARRAY; D) CHLDECSOL1, FOR THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS BY CHOLESKY'S SQUARE ROOT METHOD; THE COEFFICIENT MATRIX HAS TO BE SYMMETRIC POSITIVE DEFINITE AND MUST BE GIVEN COLUMNWISE IN A ONE-DIMENSIONAL ARRAY. KEYWORDS: LINEAR EQUATIONS, POSITIVE DEFINITE SYMMETRIC MATRIX, CHOLESKY DECOMPOSITION. SUBSECTION: CHLSOL2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLSOL2(A, N, B); VALUE N; INTEGER N; ARRAY A, B; CODE 34390; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY: THE UPPER-TRIANGULAR PART OF THE CHOLESKY MATRIX AS PRODUCED BY CHLDEC2, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL2 (THIS SECTION), MUST BE GIVEN IN THE UPPER TRIANGLE OF A; EXIT: THE CONTENTS OF A ARE NOT CHANGED; N: ; THE ORDER OF THE MATRIX; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT HAND SIDE OF THE SYSTEM OF LINEAR EQUATIONS; EXIT: THE SOLUTION OF THE SYSTEM. PROCEDURES USED: MATVEC = CP34011, TAMVEC = CP34012. RUNNING TIME: ROUGHLY PROPORTIONAL TO N SQUARED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE PROCEDURE CHLSOL2 CALCULATES THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS, PROVIDED THAT THE COEFFICIENT MATRIX HAS BEEN DECOMPOSED BY A SUCCESSFUL CALL OF CHLDEC2 OR CHLDECSOL2; THE SOLUTION IS OBTAINED BY CARRYING OUT THE FORWARD AND BACK SUBSTITUTION WITH THE CHOLESKY MATRIX AND THE RIGHT HAND SIDE. THE RIGHT HAND SIDE IS OVERWRITTEN BY THE SOLUTION BUT THE ELEMENTS OF THE CHOLESKY MATRIX ARE NOT CHANGED, THUS SEVERAL SYSTEMS OF LINEAR EQUATIONS WITH THE SAME COEFFICIENT MATRIX BUT DIFFERENT RIGHT HAND SIDES CAN BE SOLVED BY SUCCESSIVE CALLS OF CHLSOL2. SEE ALSO REF [1]. REFERENCES: [1]. T.J. DEKKER. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1. MC TRACT 22, 1968, MATH. CENTR., AMSTERDAM. EXAMPLE OF USE: SEE EXAMPLE OF USE OF CHLINV2, SECTION 3.1.1.1.1.2.4. SUBSECTION: CHLSOL1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLSOL1(A, N, B); VALUE N; INTEGER N; ARRAY A, B; CODE 34391; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1 : (N + 1) * N // 2]; ENTRY: THE UPPER-TRIANGULAR PART OF THE CHOLESKY MATRIX AS PRODUCED BY CHLDEC1, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL1 (THIS SECTION), MUST BE GIVEN COLUMNWISE IN ARRAY A; EXIT: THE CONTENTS OF A ARE NOT CHANGED; N: ; THE ORDER OF THE MATRIX; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT HAND SIDE OF THE SYSTEM OF LINEAR EQUATIONS; EXIT: THE SOLUTION OF THE SYSTEM. PROCEDURES USED: VECVEC = CP34010, SEQVEC = CP34016. RUNNING TIME: ROUGHLY PROPORTIONAL TO N SQUARED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE PROCEDURE CHLSOL1 CALCULATES THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS, PROVIDED THAT THE COEFFICIENT MATRIX HAS BEEN DECOMPOSED BY A SUCCESSFUL CALL OF CHLDEC1 OR CHLDECSOL1; SEVERAL SYSTEMS WITH THE SAME COEFFICIENT MATRIX BUT DIFFERENT RIGHT HAND SIDES CAN BE SOLVED BY SUCCESSIVE CALLS OF CHLSOL1. SEE ALSO METHOD AND PERFORMANCE OF CHLSOL2 (THIS SECTION). EXAMPLE OF USE: SEE EXAMPLE OF USE OF CHLINV1, SECTION 3.1.1.1.1.2.4. SUBSECTION: CHLDECSOL2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLDECSOL2(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; CODE 34392; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY: THE UPPER TRIANGLE OF THE POSITIVE DEFINITE MATRIX MUST BE GIVEN IN THE UPPER-TRIANGULAR PART OF A (THE ELEMENTS A[I,J], I <= J); EXIT: THE CHOLESKY DECOMPOSITION OF THE MATRIX IS DELIVERED IN THE UPPER TRIANGLE OF A; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:3]; ENTRY: AUX[2]: A RELATIVE TOLERANCE USED TO CONTROL THE CALCULATION OF THE DIAGONAL ELEMENTS; (SEE METHOD AND PERFORMANCE OF CHLDEC2, SECTION 3.1.1.1.1.2.1); NORMAL EXIT: AUX[3]:= N; ABNORMAL EXIT: IF THE DECOMPOSITION CANNOT BE CARRIED OUT BECAUSE THE MATRIX IS (NUMERICALLY) NOT POSITIVE DEFINITE, AUX[3]:= K - 1, WHERE K IS THE LAST STAGE NUMBER. B: ; ARRAY B[1:N]; ENTRY: THE RIGHT HAND SIDE OF THE SYSTEM OF LINEAR EQUATIONS; EXIT: THE SOLUTION OF THE SYSTEM. PROCEDURES USED: CHLDEC2 = CP34310, CHLSOL2 = CP34390. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE PROCEDURE CHLDECSOL2 SOLVES A SYSTEM OF LINEAR EQUATIONS WITH A SYMMETRIC POSITIVE DEFINITE COEFFICIENT MATRIX BY CALLING CHLDEC2, SECTION 3.1.1.1.1.2.1., AND, IF THIS CALL WAS SUCCESSFUL, CHLSOL2 (THIS SECTION). SEE ALSO CHLDEC2, SECTION 3.1.1.1.1.2.1. EXAMPLE OF USE: SEE EXAMPLE OF USE OF CHLDECINV2, SECTION 3.1.1.1.1.2.4. SUBSECTION: CHLDECSOL1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLDECSOL1(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; CODE 34393; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1 : (N + 1) * N // 2]; ENTRY: THE UPPER-TRIANGULAR PART OF THE POSITIVE DEFINITE SYMMETRIC MATRIX MUST BE GIVEN COLUMNWISE IN ARRAY A (THE (I,J)-TH ELEMENT OF THE MATRIX MUST BE GIVEN IN A[(J - 1) * J // 2 + I] FOR 1 <= I <= J <= N); EXIT: THE CHOLESKY DECOMPOSITION OF THE MATRIX IS DELIVERED COLUMNWISE IN A. N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:3]; ENTRY: AUX[2]: A RELATIVE TOLERANCE USED TO CONTROL THE CALCULATION OF THE DIAGONAL ELEMENTS; NORMAL EXIT: AUX[3]:= N; ABNORMAL EXIT: IF THE DECOMPOSITION CANNOT BE CARRIED OUT BECAUSE THE MATRIX IS (NUMERICALLY) NOT POSITIVE DEFINITE, AUX[3]:= K - 1, WHERE K IS THE LAST STAGE NUMBER. B: ; ARRAY B[1:N]; ENTRY: THE RIGHT HAND SIDE OF THE SYSTEM OF LINEAR EQUATIONS; EXIT: THE SOLUTION OF THE SYSTEM. PROCEDURES USED: CHLDEC1 = CP34311, CHLSOL1 = CP34391. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE PROCEDURE CHLDECSOL1 SOLVES A SYSTEM OF LINEAR EQUATIONS WITH A SYMMETRIC POSITIVE DEFINITE COEFFICIENT MATRIX BY CALLING CHLDEC1, SECTION 3.1.1.1.1.2.1., AND, IF THIS CALL WAS SUCCESSFUL, CHLSOL1 (THIS SECTION). THE UPPER TRIANGLE OF THE COEFFICIENT MATRIX MUST BE STORED COLUMN- WISE IN A ONE-DIMENSIONAL ARRAY. SEE ALSO CHLDEC1, SECTION 3.1.1.1.1.2.1. EXAMPLE OF USE: SEE EXAMPLE OF USE OF CHLDECINV1, SECTION 3.1.1.1.1.2.4. SOURCE TEXT(S) : CODE 34390; PROCEDURE CHLSOL2(A, N, B); VALUE N; INTEGER N; ARRAY A, B; BEGIN INTEGER I; FOR I:= 1 STEP 1 UNTIL N DO B[I]:= (B[I] - TAMVEC(1, I - 1, I, A, B)) / A[I,I]; FOR I:= N STEP - 1 UNTIL 1 DO B[I]:= (B[I] - MATVEC(I + 1, N, I, A, B)) / A[I,I] END CHLSOL2; EOP CODE 34391; PROCEDURE CHLSOL1(A, N, B); VALUE N; INTEGER N; ARRAY A, B; BEGIN INTEGER I, II; II:= 0; FOR I:= 1 STEP 1 UNTIL N DO BEGIN II:= II + I; B[I]:= (B[I] - VECVEC(1, I - 1, II - I, B, A)) / A[II] END; FOR I:= N STEP - 1 UNTIL 1 DO BEGIN B[I]:= (B[I] - SEQVEC(I + 1, N, II + I, 0, A, B)) / A[II]; II:= II - I END END CHLSOL1; EOP CODE 34392; PROCEDURE CHLDECSOL2(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; BEGIN CHLDEC2(A, N, AUX); IF AUX[3] = N THEN CHLSOL2(A, N, B) END CHLDECSOL2; EOP CODE 34393; PROCEDURE CHLDECSOL1(A, N, AUX, B); VALUE N; INTEGER N; ARRAY A, AUX, B; BEGIN CHLDEC1(A, N, AUX); IF AUX[3] = N THEN CHLSOL1(A, N, B) END CHLDECSOL1; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.2.4 (MAY 1974) AUTHOR : T.J. DEKKER. CONTRIBUTORS: S.P.N. VAN KAMPEN, J. KOK. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731015. BRIEF DESCRIPTION: THIS SECTION CONTAINS FOUR PROCEDURES: A) CHLINV2, FOR THE INVERSION OF A SYMMETRIC POSITIVE DEFINITE MATRIX, IF THE MATRIX HAS BEEN DECOMPOSED BY A CALL OF THE PROCEDURE CHLDEC2, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL2, SECTION 3.1.1.1.1.2.3.; B) CHLINV1, FOR THE INVERSION OF A SYMMETRIC POSITIVE DEFINITE MATRIX, IF THE MATRIX HAS BEEN DECOMPOSED BY A CALL OF THE PROCEDURE CHLDEC1, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL1, SECTION 3.1.1.1.1.2.3.; C) CHLDECINV2, FOR THE INVERSION OF A MATRIX BY CHOLESKY'S SQUARE ROOT METHOD; THE COEFFICIENT MATRIX HAS TO BE SYMMETRIC POSITIVE DEFINITE AND MUST BE GIVEN IN THE UPPER TRIANGLE OF A TWO-DIMENSIONAL ARRAY; D) CHLDECINV1, FOR THE INVERSION OF A MATRIX BY CHOLESKY'S SQUARE ROOT METHOD; THE COEFFICIENT MATRIX HAS TO BE SYMMETRIC POSITIVE DEFINITE AND MUST BE GIVEN COLUMNWISE IN A ONE-DIMENSIONAL ARRAY. KEYWORDS: MATRIX INVERSION, POSITIVE DEFINITE SYMMETRIC MATRIX, CHOLESKY DECOMPOSITION. SUBSECTION: CHLINV2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLINV2(A, N); VALUE N; INTEGER N; ARRAY A; CODE 34400; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY: THE UPPER-TRIANGULAR PART OF THE CHOLESKY MATRIX AS PRODUCED BY CHLDEC2, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL2, SECTION 3.1.1.1.1.2.3., MUST BE GIVEN IN THE UPPER TRIANGLE OF A; EXIT: THE UPPER-TRIANGULAR PART OF THE INVERSE MATRIX IS DELIVERED IN THE UPPER TRIANGLE OF A; N: ; THE ORDER OF THE MATRIX. PROCEDURES USED: MATVEC = CP34011, TAMVEC = CP34012, DUPVECROW = CP31031. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: N. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE PROCEDURE CHLINV2 CALCULATES THE INVERSE OF A MATRIX, PROVIDED THAT THE MATRIX HAS BEEN DECOMPOSED BY A SUCCESSFUL CALL OF CHLDEC2 OR CHLDECSOL2; THE INVERSE, X, OF U'U, WHERE U IS THE CHOLESKY MATRIX, IS OBTAINED FROM THE CONDITIONS THAT X BE SYMMETRIC AND UX BE A LOWER-TRIANGULAR MATRIX WHOSE MAIN DIAGONAL ELEMENTS ARE THE RECIPROCALS OF THE DIAGONAL ELEMENTS OF U. HEREWITH THE UPPER- TRIANGULAR ELEMENTS OF X ARE CALCULATED BY BACK SUBSTITUTION. THE UPPER TRIANGLE OF THE INVERSE MATRIX IS DELIVERED IN THE UPPER TRIANGLE OF THE GIVEN ARRAY. SEE ALSO REF[1]. REFERENCES: [1]. T.J. DEKKER. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1. MC TRACT 22, 1968, MATH. CENTR., AMSTERDAM. EXAMPLE OF USE: THE SYMMETRIC POSITIVE DEFINITE COEFFICIENT MATRIX (THE PASCAL MATRIX OF ORDER 4) OF THE SYSTEM OF EQUATIONS X1 + X2 + X3 + X4 = 2 X1 + 2 * X2 + 3 * X3 + 4 * X4 = 4 X1 + 3 * X2 + 6 * X3 + 10 * X4 = 8 X1 + 4 * X2 + 10 * X3 + 20 * X4 = 16 IS STORED IN THE TWO-DIMENSIONAL ARRAY PASCAL2. THE INVERSE OF THE COEFFICIENT MATRIX AND THE SOLUTION OF THE LINEAR SYSTEM ARE CALCULATED BY THE FOLLOWING PROGRAM: BEGIN COMMENT TEST CHLDEC2, CHLSOL2 AND CHLINV2; INTEGER I, J; ARRAY PASCAL2[1:4,1:4], B[1:4], AUX[2:3]; FOR J:= 1 STEP 1 UNTIL 4 DO BEGIN PASCAL2[1,J]:= 1; FOR I:= 2 STEP 1 UNTIL J DO PASCAL2[I,J]:= IF I = J THEN PASCAL2[I-1,J] * 2 ELSE PASCAL2[I,J-1] + PASCAL2[I-1,J]; B[J]:= 2 ** J END; AUX[2]:= -11; CHLDEC2(PASCAL2, 4, AUX); IF AUX[3] = 4 THEN BEGIN CHLSOL2(PASCAL2, 4, B); CHLINV2(PASCAL2, 4) END ELSE OUTPUT(61, ((MATRIX NOT POSITIVE DEFINITE), /)); OUTPUT(61, (4B)); OUTPUT(61, ((SOLUTION WITH CHLDEC2 AND CHLSOL2:), /)); FOR I:= 1 STEP 1 UNTIL 4 DO OUTPUT(61, (4B+D.5D), B[I]); OUTPUT(61, (//, 4B)); OUTPUT(61, ((INVERSE MATRIX WITH CHLINV2:), /, 4B)); FOR I:= 1 STEP 1 UNTIL 4 DO BEGIN FOR J:= 1 STEP 1 UNTIL 4 DO IF J < I THEN OUTPUT(61, (12B)) ELSE OUTPUT(61, (+ZD.5D3B), PASCAL2[I,J]); OUTPUT(61, (/, 4B)) END END THIS PROGRAM DELIVERS: SOLUTION WITH CHLDEC2 AND CHLSOL2: +0.00000 +4.00000 -4.00000 +2.00000 INVERSE MATRIX WITH CHLINV2: +4.00000 -6.00000 +4.00000 -1.00000 +14.00000 -11.00000 +3.00000 +10.00000 -3.00000 +1.00000 SUBSECTION: CHLINV1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLINV1(A, N); VALUE N; INTEGER N; ARRAY A; CODE 34401; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:(N + 1) * N // 2]; ENTRY: THE UPPER-TRIANGULAR PART OF THE CHOLESKY MATRIX AS PRODUCED BY CHLDEC1, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL1, SECTION 3.1.1.1.1.2.3., MUST BE GIVEN COLUMNWISE IN ARRAY A; EXIT: THE UPPER-TRIANGULAR PART OF THE INVERSE MATRIX IS DELIVERED COLUMNWISE IN ARRAY A; N: ; THE ORDER OF THE MATRIX. PROCEDURES USED: SEQVEC = CP34016, SYMMATVEC = CP34018. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: N. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE PROCEDURE CHLINV1 CALCULATES THE INVERSE OF A MATRIX, PROVIDED THAT THE MATRIX HAS BEEN DECOMPOSED BY A SUCCESSFUL CALL OF CHLDEC1 OR CHLDECSOL1; THE UPPER TRIANGLE OF THE INVERSE MATRIX IS DELIVERED COLUMNWISE IN THE ONE-DIMENSIONAL ARRAY. SEE ALSO METHOD AND PERFORMANCE OF CHLINV2 (THIS SECTION). EXAMPLE OF USE: THE SYMMETRIC POSITIVE DEFINITE COEFFICIENT MATRIX (THE PASCAL MATRIX OF ORDER 4) OF THE SYSTEM OF EQUATIONS X1 + X2 + X3 + X4 = 2 X1 + 2 * X2 + 3 * X3 + 4 * X4 = 4 X1 + 3 * X2 + 6 * X3 + 10 * X4 = 8 X1 + 4 * X2 + 10 * X3 + 20 * X4 = 16 IS STORED IN THE ONE-DIMENSIONAL ARRAY PASCAL1. THE INVERSE OF THE COEFFICIENT MATRIX AND THE SOLUTION OF THE LINEAR SYSTEM ARE CALCULATED BY THE FOLLOWING PROGRAM: BEGIN COMMENT TEST CHLDEC1, CHLSOL1 AND CHLINV1; INTEGER I, J, JJ; ARRAY PASCAL1[1:(4 + 1) * 4 // 2], B[1:4], AUX[2:3]; JJ:= 1; FOR J:= 1 STEP 1 UNTIL 4 DO BEGIN PASCAL1[JJ]:= 1; FOR I:= 2 STEP 1 UNTIL J DO PASCAL1[JJ + I - 1]:= IF I = J THEN PASCAL1[JJ + I - 2] * 2 ELSE PASCAL1[JJ + I - 2] + PASCAL1[JJ + I - J]; B[J]:= 2 ** J; JJ:= JJ + J END; AUX[2]:= -11; CHLDEC1(PASCAL1, 4, AUX); IF AUX[3] = 4 THEN BEGIN CHLSOL1(PASCAL1, 4, B); CHLINV1(PASCAL1, 4) END ELSE OUTPUT(61, ((MATRIX NOT POSITIVE DEFINITE), /)); OUTPUT(61,(4B)); OUTPUT(61, ((SOLUTION WITH CHLDEC1 AND CHLSOL1:), /)); FOR I:= 1 STEP 1 UNTIL 4 DO OUTPUT(61, (4B+D.5D), B[I]); OUTPUT(61, (2/, 4B)); OUTPUT(61, ((INVERSE MATRIX WITH CHLINV1:), /, 4B)); FOR I:= 1 STEP 1 UNTIL 4 DO BEGIN FOR J:= 1 STEP 1 UNTIL 4 DO IF J < I THEN OUTPUT(61, (12B)) ELSE OUTPUT(61, (+ZD.5D3B), PASCAL1[(J - 1) * J // 2 + I]); OUTPUT(61, (/, 4B)) END END THIS PROGRAM DELIVERS: SOLUTION WITH CHLDEC1 AND CHLSOL1: +0.00000 +4.00000 -4.00000 +2.00000 INVERSE MATRIX WITH CHLINV1: +4.00000 -6.00000 +4.00000 -1.00000 +14.00000 -11.00000 +3.00000 +10.00000 -3.00000 +1.00000 SUBSECTION: CHLDECINV2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLDECINV2(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; CODE 34402; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:N,1:N]; ENTRY: THE UPPER TRIANGLE OF THE POSITIVE DEFINITE MATRIX MUST BE GIVEN IN THE UPPER TRIANGLE OF A (THE ELEMENTS A[I,J], I <= J); EXIT: THE UPPER-TRIANGULAR PART OF THE INVERSE MATRIX IS DELIVERED IN THE UPPER TRIANGLE OF A. N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:3]; ENTRY: AUX[2]: A RELATIVE TOLERANCE USED TO CONTROL THE CALCULATION OF THE DIAGONAL ELEMENTS; NORMAL EXIT: AUX[3]:= N; ABNORMAL EXIT: IF THE DECOMPOSITION CANNOT BE CARRIED OUT BECAUSE THE MATRIX IS (NUMERICALLY) NOT POSITIVE DEFINITE, AUX[3]:= K - 1, WHERE K IS THE LAST STAGE NUMBER. PROCEDURES USED: CHLDEC2 = CP34310, CHLINV2 = CP34400. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE PROCEDURE CHLDECINV2 CALCULATES THE INVERSE OF A SYMMETRIC POSITIVE DEFINITE MATRIX BY CALLING CHLDEC2 AND, IF THIS CALL WAS SUCCESSFUL, CHLINV2. THE UPPER TRIANGLE OF THE INVERSE MATRIX IS DELIVERED IN THE UPPER TRIANGLE OF THE GIVEN ARRAY. SEE ALSO METHOD AND PERFORMANCE OF CHLINV2 (THIS SECTION) AND CHLDEC2, SECTION 3.1.1.1.1.2.1. EXAMPLE OF USE: THE SYMMETRIC POSITIVE DEFINITE COEFFICIENT MATRIX (THE PASCAL MATRIX OF ORDER 4) OF THE SYSTEM OF EQUATIONS X1 + X2 + X3 + X4 = 2 X1 + 2 * X2 + 3 * X3 + 4 * X4 = 4 X1 + 3 * X2 + 6 * X3 + 10 * X4 = 8 X1 + 4 * X2 + 10 * X3 + 20 * X4 = 16 IS STORED IN THE TWO-DIMENSIONAL ARRAY PASCAL2. THE DETERMINANT AND THE INVERSE OF THE COEFFICIENT MATRIX AND THE SOLUTION OF THE LINEAR SYSTEM ARE CALCULATED BY THE FOLLOWING PROGRAM: BEGIN COMMENT TEST CHLDECSOL2, CHLDETERM2 AND CHLDECINV2; INTEGER I, J; ARRAY PASCAL2[1:4,1:4], B[1:4], AUX[2:3]; REAL DETERMINANT; FOR J:= 1 STEP 1 UNTIL 4 DO BEGIN PASCAL2[1,J]:= 1; FOR I:= 2 STEP 1 UNTIL J DO PASCAL2[I,J]:= IF I = J THEN PASCAL2[I-1,J] * 2 ELSE PASCAL2[I,J-1] + PASCAL2[I-1,J]; B[J]:= 2 ** J END; AUX[2]:= -11; CHLDECSOL2(PASCAL2, 4, AUX, B); IF AUX[3] = 4 THEN DETERMINANT:= CHLDETERM2(PASCAL2, 4) ELSE OUTPUT(61, ((MATRIX NOT POSITIVE DEFINITE), /)); OUTPUT(61, (4B)); OUTPUT(61, ((SOLUTION WITH CHLDECSOL2:), /)); FOR I:= 1 STEP 1 UNTIL 4 DO OUTPUT(61, (4B+D.5D), B[I]); OUTPUT(61, (//, 4B, (DETERMINANT WITH CHLDETERM2: ), +D.5D, 2/, 4B), DETERMINANT); FOR J:= 1 STEP 1 UNTIL 4 DO BEGIN PASCAL2[1,J]:= 1; FOR I:= 2 STEP 1 UNTIL J DO PASCAL2[I,J]:= IF I = J THEN PASCAL2[I-1,J] * 2 ELSE PASCAL2[I,J-1] + PASCAL2[I-1,J] END; CHLDECINV2(PASCAL2, 4, AUX); OUTPUT(61, ((INVERSE MATRIX WITH CHLDECINV2:), /, 4B)); FOR I:= 1 STEP 1 UNTIL 4 DO BEGIN FOR J:= 1 STEP 1 UNTIL 4 DO IF J < I THEN OUTPUT(61, (12B)) ELSE OUTPUT(61, (+ZD.5D3B), PASCAL2[I,J]); OUTPUT(61, (/, 4B)) END END THIS PROGRAM DELIVERS: SOLUTION WITH CHLDECSOL2: +0.00000 +4.00000 -4.00000 +2.00000 DETERMINANT WITH CHLDETERM2: +1.00000 INVERSE MATRIX WITH CHLDECINV2: +4.00000 -6.00000 +4.00000 -1.00000 +14.00000 -11.00000 +3.00000 +10.00000 -3.00000 +1.00000 SUBSECTION: CHLDECINV1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE CHLDECINV1(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; CODE 34403; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAY A[1:(N + 1) * N // 2]; ENTRY: THE UPPER-TRIANGULAR PART OF THE SYMMETRIC POSITIVE DEFINITE MATRIX MUST BE GIVEN COLUMNWISE IN ARRAY A (THE (I,J)-TH ELEMENT OF THE MATRIX MUST BE GIVEN IN A[(J - 1) * J // 2 + I] FOR 1 <= I <= J <= N); EXIT: THE UPPER-TRIANGULAR PART OF THE INVERSE MATRIX IS DELIVERED COLUMNWISE IN ARRAY A; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:3]; ENTRY: AUX[2]: A RELATIVE TOLERANCE USED TO CONTROL THE CALCULATION OF THE DIAGONAL ELEMENTS; (SEE METHOD AND PERFORMANCE OF CHLDEC2, SECTION 3.1.1.1.1.2.1); NORMAL EXIT: AUX[3]:= N; ABNORMAL EXIT: IF THE DECOMPOSITION CANNOT BE CARRIED OUT BECAUSE THE MATRIX IS (NUMERICALLY) NOT POSITIVE DEFINITE, AUX[3]:= K - 1, WHERE K IS THE LAST STAGE NUMBER. PROCEDURES USED: CHLDEC1 = CP34311, CHLINV1 = CP34401. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE PROCEDURE CHLDECINV1 CALCULATES THE INVERSE OF A SYMMETRIC POSITIVE DEFINITE MATRIX BY CALLING CHLDEC1 AND, IF THIS CALL WAS SUCCESSFUL, CHLINV1. THE UPPER TRIANGLE OF THE INVERSE MATRIX IS DELIVERED COLUMNWISE IN THE GIVEN ONE-DIMENSIONAL ARRAY. SEE ALSO METHOD AND PERFORMANCE OF CHLINV2, (THIS SECTION) AND CHLDEC1, SECTION 3.1.1.1.1.2.1. EXAMPLE OF USE: THE SYMMETRIC POSITIVE DEFINITE COEFFICIENT MATRIX (THE PASCAL MATRIX OF ORDER 4) OF THE SYSTEM OF EQUATIONS X1 + X2 + X3 + X4 = 2 X1 + 2 * X2 + 3 * X3 + 4 * X4 = 4 X1 + 3 * X2 + 6 * X3 + 10 * X4 = 8 X1 + 4 * X2 + 10 * X3 + 20 * X4 = 16 IS STORED IN THE ONE-DIMENSIONAL ARRAY PASCAL1. THE DETERMINANT AND THE INVERSE OF THE COEFFICIENT MATRIX AND THE SOLUTION OF THE LINEAR SYSTEM ARE CALCULATED BY THE FOLLOWING PROGRAM: BEGIN COMMENT TEST CHLDECSOL1, CHLDETERM1 AND CHLDECINV1; INTEGER I, J, JJ; ARRAY PASCAL1[1:(4 + 1) * 4 // 2], B[1:4], AUX[2:3]; REAL DETERMINANT; JJ:= 1; FOR J:= 1 STEP 1 UNTIL 4 DO BEGIN PASCAL1[JJ]:= 1; FOR I:= 2 STEP 1 UNTIL J DO PASCAL1[JJ + I - 1]:= IF I = J THEN PASCAL1[JJ + I - 2] * 2 ELSE PASCAL1[JJ + I - 2] + PASCAL1[JJ + I - J]; B[J]:= 2 ** J; JJ:= JJ + J END; AUX[2]:= -11; CHLDECSOL1(PASCAL1, 4, AUX, B); IF AUX[3] = 4 THEN DETERMINANT:= CHLDETERM1(PASCAL1, 4) ELSE OUTPUT(61, ((MATRIX NOT POSITIVE DEFINITE), /)); OUTPUT(61, (4B)); OUTPUT(61, ((SOLUTION WITH CHLDECSOL1:), /)); FOR I:= 1 STEP 1 UNTIL 4 DO OUTPUT(61, (4B+D.5D), B[I]); OUTPUT(61, (//, 4B, (DETERMINANT WITH CHLDETERM1: ), +D.5D, 2/, 4B), DETERMINANT); JJ:= 1; FOR J:= 1 STEP 1 UNTIL 4 DO BEGIN PASCAL1[JJ]:= 1; FOR I:= 2 STEP 1 UNTIL J DO PASCAL1[JJ + I - 1]:= IF I = J THEN PASCAL1[JJ + I - 2] * 2 ELSE PASCAL1[JJ + I - 2] + PASCAL1[JJ + I - J]; JJ:= JJ + J END; CHLDECINV1(PASCAL1, 4, AUX); OUTPUT(61, ((INVERSE MATRIX WITH CHLDECINV1:), /, 4B)); FOR I:= 1 STEP 1 UNTIL 4 DO BEGIN FOR J:= 1 STEP 1 UNTIL 4 DO IF J < I THEN OUTPUT(61, (12B)) ELSE OUTPUT(61, (+ZD.5D3B), PASCAL1[(J - 1) * J // 2 + I]); OUTPUT(61, (/, 4B)) END END THIS PROGRAM DELIVERS: SOLUTION WITH CHLDECSOL1: +0.00000 +4.00000 -4.00000 +2.00000 DETERMINANT WITH CHLDETERM1: +1.00000 INVERSE MATRIX WITH CHLDECINV1: +4.00000 -6.00000 +4.00000 -1.00000 +14.00000 -11.00000 +3.00000 +10.00000 -3.00000 +1.00000 0SOURCE TEXT(S) : CODE 34400; PROCEDURE CHLINV2(A, N); VALUE N; INTEGER N; ARRAY A; BEGIN REAL R; INTEGER I, J, I1; ARRAY U[1:N]; FOR I:= N STEP - 1 UNTIL 1 DO BEGIN R:= 1 / A[I,I]; I1:= I + 1; DUPVECROW(I1, N, I, U, A); FOR J:= N STEP - 1 UNTIL I1 DO A[I,J]:= - (TAMVEC(I1, J, J, A, U) + MATVEC(J + 1, N, J, A, U)) * R; A[I,I]:= (R - MATVEC(I1, N, I, A, U)) * R END END CHLINV2; EOP CODE 34401; PROCEDURE CHLINV1(A, N); VALUE N; INTEGER N; ARRAY A; BEGIN INTEGER I, II, I1, J, IJ; REAL R; ARRAY U[1:N]; II:= (N + 1) * N // 2; FOR I:= N STEP - 1 UNTIL 1 DO BEGIN R:= 1 / A[II]; I1:= I + 1; IJ:= II + I; FOR J:= I1 STEP 1 UNTIL N DO BEGIN U[J]:= A[IJ]; IJ:= IJ + J END; FOR J:= N STEP - 1 UNTIL I1 DO BEGIN IJ:= IJ - J; A[IJ]:= -SYMMATVEC(I1, N, J, A, U) * R END; A[II]:= (R - SEQVEC(I1, N, II + I, 0, A, U)) * R; II:= II - I END END CHLINV1 EOP CODE 34402; PROCEDURE CHLDECINV2(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; BEGIN CHLDEC2(A, N, AUX); IF AUX[3] = N THEN CHLINV2(A, N) END CHLDECINV2; EOP CODE 34403; PROCEDURE CHLDECINV1(A, N, AUX); VALUE N; INTEGER N; ARRAY A, AUX; BEGIN CHLDEC1(A, N, AUX); IF AUX[3] = N THEN CHLINV1(A, N) END CHLDECINV1; EOP ########################################################################## ########################################################################## 1SECTION : 3.1.1.1.1.3.1 ( DECEMBER 1978 ) AUTHORS : J.R.BUNCH,L,KAUFMAN,B.N.PARLETT. CONTRIBUTER : C.H.CONVENT. INSTITUTE : UNIVERSITY OF AMSTERDAM RECEIVED : 770712. BRIEF DESCRIPTION : DECSYM2 CALCULATES THE LDL' DECOMPOSITION OF A SYMMETRIC MATRIX. THE MATRIX MAY BE INDEFINITE AND/OR SINGULAR; KEYWORDS : GENERAL SYMMETRIC MATRIX, LDL' DECOMPOSITION, BLOCK DIAGONAL PIVOTING; CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE DECSYM2(A,N,TOL,AUX,P,DETAUX); VALUE N;INTEGER N;REAL TOL; ARRAY A,DETAUX;INTEGER ARRAY AUX,P; CODE 34291; THE MEANING OF THE FORMAL PARAMETERS IS : A : ; ARRAY A[1:N,1:N]; ENTRY : THE SYMMETRIC COEFFICIENT MATRIX; EXIT : THE ELEMENTS OF THE LDL' DECOMPOSITION OF A ARE STORED IN THE UPPER TRIANGULAR PART OF A. HERE D IS A BLOCK DIAGONAL MATRIX WITH BLOCKS OF ORDER 1 OR 2. FOR A BLOCK OF ORDER 2 WE ALWAYS HAVE D[I,I+1]^=0 AND L[I+1,I]=0,SO THAT D AND L' FIT IN THE UPPER TRIANGULAR PART OF A. THE STRICTLY LOWER TRIANGULAR PART OF A IS LEFT UNDISTURBED. N : ; THE ORDER OF THE MATRIX; TOL : ; A RELATIVE TOLERANCE, USED TO CONTROL THE CALCULATION OF THE BLOCK DIAGONAL ELEMENTS; AUX : ; INTEGER ARRAY AUX[2:5]; EXIT : AUX[2] : IF THE MATRIX IS SYMMETRIC THEN 1, OTHER- WISE 0;IN THE LAST CASE NO DECOMPOSITION IS PERFORMED; AUX[3] : IF THE MATRIX IS SYMMETRIC THEN THE NUMBER OF ITS POSITIVE EIGENVALUES, OTHERWISE 0. IF AUX[3]=N THEN THE MATRIX IS POSITIVE DEFINITE; AUX[4] : IF THE MATRIX IS SYMMETRIC THEN THE NUMBER OF ITS NEGATIVE EIGENVALUES, OTHERWISE 0. IF AUX[4]=N THEN THE MATRIX IS NEGATIVE DEFINITE; AUX[5] : IF THE MATRIX IS SYMMETRIC THEN THE NUMBER OF ITS ZERO EIGENVALUES, OTHERWISE N; SO, IF AUX[5]=0 THEN THE MATRIX IS SYMMETRIC AND NON-SINGULAR; P : ; INTEGER ARRAY P[1:N]; EXIT : A VECTOR RECORDING 1) THE INTERCHANGES PERFORMED ON A DURING THE COMPUTATION OF THE DECOMPOSITION AND 2) THE BLOCK STRUCTURE OF D. IF P[I]>0 AND P[I+1]=0 A 2*2 BLOCK HAS BEEN FOUND I.E. D[I,I+1]^=0 AND L[I+1,I]=0; DETAUX : ; ARRAY DETAUX[1:N]; EXIT : IF P[I]>0 AND P[I+1]>0 THEN DETAUX[I] EQUALS THE EXIT-VALUE OF A[I,I]. IF P[I]>0 AND P[I+1]=0 THEN DETAUX[I]=1 AND DETAUX[I+1] EQUALS THE VALUE OF THE DETERMINANT OF THE CORRESPONDING 2*2 DIAGONAL BLOCK AS DETERMINED BY DECSYM2; PROCEDURES USED : ELMROW=CP34030. ICHROW=CP34032. ICHROWCOL=CP34033. RUNNING TIME : ROUGHLY PROPORTIONAL TO N**3. METHOD AND PERFORMANCE : THE PROCEDURE DECSYM2 COMPUTES THE LDL' DECOMPOSITION OF A SYMMETRIC MATRIX,ACCORDING TO A METHOD DUE TO BUNCH,KAUFMAN AND PARLETT (SEE [1],[2]). IT USES BLOCK DIAGONAL PIVOTING. THE BLOCK DIAGONAL MATRIX D IS DELIVERED IN THE BLOCK DIAGONAL OF A. IF P[I]>0 AND P[I+1]=0 A 2*2 BLOCK HAS BEEN FOUND AND FURTHERMORE : L[I+1,I]=0 WHEN D[I,I+1]^=0. THE STRICTLY UPPER TRIANGULAR PART OF L' IS DELIVERED IN THE STRICTLY UPPER TRIANGULAR PART OF A. FOR THE INERTIA PROBLEM IT IS IMPORTANT THAT DECSYM2 CAN ACCEPT SINGULAR MATRICES. NOTE, HOWEVER, THAT IN ORDER TO FIND THE NUMBER OF ZERO EIGENVALUES OF SINGULAR MATRICES, THE SINGULAR VALUE DECOMPOSITION MIGHT BE PREFERRED. BEFORE THE DECOMPOSITION IS PERFORMED A CHECK IS MADE TO SEE WHETHER THE MATRIX IS SYMMETRIC. IF THE MATRIX IS ASYMMETRIC THEN NO DECOMPOSITION IS PERFORMED; REFERENCES : 1) J.R.BUNCH,L.KAUFMAN. SOME STABLE METHODS FOR CALCULATING INERTIA AND SOLVING SYMMETRIC LINEAR SYSTEMS. MATHEMATICS OF COMPUTATION 31,P 163-180,1977. 2) J.R.BUNCH,L.KAUFMAN,B.N.PARLETT. DECOMPOSITION OF A SYMMETRIC MATRIX. NUMERISCHE MATHEMATIK 27,P 95-109,1976. SOURCE TEXT : CODE 34291; PROCEDURE DECSYM2(A,N,TOL,AUX,P,DETAUX); VALUE N;INTEGER N;REAL TOL; ARRAY A,DETAUX;INTEGER ARRAY P,AUX; BEGIN INTEGER I,J,K,M,IP1,IP2,DUMMY;BOOLEAN ONEBYONE,SYM; REAL DET,S,T,ALPHA,LAMBDA,SIGMA,AII,AIP1,AIP1I; AUX[3]:=AUX[4]:=0;SYM:=TRUE;I:=0; FOR DUMMY:=0 WHILE SYM AND (ILAMBDA THEN BEGIN J:=M;LAMBDA:=ABS(A[I,M]) END; T:=ALPHA*LAMBDA;ONEBYONE:=TRUE; IF AIISIGMA THEN SIGMA:=ABS(A[M,J]); FOR M:=J+1 STEP 1 UNTIL N DO IF ABS(A[J,M])>SIGMA THEN SIGMA:=ABS(A[J,M]); IF SIGMA*AIIIP1 THEN BEGIN ICHROW(J+1,N,IP1,J,A);ICHROWCOL(IP2,J-1,IP1,J,A); T:=A[I,I];A[I,I]:=A[J,J];A[J,J]:=T; T:=A[I,J];A[I,J]:=A[I,IP1];A[I,IP1]:=T END; DET:=A[I,I]*A[IP1,IP1]-A[I,IP1]**2;AIP1I:=A[I,IP1]/DET; AII:=A[I,I]/DET;AIP1:=A[IP1,IP1]/DET;P[I]:=J;P[IP1]:=0; DETAUX[I]:=1;DETAUX[IP1]:=DET; FOR J:=IP2 STEP 1 UNTIL N DO BEGIN S:=AIP1I*A[IP1,J]-AIP1*A[I,J]; T:=AIP1I*A[I,J]-AII*A[IP1,J];ELMROW(J,N,J,I,A,A,S); ELMROW(J,N,J,IP1,A,A,T);A[I,J]:=S;A[IP1,J]:=T END; AUX[3]:=AUX[3]+1;AUX[4]:=AUX[4]+1;I:=IP2; ONEBYONE:=FALSE END END END; IF ONEBYONE THEN BEGIN IF TOL0 THEN AUX[3]:=AUX[3]+1 ELSE AUX[4]:=AUX[4]+1; FOR J:=IP1 STEP 1 UNTIL N DO BEGIN S:=-A[I,J]/AII;ELMROW(J,N,J,I,A,A,S);A[I,J]:=S END END;I:=IP1 END END WHILE I; IF I=N THEN BEGIN IF TOL0 THEN AUX[3]:=AUX[3]+1 ELSE AUX[4]:=AUX[4]+1 END;DETAUX[N]:=A[N,N] END; ENDDEC: AUX[5]:=N-AUX[3]-AUX[4] END DECSYM2; EOP ########################################################################## ########################################################################## 1SECTION : 3.1.1.1.1.3.2 ( DECEMBER 1978 ) AUTHORS : J.R.BUNCH,L.KAUFMAN,B.N.PARLETT. CONTRIBUTOR : C.H.CONVENT. INSTITUTE : UNIVERSITY OF AMSTERDAM. RECEIVED : 770712. BRIEF DESCRIPTION : DETERMSYM2 CALCULATES THE DETERMINANT OF A SYMMETRIC MATRIX. THE LDL' DECOMPOSITION OF THE MATRIX, AS PRODUCED BY DECSYM2, SHOULD BE AVAILABLE. KEYWORDS : GENERAL SYMMETRIC MATRIX, LDL' DECOMPOSITION, BLOCK DIAGONAL PIVOTING; CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : REAL PROCEDURE DETERMSYM2(DETAUX,N,AUX); VALUE N;INTEGER N; ARRAY DETAUX;INTEGER ARRAY AUX; CODE 34294; DETERMSYM2 : DELIVERS THE CALCULATED VALUE OF THE DETERMINANT OF THE MATRIX; THE MEANING OF THE FORMAL PARAMETERS IS : DETAUX : ; ARRAY DETAUX[1:N]; ENTRY : THE ARRAY DETAUX AS PRODUCED BY DECSYM2; N : ; THE ORDER OF THE ARRAY DETAUX ( = THE ORDER OF THE MATRIX ); AUX : ; INTEGER ARRAY AUX[2:5]; ENTRY : THE ARRAY AUX AS PRODUCED BY DECSYM2; PROCEDURES USED : NONE. RUNNING TIME : PROPORTIONAL TO N; METHOD AND PERFORMANCE : FIRST OF ALL DECSYM2 SHOULD BE CALLED TO PERFORM THE LDL' DECOMPOSITION OF THE SYMMETRIC MATRIX,ACCORDING TO A METHOD DUE TO BUNCH,KAUFMAN AND PARLETT (SEE [1],[2]). IF A 1*1 BLOCK HAS BEEN COMPUTED FOR D THEN DETAUX[I] CONTAINS THE VALUE OF D[I]. IF A 2*2 BLOCK HAS BEEN COMPUTED FOR D THEN DETAUX[I]=1 AND DETAUX[I+1] CONTAIN THE VALUE OF THE DETERMINANT OF THE CORRESPONDING 2*2 BLOCK. THE COMPUTATION OF THE DETERMINANT IS DONE BY CALCULATING THE PRODUCT OF THE ELEMENTS OF DETAUX. REFERENCES : 1) J.R.BUNCH,L.KAUFMAN. SOME STABLE METHODS FOR CALCULATING INERTIA AND SOLVING SYMMETRIC LINEAR SYSTEMS. MATHEMATICS OF COMPUTATION 31,P 163-180,1977. 2) J.R.BUNCH,L.KAUFMAN,B.N.PARLETT. DECOMPOSITION OF A SYMMETRIC MATRIX. NUMERISCHE MATHEMATIK 27,P 95-109,1976. EXAMPLE OF USE : BEGIN COMMENT EXAMPLE OF USE OF THE PROCEDURE DETERMSYM2; INTEGER I,J;REAL TOL,DETERMINANT; REAL ARRAY A[1:5,1:5],DETAUX[1:5]; INTEGER ARRAY AUX[2:5],P[1:5]; A[1,1]:=A[1,2]:=-3;A[1,3]:=-18;A[1,4]:=-30;A[1,5]:=18; A[2,2]:=-1;A[2,3]:=-4;A[2,4]:=-48;A[2,5]:=8; A[3,3]:=-6;A[3,4]:=-274;A[3,5]:=6; A[4,4]:=119;A[4,5]:=19; A[5,5]:=216; FOR I:=1 STEP 1 UNTIL 5 DO FOR J:=I+1 STEP 1 UNTIL 5 DO A[J,I]:=A[I,J]; OUTPUT(61,((THE COEFFICIENT MATRIX :),/)); FOR I:=1 STEP 1 UNTIL 5 DO BEGIN FOR J:=1 STEP 1 UNTIL 5 DO OUTPUT(61,(-2ZD,4B),A[I,J]); OUTPUT(61,(/)) END; TOL:=-14; DECSYM2(A,5,TOL,AUX,P,DETAUX); IF AUX[2]=1 THEN OUTPUT(61,(/,(THE MATRIX IS SYMMETRIC))) ELSE OUTPUT(61,(/,(THE MATRIX IS ASYMMETRIC.THE ), (RESULTS ARE MEANINGLESS))); DETERMINANT:=DETERMSYM2(DETAUX,5,AUX); OUTPUT(61,(/,(THE DETERMINANT OF THE MATRIX : ), 3Z3D.2D),DETERMINANT) END THIS DELIVERS AS RESULT : THE COEFFICIENT MATRIX : -3 -3 -18 -30 18 -3 -1 -4 -48 8 -18 -4 -6 -274 6 -30 -48 -274 119 19 18 8 6 19 216 THE MATRIX IS SYMMETRIC. THE DETERMINANT OF THE MATRIX : 168.00 SOURCE TEXT : 0CODE 34294; REAL PROCEDURE DETERMSYM2(DETAUX,N,AUX); VALUE N;INTEGER N; ARRAY DETAUX;INTEGER ARRAY AUX; BEGIN INTEGER I;REAL DET; IF AUX[5]>0 THEN DET:=0 ELSE BEGIN DET:=1; FOR I:=1 STEP 1 UNTIL N DO DET:=DET*DETAUX[I] END; DETERMSYM2:=DET END DETERMSYM2; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.1.1.3.3 ( DECEMBER 1978 ) AUTHORS : J.R.BUNCH,L.KAUFMAN,B.N.PARLETT. CONTRIBUTOR : C.H.CONVENT. INSTITUTE : UNIVERSITY OF AMSTERDAM. RECEIVED : 770712. BRIEF DESCRIPTION : THIS SECTION CONTAINS TWO PROCEDURES : A) SOLSYM2 SOLVES A SYMMETRIC SYSTEM OF LINEAR EQUATIONS, ASSUMING THAT THE MATRIX HAS BEEN DECOMPOSED INTO LDL' FORM BY A CALL OF DECSYM2; B) DECSOLSYM2 CALCULATES THE LDL' DECOMPOSITION OF A SYMMETRIC MATRIX; MOREOVER, IF THIS MATRIX IS NON-SINGULAR, THEN IT SOLVES A CORRESPONDING SYSTEM OF LINEAR EQUATIONS; KEYWORDS : GENERAL SYMMETRIC MATRIX, LDL' DECOMPOSITION, BLOCK DIAGONAL PIVOTING; SUBSECTION : SOLSYM2. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE SOLSYM2(A,N,B,P,DETAUX); VALUE N;INTEGER N; ARRAY A,B,DETAUX;INTEGER ARRAY P; CODE 34292; THE MEANING OF THE FORMAL PARAMETERS IS : A : ; ARRAY A[1:N,1:N]; ENTRY : THE LDL' DECOMPOSITION OF A AS PRODUCED BY DECSYM2; N : ; THE ORDER OF THE MATRIX; B : ; ARRAY B[1:N]; ENTRY : THE RIGHT-HANDSIDE OF A SYSTEM OF LINEAR EQUATIONS; EXIT : THE CALCULATED SOLUTION VECTOR; P : ; INTEGER ARRAY P[1:N]; ENTRY : A VECTOR RECORDING THE INTERCHANGES PERFORMED ON THE MATRIX BY THE PROCEDURE DECSYM2. P ALSO CONTAINS INFORMATION ON THE BLOCKSTRUCTURE OF THE MATRIX AS DECOMPOSED BY DECSYM2; DETAUX : ; ARRAY DETAUX[1:N]; ENTRY : THE ARRAY DETAUX AS PRODUCED BY DECSYM2; PROCEDURES USED : MATVEC=CP34011. ELMVECROW=CP34026. RUNNING TIME : ROUGHLY PROPORTIONAL TO N**2. METHOD AND PERFORMANCE : THE PROCEDURE SOLSYM2 COMPUTES THE SOLUTION OF A SYMMETRIC SYSTEM OF LINEAR EQUATIONS,ASSUMING THAT THE MATRIX HAS BEEN DECOMPOSED INTO LDL' FORM BY A CALL OF DECSYM2. B IS OVERWRITTEN WITH THE SOLUTION VECTOR. REFERENCES : 1) J.R.BUNCH,L.KAUFMAN. SOME STABLE METHODS FOR CALCULATING INERTIA AND SOLVING SYMMETRIC LINEAR SYSTEMS. MATHEMATICS OF COMPUTATION 31,P 163-180,1977. 2) J.R.BUNCH,L.KAUFMAN,B.N.PARLETT. DECOMPOSITION OF A SYMMETRIC MATRIX. NUMERISCHE MATHEMATIK 27,P 95-109,1976. SUBSECTION : DECSOLSYM2. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE DECSOLSYM2(A,N,B,TOL,AUX); VALUE N;INTEGER N;REAL TOL; ARRAY A,B;INTEGER ARRAY AUX; CODE 34293; THE MEANING OF THE FORMAL PARAMETERS IS : A : ; ARRAY A[1:N,1:N]; ENTRY : SEE DECSYM2; EXIT : SEE DECSYM2; N : ; THE ORDER OF THE MATRIX; B : ; ARRAY B[1:N]; ENTRY : SEE SOLSYM2; EXIT : THE CALCULATED SOLUTION VECTOR,WHEN A WAS FOUND TO BE NON-SINGULAR. B IS LEFT UNDISTURBED OTHERWISE; TOL : ; ENTRY : SEE DECSYM2; AUX : ; INTEGER ARRAY AUX[2:5]; EXIT : SEE DECSYM2; PROCEDURES USED : DECSYM2=CP34291. SOLSYM2=CP34292. RUNNING TIME : ROUGHLY PROPORTIONAL TO N**3. METHOD AND PERFORMANCE : THE PROCEDURE DECSOLSYM2 COMPUTES THE SOLUTION OF A SYMMETRIC SYSTEM OF LINEAR EQUATIONS. IT DOES SO BY FIRST CALLING THE PROCEDURE DECSYM2 TO COMPUTE THE LDL' DECOMPOSITION OF THE SYMMETRIC MATRIX,ACCORDING TO A METHOD DUE TO BUNCH,KAUFMAN AND PARLETT (SEE [1],[2]). WHEN THE MATRIX IS FOUND TO BE NON-SINGULAR THE PROCEDURE SOLSYM2 IS CALLED TO COMPUTE THE SOLUTION VECTOR,AND THE LATTER OVERWRITES B. WHEN THE MATRIX IS FOUND TO BE SINGULAR THE PROCEDURE SOLSYM2 IS NOT CALLED AND B IS LEFT UNDISTURBED. REFERENCES : 1) J.R.BUNCH,L.KAUFMAN. SOME STABLE METHODS FOR CALCULATING INERTIA AND SOLVING SYMMETRIC LINEAR SYSTEMS. MATHEMATICS OF COMPUTATION 31,P 163-180,1977. 2) J.R.BUNCH,L.KAUFMAN,B.N.PARLETT. DECOMPOSITION OF A SYMMETRIC MATRIX. NUMERISCHE MATHEMATIK 27,P 95-109,1976. EXAMPLES OF USE : BEGIN COMMENT EXAMPLE OF USE OF THE PROCEDURE DECSOLSYM2; INTEGER I,J;REAL TOL; REAL ARRAY A[1:5,1:5],B[1:5]; INTEGER ARRAY AUX[2:5]; A[1,1]:=A[1,2]:=-3;A[1,3]:=-18;A[1,4]:=-30;A[1,5]:=18; A[2,2]:=-1;A[2,3]:=-4;A[2,4]:=-48;A[2,5]:=8; A[3,3]:=-6;A[3,4]:=-274;A[3,5]:=6; A[4,4]:=119;A[4,5]:=19; A[5,5]:=216; FOR I:=1 STEP 1 UNTIL 5 DO FOR J:=I+1 STEP 1 UNTIL 5 DO A[J,I]:=A[I,J]; OUTPUT(61,((THE COEFFICIENTMATRIX :),/)); FOR I:=1 STEP 1 UNTIL 5 DO BEGIN FOR J:=1 STEP 1 UNTIL 5 DO OUTPUT(61,(-2ZD,4B),A[I,J]); OUTPUT(61,(/)) END; OUTPUT(61,(/,(THE RHS-VECTOR :),/)); FOR I:=1 STEP 1 UNTIL 5 DO BEGIN INREAL(70, B[I]); OUTPUT(61,(-Z3D,4B),B[I]) END; TOL:=-14; DECSOLSYM2(A,5,B,TOL,AUX); OUTPUT(61,(2/)); IF AUX[2]=1 THEN OUTPUT(61,((THE MATRIX IS SYMMETRIC),/)) ELSE OUTPUT(61,((THE MATRIX IS ASYMMETRIC.THE ), (RESULTS ARE MEANINGLESS),/)); OUTPUT(61,(/,(INERTIA : <),D,(,),D,(,),D, (>),/),AUX[3],AUX[4],AUX[5]); OUTPUT(61,(/,(THE COMPUTED SOLUTION :),/)); FOR I:=1 STEP 1 UNTIL 5 DO OUTPUT(61,(-D.5D,4B),B[I]) END INPUT: 327 291 1290 275 1720 THIS DELIVERS AS RESULT : THE COEFFICIENT MATRIX : -3 -3 -18 -30 18 -3 -1 -4 -48 8 -18 -4 -6 -274 6 -30 -48 -274 119 19 18 8 6 19 216 THE RHS-VECTOR : 327 291 1290 275 1720 THE MATRIX IS SYMMETRIC. INERTIA : <3,2,0> THE COMPUTED SOLUTION : -7.00000 -2.00000 -1.00000 -4.00000 9.00000 SOURCE TEXT(S) : CODE 34292; PROCEDURE SOLSYM2(A,N,B,P,DETAUX); VALUE N;INTEGER N; ARRAY A,B,DETAUX;INTEGER ARRAY P; BEGIN INTEGER I,II,J,K,IP1,PI,PII,DUMMY; REAL DET,TEMP,SAVE; I:=1; FOR DUMMY:=0 WHILE I0 THEN BEGIN B[PI]:=B[I];B[I]:=SAVE/A[I,I]; ELMVECROW(IP1,N,I,B,A,SAVE);I:=IP1 END ELSE BEGIN TEMP:=B[I];B[PI]:=B[IP1];DET:=DETAUX[IP1]; B[I]:=(TEMP*A[IP1,IP1]-SAVE*A[I,IP1])/DET; B[IP1]:=(SAVE*A[I,I]-TEMP*A[I,IP1])/DET; ELMVECROW(I+2,N,I,B,A,TEMP);ELMVECROW(I+2,N,IP1,B,A,SAVE); I:=I+2 END END WHILE I; IF I=N THEN BEGIN B[I]:=B[I]/A[I,I];I:=N-1 END ELSE I:=N-2; FOR DUMMY:=0 WHILE I>0 DO BEGIN IF P[I]=0 THEN II:=I-1 ELSE II:=I; FOR K:=II STEP 1 UNTIL I DO BEGIN SAVE:=B[K];SAVE:=SAVE+MATVEC(I+1,N,K,A,B); B[K]:=SAVE END; PII:=P[II];B[I]:=B[PII];B[PII]:=SAVE;I:=II-1 END WHILE I END SOLSYM2; EOP CODE 34293; PROCEDURE DECSOLSYM2(A,N,B,TOL,AUX); VALUE N;INTEGER N;REAL TOL; ARRAY A,B;INTEGER ARRAY AUX; BEGIN REAL ARRAY DETAUX[1:N];INTEGER ARRAY P[1:N]; DECSYM2(A,N,TOL,AUX,P,DETAUX); IF AUX[5]=0 THEN SOLSYM2(A,N,B,P,DETAUX) END DECSOLSYM2; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.2.1.1 (MAY 1974) AUTHOR : T.J. DEKKER. CONTRIBUTOR : J. KOK. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 731015. BRIEF DESCRIPTION : THIS SECTION CONTAINS TWO PROCEDURES : A) LSQORTDEC, FOR THE HOUSEHOLDER TRIANGULARIZATION WITH COLUMN INTERCHANGES OF THE COEFFICIENT MATRIX OF A LINEAR LEAST SQUARES PROBLEM; B) LSQDGLINV, FOR THE CALCULATION OF THE DIAGONAL ELEMENTS OF THE INVERSE OF M'M, WHERE M IS THE COEFFICIENT MATRIX OF A LINEAR LEAST SQUARES PROBLEM. KEY WORDS : LINEAR LEAST SQUARES PROBLEM, HOUSEHOLDER TRIANGULARIZATION. SUBSECTION : LSQORTDEC. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS : PROCEDURE LSQORTDEC(A, N, M, AUX, AID, CI); VALUE N, M; INTEGER N, M; INTEGERARRAY CI; ARRAY A, AUX, AID; CODE 34134; THE MEANING OF THE FORMAL PARAMETERS IS : A : ; ARRAY A[1 : N,1 : M]; ENTRY :THE COEFFICIENT MATRIX OF THE LINEAR LEAST SQUARES PROBLEM; EXIT : IN THE UPPER TRIANGLE OF A (THE ELEMENTS A[I,J] WITH I < J) THE SUPERDIAGONAL ELEMENTS OF THE UPPER-TRIANGULAR MATRIX, PRODUCED BY THE HOUSEHOLDER TRANSFORMATION; IN THE OTHER PART OF THE COLUMNS OF A THE SIGNIFICANT ELEMENTS OF THE GENERATING VECTORS OF THE HOUSEHOLDER MATRICES USED FOR THE HOUSEHOLDER TRIANGULARIZATION; N : ; NUMBER OF ROWS OF THE MATRIX; M : ; NUMBER OF COLUMNS OF THE MATRIX (N >= M); AUX : ; ARRAY AUX[2 : 5]; ENTRY : AUX[2] CONTAINS A RELATIVE TOLERANCE USED FOR CALCULATING THE DIAGONAL ELEMENTS OF THE UPPER-TRIANGULAR MATRIX; EXIT : AUX[3] DELIVERS THE NUMBER OF THE DIAGONAL ELEMENTS OF THE UPPER-TRIANGULAR MATRIX WHICH HAVE BEEN FOUND NOT NEGLIGIBLE; NORMAL EXIT AUX[3] = M; AUX[5] := THE MAXIMUM OF THE EUCLIDEAN NORMS OF THE COLUMNS OF THE GIVEN MATRIX; AID : ; ARRAY AID[1 : M]; NORMAL EXIT (AUX[3] = M) : AID CONTAINS THE DIAGONAL ELEMENTS OF THE UPPER-TRIANGULAR MATRIX PRODUCED BY THE HOUSEHOLDER TRIANGULARIZATION; CI : ; INTEGERARRAY CI[1 : M]; EXIT : CI CONTAINS THE PIVOTAL INDICES OF THE INTERCHANGES OF THE COLUMNS OF THE GIVEN MATRIX. PROCEDURES USED : TAMMAT = CP34014, ELMCOL = CP34023, ICHCOL = CP34031. REQUIRED CENTRAL MEMORY : EXECUTION FIELD LENGTH : AN ARRAY OF M ELEMENTS IS DECLARED. RUNNING TIME: (C1 * M + C2) * M * (N - M / 3); THE CONSTANTS C1 AND C2 DEPEND ON THE ARITHMETIC OF THE COMPUTER. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : THE PROCEDURE LSQORTDEC IS A MODIFICATION OF THE PROCEDURE LSQDEC DUE TO T.J. DEKKER (SEE REF [1], WHERE A DERIVATION IS GIVEN OF A SET OF PROCEDURES BY P. BUSINGER AND G.H. GOLUB, SEE REF [2]). THE METHOD IS HOUSEHOLDER TRIANGULARIZATION WITH COLUMN INTERCHANGES. LET M DENOTE THE GIVEN MATRIX. LSQORTDEC PRODUCES AN N-TH ORDER ORTHOGONAL MATRIX Q AND AN N * M UPPER-TRIANGULAR MATRIX R SUCH THAT R EQUALS QM WITH PERMUTED COLUMNS, Q IS THE PRODUCT OF AT MOST M HOUSEHOLDER MATRICES WHICH ARE REPRESENTED BY THEIR GENERATING VECTORS. M IS REDUCED TO R IN AT MOST M STAGES : AT THE K-TH STAGE THE K-TH COLUMN OF THE (ALREADY MODIFIED) MATRIX IS INTERCHANGED WITH THE COLUMN OF MAXIMUM EUCLIDEAN NORM (THE PIVOTAL COLUMN); THEN THE MATRIX IS MULTIPLIED WITH A HOUSEHOLDER MATRIX SUCH, THAT THE SUBDIAGONAL ELEMENTS OF THE K-TH COLUMN BECOME ZERO, WHILE THE FIRST K - 1 COLUMNS REMAIN UNCHANGED. THE PROCESS TERMINATES PREMATURELY, IF AT SOME STAGE THE EUCLIDEAN NORM OF THE PIVOTAL COLUMN IS LESS THAN SOME TOLERANCE, VIZ. A GIVEN TOLERANCE (AUX[2]) TIMES THE MAXIMUM OF THE EUCLIDEAN NORMS OF THE COLUMNS OF THE GIVEN MATRIX. LSQORTDEC DELIVERS THE SIGNIFICANT ELEMENTS OF THE GENERATING VECTOR OF THE K-TH HOUSEHOLDER MATRIX (THE FIRST K - 1 ELEMENTS OF THIS VECTOR BEING ZERO) IN THE LOWER TRIANGLE PART OF THE K-TH COLUMN OF THE ARRAY A (A[I,K] FOR I >= K). OF THE RESULTING UPPER-TRIANGULAR MATRIX THE DIAGONAL ELEMENTS ARE DELIVERED SEPARATELY IN AN ARRAY AID, AND THE REMAINING ELEMENTS IN THE SUPER-TRIANGULAR PART OF THE ARRAY A. FOR THE SOLUTION OF LEAST SQUARES PROBLEMS, ONLY CALLS WITH N >= M ARE USEFUL. REFERENCES : [1] DEKKER, T.J. : ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1, MC TRACT 22, 1968, MATHEMATISCH CENTRUM, AMSTERDAM. [2] BUSINGER, P. AND G.H. GOLUB : LINEAR LEAST SQUARES SOLUTION BY HOUSEHOLDER TRANSFORMATIONS, NUM. MATH. 7 (1965), PP. 269 - 276. EXAMPLE OF USE : SEE EXAMPLE OF USE OF LSQSOL. SUBSECTION : LSQDGLINV. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE LSQDGLINV(A, M, AID, CI, DIAG); VALUE M; INTEGER M; INTEGERARRAY CI; ARRAY A, AID, DIAG; CODE 34132; THE MEANING OF THE FORMAL PARAMETERS IS : A, M, AID, CI : SEE 'CALLING SEQUENCE' OF LSQORTDEC (THIS SECTION); THE CONTENTS OF A, AID AND CI SHOULD BE PRODUCED BY A SUCCESSFUL CALL OF LSQORTDEC (AUX[3] = M) . DIAG : ; ARRAY DIAG[1 : M]; EXIT : THE DIAGONAL ELEMENTS OF THE INVERSE OF M'M WHERE M IS THE MATRIX OF THE LINEAR LEAST SQUARES PROBLEM. PROCEDURES USED : VECVEC = CP34010, TAMVEC = CP34012. RUNNING TIME : (C3 * M + C4) * M * M; THE CONSTANTS C3 AND C4 DEPEND ON THE ARITHMETIC OF THE COMPUTER. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : LSQDGLINV SHOULD BE CALLED AFTER A SUCCESSFUL CALL OF LSQORTDEC, I.E. IF AUX[3] = M. LSQDGLINV CALCULATES THE DIAGONAL ELEMENTS OF THE INVERSE OF M'M, WHERE M IS THE MATRIX OF A LINEAR LEAST SQUARES PROBLEM. THESE VALUES CAN BE USED FOR THE COMPUTATION OF THE STANDARD DEVIATIONS OF LEAST SQUARES SOLUTIONS. EXAMPLE OF USE : SEE EXAMPLE OF USE OF LSQSOL. SOURCE TEXT(S) : CODE 34134; PROCEDURE LSQORTDEC(A, N, M, AUX, AID, CI); VALUE N, M; INTEGER N, M; ARRAY A, AUX, AID; INTEGER ARRAY CI; BEGIN INTEGER J, K, KPIV; REAL BETA, SIGMA, NORM, W, EPS, AKK, AIDK; ARRAY SUM[1:M]; NORM:= 0; AUX[3]:= M; FOR K:= 1 STEP 1 UNTIL M DO BEGIN W:= SUM[K]:= TAMMAT(1, N, K, K, A, A); IF W > NORM THEN NORM:= W END; W:= AUX[5]:= SQRT(NORM); EPS:= AUX[2] * W; FOR K:= 1 STEP 1 UNTIL M DO BEGIN SIGMA:= SUM[K]; KPIV:= K; FOR J:= K + 1 STEP 1 UNTIL M DO IF SUM[J] > SIGMA THEN BEGIN SIGMA:= SUM[J]; KPIV:= J END; IF KPIV ^= K THEN BEGIN SUM[KPIV]:= SUM[K]; ICHCOL(1, N, K, KPIV, A) END; CI[K]:= KPIV; AKK:= A[K,K]; SIGMA:= TAMMAT(K, N, K, K, A, A); W:= SQRT(SIGMA); AIDK:= AID[K]:= IF AKK < 0 THEN W ELSE - W; IF W < EPS THEN BEGIN AUX[3]:= K - 1; GO TO ENDDEC END; BETA:= 1 / (SIGMA - AKK * AIDK); A[K,K]:= AKK - AIDK; FOR J:= K + 1 STEP 1 UNTIL M DO BEGIN ELMCOL(K, N, J, K, A, A, - BETA * TAMMAT(K, N, K, J, A, A)); SUM[J]:= SUM[J] - A[K,J] ** 2 END END FOR K; ENDDEC: END LSQORTDEC; EOP CODE 34132; PROCEDURE LSQDGLINV(A, M, AID, CI, DIAG); VALUE M; INTEGER M; ARRAY A, AID, DIAG; INTEGER ARRAY CI; BEGIN INTEGER J, K, CIK; REAL W; FOR K:= 1 STEP 1 UNTIL M DO BEGIN DIAG[K]:= 1 / AID[K]; FOR J:= K + 1 STEP 1 UNTIL M DO DIAG[J]:= - TAMVEC(K, J - 1, J, A, DIAG) / AID[J]; DIAG[K]:= VECVEC(K, M, 0, DIAG, DIAG) END; FOR K:= M STEP - 1 UNTIL 1 DO BEGIN CIK:= CI[K]; IF CIK ^= K THEN BEGIN W:= DIAG[K]; DIAG[K]:= DIAG[CIK]; DIAG[CIK]:= W END END END LSQDGLINV; EOP ########################################################################## ########################################################################## 1SECTION : 3.1.1.2.1.2 (MAY 1974) AUTHOR : T.J. DEKKER. CONTRIBUTOR : J. KOK. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 731015. BRIEF DESCRIPTION : THIS SECTION CONTAINS TWO PROCEDURES : A) LSQSOL, FOR THE SOLUTION OF A LINEAR LEAST SQUARES PROBLEM IF THE COEFFICIENT MATRIX HAS BEEN DECOMPOSED BY LSQORTDEC (SECTION 3.1.1.2.1.1.); B) LSQORTDECSOL, FOR THE SOLUTION OF A LINEAR LEAST SQUARES PROBLEM BY HOUSEHOLDER TRIANGULARIZATION WITH COLUMN INTERCHANGES AND FOR THE CALCULATION OF THE DIAGONAL OF THE INVERSE OF M'M, WHERE M IS THE COEFFICIENT MATRIX. KEY WORDS : LINEAR LEAST SQUARES PROBLEM, HOUSEHOLDER TRIANGULARIZATION. SUBSECTION : LSQSOL. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS : PROCEDURE LSQSOL(A, N, M, AID, CI, B); VALUE N, M; INTEGER N, M; INTEGERARRAY CI; ARRAY A, AID, B; CODE 34131; THE MEANING OF THE FORMAL PARAMETERS IS : A, N, M, AID, CI : SEE 'CALLING SEQUENCE' OF LSQORTDEC (SECTION 3.1.1.2.1.1.); THE CONTENTS OF THE ARRAYS A, AID AND CI SHOULD BE PRODUCED BY A SUCCESSFUL CALL OF LSQORTDEC, I.E. IF AUX[3] = M; B : ; ARRAY B[1 : N]; ENTRY : B CONTAINS THE RIGHT HAND SIDE OF A LINEAR LEAST SQUARES PROBLEM; EXIT : B[1 : M] CONTAINS THE SOLUTION OF THE PROBLEM; B[M + 1 : N] CONTAINS A VECTOR WITH EUCLIDEAN LENGTH EQUAL TO THE EUCLIDEAN LENGTH OF THE RESIDUAL VECTOR. PROCEDURES USED : MATVEC = CP34011, TAMVEC = CP34012, ELMVECCOL = CP34021. RUNNING TIME: (C5 * M + C6) * N; THE CONSTANTS C5 AND C6 DEPEND UPON THE ELEMENTARY ARITHMETIC OF THE COMPUTER. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : LSQSOL SHOULD BE CALLED AFTER A SUCCESSFUL CALL OF LSQORTDEC (SECTION 3.1.1.2.1.1.), I.E. IF AUX[3] = M. LSQSOL YIELDS THE LEAST SQUARES SOLUTION OF THE OVERDETERMINED SYSTEM WITH THE DECOMPOSED COEFFICIENT MATRIX IN ARRAY A AND THE RIGHT HAND SIDE IN ARRAY B. FIRST THE ORTHOGONAL TRANSFORMATION WITH THE HOUSEHOLDER MATRICES IS PERFORMED ON THE RIGHT HAND SIDE. NEXT THE SYSTEM OF THE FIRST M EQUATIONS AND WITH AN UPPER-TRIANGULAR COEFFICIENT MATRIX IS SOLVED BY BACK SUBSTITUTION, YIELDING A SOLUTION WITH M PERMUTED COMPONENTS DUE TO THE COLUMN INTERCHANGES OF THE TRIANGULARIZATION. FINALLY THE ORDER OF THE M COMPONENTS IS RESTORED. SEE ALSO METHOD AND PERFORMANCE OF LSQORTDEC (SECTION 3.1.1.2.1.1.). THE LEAST SQUARES SOLUTIONS OF SEVERAL OVERDETERMINED SYSTEMS WITH THE SAME COEFFICIENT MATRIX CAN BE OBTAINED BY SUCCESSIVE CALLS OF LSQSOL WITH DIFFERENT RIGHT HAND SIDES. EXAMPLE OF USE : THE NEXT PROGRAM SOLVES THE SYSTEM - 2 * X1 + X2 = 0 - X1 + X2 = 1 X1 + X2 = 2 2 * X1 + X2 = 2 X1 + 2 * X2 = 3 BEGINCOMMENT 730912, TEST LSQORTDEC, LSQSOL, LSQDGLINV; ARRAY A, C[1 : 5,1 : 2], B, X[1 : 5], DIAG, AID[1 : 2], AUX[2 : 5]; INTEGERARRAY PIV[1 : 2]; INTEGER I, J; REAL H; REALPROCEDURE SUM(I, A, B, X); VALUE A, B; INTEGER I, A, B; REAL X; BEGINREAL S; S:= 0; FOR I:= A STEP 1 UNTIL B DO S:= S + X; SUM:= S END SUM; AUX[2]:= -12; I:= J:= 1; FOR H:= - 2, - 1, 1, 2, 1, 1, 1, 1, 1, 2 DO BEGIN A[I,J]:= C[I,J]:= H; IF I < 5 THEN I:= I + 1 ELSE BEGIN I:= 1; J:= J + 1 END END; FOR H:= 0, 1, 2, 2, 3 DO BEGIN B[I]:= X[I]:= H; I:= I + 1 END; LSQORTDEC(A, 5, 2, AUX, AID, PIV); IF AUX[3] = 2 THEN BEGIN LSQSOL(A, 5, 2, AID, PIV, X); LSQDGLINV(A, 2, AID, PIV, DIAG); OUTPUT(61, (/, (AUX[2, 3, 5] = ) +.4D+DD5B, 3ZD5B, +.4D+DD/, (LSQ SOLUTION :), 2(2B+.8D+DD), / (RESIDUE (DELIVERED) :) +.8D+DD/, (RESIDUE (CHECKED) :) +.8D+DD/, (DIAGONAL OF INVERSE M'M :), 2(2B+.8D+DD)), AUX[2], AUX[3], AUX[5], X[1], X[2], SQRT(VECVEC(3, 5, 0, X, X)), SQRT(SUM(I, 1, 5, (B[I] - C[I,1] * X[1] - C[I,2] * X[2]) ** 2)), DIAG[1], DIAG[2]) END END DELIVERS : AUX[2, 3, 5] = +.1000-11 2 +.3317+01 LSQ SOLUTION : +.50000000+00 +.12500000+01 RESIDUE (DELIVERED) :+.50000000+00 RESIDUE (CHECKED) :+.50000000+00 DIAGONAL OF INVERSE M'M : +.95238095-01 +.13095238+00 SUBSECTION : LSQORTDECSOL. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE LSQORTDECSOL(A, N, M, AUX, DIAG, B); VALUE N, M; INTEGER N, M; ARRAY A, AUX, DIAG, B; CODE 34135; THE MEANING OF THE FORMAL PARAMETERS IS : A : ; ARRAY A[1 : N,1 : M]; ENTRY : A CONTAINS THE COEFFICIENT MATRIX OF THE LINEAR LEAST SQUARES PROBLEM; EXIT : IN THE UPPER TRIANGLE OF A (THE ELEMENTS A[I,J] WITH I < J) THE SUPERDIAGONAL ELEMENTS OF THE UPPER-TRIANGULAR MATRIX, PRODUCED BY THE HOUSEHOLDER TRANSFORMATION; IN THE OTHER PART OF THE COLUMNS OF A THE SIGNIFICANT ELEMENTS OF THE GENERATING VECTORS OF THE HOUSEHOLDER MATRICES USED FOR THE HOUSEHOLDER TRIANGULARIZATION; N : ; NUMBER OF ROWS OF THE MATRIX; M : ; NUMBER OF COLUMNS OF THE MATRIX (N >= M); AUX : ; ARRAY AUX[2 : 5]; ENTRY : AUX[2] CONTAINS A RELATIVE TOLERANCE USED FOR CALCULATING THE DIAGONAL ELEMENTS OF THE UPPER-TRIANGULAR MATRIX; EXIT : AUX[3] DELIVERS THE NUMBER OF THE DIAGONAL ELEMENTS OF THE UPPER-TRIANGULAR MATRIX WHICH ARE FOUND NOT NEGLIGIBLE; NORMAL EXIT AUX[3] = M; AUX[5] := THE MAXIMUM OF THE EUCLIDEAN NORMS OF THE COLUMNS OF THE GIVEN MATRIX; DIAG : ; ARRAY DIAG[1 : M]; EXIT : THE DIAGONAL ELEMENTS OF THE INVERSE OF M'M WHERE M IS THE MATRIX OF THE LINEAR LEAST SQUARES PROBLEM; B : ; ARRAY B[1 : N]; ENTRY : B CONTAINS THE RIGHT HAND SIDE OF A LINEAR LEAST SQUARES PROBLEM; EXIT : B[1 : M] CONTAINS THE SOLUTION OF THE PROBLEM; B[M + 1 : N] CONTAINS A VECTOR WITH EUCLIDEAN LENGTH EQUAL TO THE EUCLIDEAN LENGTH OF THE RESIDUAL VECTOR. PROCEDURES USED : LSQORTDEC = CP34134, LSQDGLINV = CP34132, LSQSOL = CP34131. REQUIRED CENTRAL MEMORY : EXECUTION FIELD LENGTH : AN INTEGER ARRAY AND A REAL ARRAY, BOTH OF M ELEMENTS, ARE DECLARED. RUNNING TIME : ROUGHLY PROPORTIONAL TO N * (M ** 2). LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : LSQORTDECSOL SOLVES AN OVERDETERMINED SYSTEM OF N LINEAR EQUATIONS IN M UNKNOWNS BY CALLING LSQORTDEC AND, IF THIS CALL WAS SUCCESSFUL LSQDGLINV AND LSQSOL. LSQORTDECSOL DELIVERS THE LEAST SQUARES SOLUTION AND THE DIAGONAL OF THE INVERSE OF M'M, WHERE M IS THE COEFFICIENT MATRIX OF THE SYSTEM. SEE SECTION 3.1.1.2.1.1., AND LSQSOL (THIS SECTION). EXAMPLE OF USE : THE PROGRAM BEGINCOMMENT 730914, TEST LSQORTDECSOL; ARRAY A, C[1 : 5,1 : 2], B, X[1 : 5], DIAG[1 : 2], AUX[2 : 5]; INTEGER I, J; REAL H; REALPROCEDURE SUM(I, A, B, X); VALUE A, B; INTEGER I, A, B; REAL X; BEGINREAL S; S:= 0; FOR I:= A STEP 1 UNTIL B DO S:= S + X; SUM:= S END SUM; AUX[2]:= -12; I:= J:= 1; FOR H:= - 2, - 1, 1, 2, 1, 1, 1, 1, 1, 2 DO BEGIN A[I,J]:= C[I,J]:= H; IF I < 5 THEN I:= I + 1 ELSE BEGIN I:= 1; J:= J + 1 END END; FOR H:= 0, 1, 2, 2, 3 DO BEGIN B[I]:= X[I]:= H; I:= I + 1 END; LSQORTDECSOL(A, 5, 2, AUX, DIAG, X); IF AUX[3] = 2 THEN OUTPUT(61, (/, (AUX[2, 3, 5] = ) +.4D+DD5B, 3ZD5B, +.4D+DD/, (LSQ SOLUTION :), 2(2B+.8D+DD), / (RESIDUE (DELIVERED) :) +.8D+DD/, (RESIDUE (CHECKED) :) +.8D+DD/, (DIAGONAL OF INVERSE M'M :), 2(2B+.8D+DD)), AUX[2], AUX[3], AUX[5], X[1], X[2], SQRT(VECVEC(3, 5, 0, X, X)), SQRT(SUM(I, 1, 5, (B[I] - C[I,1] * X[1] - C[I,2] * X[2]) ** 2)), DIAG[1], DIAG[2]) END WHICH SOLVES THE PROBLEM OF THE EXAMPLE OF USE OF LSQSOL, DELIVERS : AUX[2, 3, 5] = +.1000-11 2 +.3317+01 LSQ SOLUTION : +.50000000+00 +.12500000+01 RESIDUE (DELIVERED) :+.50000000+00 RESIDUE (CHECKED) :+.50000000+00 DIAGONAL OF INVERSE M'M : +.95238095-01 +.13095238+00 SOURCE TEXT(S) : 0CODE 34131; PROCEDURE LSQSOL(A, N, M, AID, CI, B); VALUE N, M; INTEGER N, M; ARRAY A, AID, B; INTEGER ARRAY CI; BEGIN INTEGER K, CIK; REAL W; FOR K:= 1 STEP 1 UNTIL M DO ELMVECCOL(K, N, K, B, A, TAMVEC(K, N, K, A, B) / (AID[K] * A[K,K])); FOR K:= M STEP - 1 UNTIL 1 DO B[K]:= (B[K] - MATVEC (K + 1, M, K, A, B)) / AID[K]; FOR K:= M STEP - 1 UNTIL 1 DO BEGIN CIK:= CI[K]; IF CIK ^= K THEN BEGIN W:= B[K]; B[K]:= B[CIK]; B[CIK]:= W END END END LSQSOL; EOP 0CODE 34135; PROCEDURE LSQORTDECSOL(A, N, M, AUX, DIAG, B); VALUE N, M; INTEGER N, M; ARRAY A, AUX, DIAG, B; BEGIN ARRAY AID[1:M]; INTEGER ARRAY CI[1:M]; LSQORTDEC(A, N, M, AUX, AID, CI); IF AUX[3] = M THEN BEGIN LSQDGLINV(A, M, AID, CI, DIAG); LSQSOL(A, N, M, AID, CI, B) END END LSQORTDECSOL; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.2.1.3 (OCTOBER 1974) CONTRIBUTOR : J. KOK. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 740617. BRIEF DESCRIPTION : THIS SECTION CONTAINS ONE PROCEDURE, LSQINV, FOR THE CALCULATION OF THE INVERSE OF THE MATRIX S'S, WHERE S IS THE COEFFICIENT MATRIX OF A LINEAR LEAST SQUARES PROBLEM. KEYWORDS : INVERSE MATRIX, LINEAR LEAST SQUARES PROBLEM. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE LSQINV(A, M, AID, C); VALUE M; INTEGER M; ARRAY A, AID; INTEGERARRAY C; CODE 34136; THE MEANING OF THE FORMAL PARAMETERS IS : A : ; ARRAY A[1 : M, 1 : M]; ENTRY : IN THE UPPER TRIANGLE OF A (THE ELEMENTS A[I,J] WITH 1 <= I < J <= M) THE SUPERDIAGONAL ELEMENTS SHOULD BE GIVEN OF THE UPPERTRIANGULAR MATRIX THAT IS PRODUCED BY THE HOUSEHOLDER TRIANGULARIZATION IN A CALL OF THE PROCEDURE LSQORTDEC (SECTION 3.1.1.2.1.1.) WITH A NORMAL EXIT (AUX[3] = M). SEE ALSO THE MEANING OF THE PARAMETER AID; EXIT : THE UPPER TRIANGLE OF THE (SYMMETRIC) INVERSE MATRIX IS DELIVERED IN THE UPPERTRIANGULAR ELEMENTS OF THE ARRAY A (A[I,J] FOR 1 <= I <= J <= M); M : ; NUMBER OF COLUMNS OF THE MATRIX OF THE LINEAR LEAST SQUARES PROBLEM; AID : ; ARRAY AID[1 : M]; ENTRY : AID CONTAINS THE DIAGONAL ELEMENTS OF THE UPPERTRIANGULAR MATRIX THAT IS PRODUCED BY LSQORTDEC; C : ; INTEGERARRAY C[1 : M]; ENTRY : C CONTAINS THE PIVOTAL INDICES AS PRODUCED BY A CALL OF LSQORTDEC. PROCEDURES USED : CHLINV2 = CP34400, ICHCOL = CP34031, ICHROW = CP34032, ICHROWCOL = CP34033. REQUIRED CENTRAL MEMORY : EXECUTION FIELD LENGTH : A REAL ARRAY OF M ELEMENTS IS DECLARED (IN THE CALL OF CHLINV2). RUNNING TIME : PROPORTIONAL TO M CUBED. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : LSQINV SHOULD BE CALLED AFTER A SUCCESSFUL CALL OF LSQORTDEC (SECTION 3.1.1.2.1.1.). LSQINV CAN BE USED FOR THE CALCULATION OF THE COVARIANCE MATRIX OF A LINEAR LEAST SQUARES PROBLEM. LET S BE THE MATRIX OF THE LEAST SQUARES SYSTEM WITH PERMUTED COLUMNS AND Q * R THE HOUSEHOLDER DECOMPOSITION OF S. THEN THE INVERSE OF S'S ALSO IS THE INVERSE OF R'R. SINCE R IS THE CHOLESKY MATRIX OF R'R, THE INVERSE MATRIX IS COMPUTED IN A CALL OF CHLINV2 (SECTION 3.1.1.1.1.2.4.). AFTERWARDS THE COVARIANCE MATRIX IS OBTAINED BY INTERCHANGES OF THE COLUMNS AND ROWS OF THE INVERSE MATRIX. EXAMPLE OF USE : THE FOLLOWING PROGRAM COMPUTES THE INVERSE T OF S'S, WHERE S IS THE COEFFICIENT MATRIX OF THE SYSTEM IN THE EXAMPLE OF USE OF LSQORTDEC AND LSQDGLINV (SECTION 3.1.1.2.1.1.). THE DIAGONAL OF S CAN BE COMPARED WITH THE RESULT OF LSQDGLINV. TO CHECK THE ANSWERS S' * (S * T) IS PRINTED. BEGIN COMMENT JKOK, 740530, EXAMPLE OF USE OF LSQORTDEC AND LSQINV; ARRAY A, C[1 : 5, 1 : 2], AID[1 : 2], T[1 : 2, 1 : 2], AUX[2 : 5]; INTEGERARRAY PIV[1 : 2]; INTEGER I, J; REAL H; AUX[2]:= -12; I:= J:= 1; FOR H:= - 2, - 1, 1, 2, 1, 1, 1, 1, 1, 2 DO BEGIN A[I,J]:= C[I,J]:= H; IF I < 5 THEN I:= I + 1 ELSE BEGIN I:= 1; J:= J + 1 END END; LSQORTDEC(A, 5, 2, AUX, AID, PIV); IF AUX[3] = 2 THEN BEGIN LSQINV(A, 2, AID, PIV); T[1,1]:= A[1,1]; T[2,2]:= A[2,2]; T[2,1]:= T[1,2]:= A[1,2]; FOR J:= 1, 2 DOFOR I:= 1 STEP 1 UNTIL 5 DO A[I,J]:= MATMAT(1, 2, I, J, C, T); OUTPUT(61, (/4B, ( AUX[2, 3, 5] = ), -.4D+DD5B, 3ZD5B, +.4D+DD/, 2(/4B, 30S, /, 2(/4B, 2(2B+.8D+DD)), /) ), AUX[2], AUX[3], AUX[5], ( INVERSE :), T, ( CHECK : S' * (S * T) :), TAMMAT(1, 5, 1, 1, C, A), TAMMAT(1, 5, 1, 2, C, A), TAMMAT(1, 5, 2, 1, C, A), TAMMAT(1, 5, 2, 2, C, A) ) END END OUTPUT : AUX[2, 3, 5] = .1000-11 2 +.3317+01 INVERSE : +.95238095-01 -.23809524-01 -.23809524-01 +.13095238+00 CHECK : S' * (S * T) : +.10000000+01 +.17763568-14 +.00000000+00 +.10000000+01 SOURCE TEXT(S): CODE 34136; PROCEDURE LSQINV(A, M, AID, C); VALUE M; INTEGER M; ARRAY A, AID; INTEGERARRAY C; BEGININTEGER I, CI; REAL W; FOR I:= 1 STEP 1 UNTIL M DO A[I,I]:= AID[I]; CHLINV2(A, M); FOR I:= M STEP - 1 UNTIL 1 DO BEGIN CI:= C[I]; IF CI ^= I THEN BEGIN ICHCOL(1, I - 1, I, CI, A); ICHROWCOL(I + 1, CI - 1, I, CI, A); ICHROW(CI + 1, M, I, CI, A); W:= A[I,I]; A[I,I]:= A[CI,CI]; A[CI,CI]:= W END END END LSQINV; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.2.1.4 (DECEMBER 1978) AUTHORS: A.BJOERCK AND G.H.GOLUB. CONTRIBUTOR: J.KOOPMAN. INSTITUTE: UNIVERSITY OF AMSTERDAM. RECEIVED: 780701 . BRIEF DESCRIPTION: THIS SECTION CONTAINS TWO PROCEDURES FOR SOLVING A LINEAR LEAST SQUARES PROBLEM SUBJECT TO LINEAR CONSTRAINTS: LSQDECOMP , FOR THE QR-DECOMPOSITION OF A LEAST SQUARES MATRIX, WHERE THIS MATRIX ALSO CONTAINS THE COEFFICIENTS OF THE LINEAR CONSTRAINTS (LINEAR EQUATIONS); LSQREFSOL , FOR THE SOLUTION OF THIS LEAST SQUARES PROBLEM, IF THE MATRIX HAS BEEN DECOMPOSED BY LSQDECOMP. KEYWORDS: LEAST SQUARES, LINEAR CONSTRAINTS, HOUSEHOLDER TRIANGULARIZATION, ITERATIVE REFINEMENT. SUBSECTION: LSQDECOMP. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LSQDECOMP(A, N, M, N1, AUX, AID, CI); VALUEN,M,N1;INTEGERN,M,N1;ARRAY A,AUX,AID; INTEGERARRAY CI; CODE 34137; THE MEANING OF THE FORMAL PARAMETERS IS: A :; ARRAY A[1:N,1:M]; ENTRY: THE ORIGINAL LEAST SQUARES MATRIX, WHERE THE FIRST N1 ROWS SHOULD FORM THE CONSTRAINT MATRIX (I.E. THE FIRST N1 EQUATIONS ARE TO BE STRICTLY SATISFIED); EXIT : IN THE UPPER TRIANGLE OF A (THE ELEMENTS A[I,J] WITH I; NUMBER OF ROWS OF THE MATRIX; M :; NUMBER OF COLUMNS OF THE MATRIX; N1 :; NUMBER OF LINEAR CONSTRAINTS, I.E. THE FIRST N1 ROWS OF A SET UP A SYSTEM OF N1 LINEAR EQUATIONS THAT MUST BE STRICTLY SATISFIED (OF COURSE, IF THERE ARE NO CON- STRAINTS, N1 MUST BE CHOSEN ZERO); AUX :; ARRAY AUX[2:7]; ENTRY: AUX[2] CONTAINS A RELATIVE TOLERANCE FOR CALCULATING THE DIAGONAL ELEMENTS OF THE UPPER TRIANGULAR MATRIX; EXIT: AUX[3] CONTAINS THE NUMBER OF DIAGONAL ELEMENTS WHICH ARE NOT NEGLIGIBLE, NORMAL EXIT AUX[3]=M; AID :; ARRAY AID[1:M]; NORMAL EXIT (AUX[3]=M): THE DIAGONAL ELEMENTS OF THE UPPER TRIANGULAR MATRIX PRODUCED BY THE HOUSEHOLDER TRANSFORMATION CI :; INTEGERARRAY CI[1:M]; EXIT: THE PIVOTAL INDICES OF THE INTERCHANGES OF THE COLUMNS OF THE GIVEN MATRIX; PROCEDURES USED: MATMAT = CP34013. TAMMAT = CP34014. ELMCOL = CP34023. ICHCOL = CP34031. RUNNING TIME: ROUGHLY PROPORTIONAL TO N*M**2-M**3/3. METHOD AND PERFORMANCE: LET A DENOTE THE GIVEN MATRIX. LSQDECOMP PRODUCES AN N-TH ORDER ORTHOGONAL MATRIX Q AND AN N*M UPPER TRIANGULAR MATRIX R SUCH THAT R EQUALS QA WITH PERMUTED COLUMNS. THE ORTHOGONAL MATRIX Q IS FORMED AS A PRODUCT OF AT MOST M TRANS- FORMATIONS OF THE FORM (I-BETA U U'). THESE HOUSEHOLDER MATRICES REDUCE A TO THE MATRIX R: AT THE K-TH STAGE THE K-TH COLUMN OF THE (ALREADY MODIFIED) MATRIX IS INTERCHANGED WITH THE COLUMN OF MAXIMUM EUCLIDEAN NORM.THESE INTERCHANGES ARE RECORDED IN THE ARRAY CI. PREMATURE TERMINATION OCCURS IF AT SOME STAGE THE EUCLIDEAN NORM OF THE PIVOTAL COLUMN IS LESS THAN SOME TOLERANCE (AUX[2]) TIMES THE MAXIMUM OF THE EUCLIDEAN NORMS OF THE COLUMNS OF THE MATRIX. LSQDECOMP DELIVERS THE UPPER TRIANGULAR MATRIX, WHERE THE DIAGONAL ELEMENTS ARE STORED IN THE ARRAY AID AND THE OFF-DIAGONAL ELEMENTS IN THE UPPER TRIANGULAR PART OF A. THE SIGNIFICANT ELEMENTS OF THE GENERATING VECTORS OF THE HOUSEHOLDER TRANSFORMATIONS ARE STORED IN THE COLUMNS OF A, I.E. ON AND BELOW THE LEADING DIAGONAL OF A. IT SHOULD BE NOTED THAT FOR THE SOLUTION OF LEAST SQUARES PROBLEMS, ONLY CALLS WITH N>=M ARE USEFUL. REFERENCES: A.BJOERCK AND G.H.GOLUB: ITERATIVE REFINEMENT OF LEAST SQUARES SOLUTIONS BY HOUSEHOLDER TRANSFORMATION, BIT 7 (1967), PP. 322-337 SUBSECTION: LSQREFSOL. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE LSQREFSOL(A, QR, N, M, N1, AUX,AID,CI,B,LDX,X,RES); VALUEN,M,N1;INTEGERN,M,N1;INTEGERARRAYCI;REAL LDX; ARRAYA,QR,AUX,AID,B,X,RES; CODE 34138; THE MEANING OF THE FORMAL PARAMETERS IS: A :; ARRAY A[1:N,1:M]; THE ORIGINAL LEAST SQUARES MATRIX, WHERE THE FIRST N1 ROWS SET UP A SYSTEM OF LINEAR EQUATIONS THAT MUST BE STRICTLY SATISFIED; QR :; ARRAY QR[1:N,1:M]; THE QR-DECOMPOSITION OF THE ORIGINAL LEAST SQUARES MATRIX AS DELIVERED BY A SUCCESSFUL CALL OF LSQDECOMP; N :; NUMBER OF ROWS OF THE MATRICES A AND QR; M :; NUMBER OF COLUMNS OF THE MATRICES A AND QR; N1 :; NUMBER OF LINEAR CONSTRAINTS; AUX :; ARRAY AUX[2:7]; ENTRY: AUX[2] CONTAINS A RELATIVE TOLERANCE AS A CRITERION TO STOP ITERATIVE REFINING: IF THE EUCLIDEAN NORM OF THE CORRECTION IS SMALLER THAN AUX[2] TIMES THE CURRENT APPROXIMATION OF THE SOLUTION, THE ITERATIVE REFINING IS STOPPED; AUX[6]: MAXIMUM NUMBER OF ITERATIONS ALLOWED (USUALLY AUX[6]=5 WILL BE SUFFICIENT); EXIT : AUX[7]: THE NUMBER OF ITERATIONS PERFORMED; AID :; ARRAY AID[1:M]; THE DIAGONAL ELEMENTS OF THE UPPER TRIANGULAR MATRIX AS DELIVERED BY A SUCCESSFUL CALL OF LSQDECOMP; CI :; INTEGERARRAY CI[1:M]; THE PIVOTAL INDICES AS PRODUCED BY LSQDECOMP; B :; ARRAY B[1:N]; THE RIGHT-HAND SIDE OF THE LEAST SQUARES PROBLEM; FIRST N1 ELEMENTS FORM THE RIGHT HAND SIDES OF THE CONSTRAINTS; LDX :; THE EUCLIDEAN NORM OF THE LAST CORRECTION OF THE SOLUTION; X :; ARRAY X[1:M]; EXIT: THE SOLUTION VECTOR; RES :; ARRAY RES[1:N]; EXIT: THE RESIDUAL VECTOR CORRESPONDING TO THE SOLUTION; PROCEDURES USED: VECVEC = CP34010. MATVEC = CP34011. TAMVEC = CP34012. ELMVECCOL = CP34021. ICHCOL = CP34031. LNG SUB = CP31106. LNGMATVEC = CP34411. LNGTAMVEC = CP34412. RUNNING TIME: ROUGHLY PROPORTIONAL TO C1*M*N-C2*M**2, WHERE C1 AND C2 ARE CONSTANTS. METHOD AND PERFORMANCE: LSQREFSOL SHOULD BE CALLED AFTER A SUCCESSFUL CALL OF LSQDECOMP (I.E. AUX[3]=M). LSQREFSOL YIELDS THE LEAST SQUARES SOLUTION OF THE OVERDETERMINED SYSTEM WITH THE DECOMPOSED COEFFICIENT MATRIX IN THE ARRAY A AND THE RIGHT-HAND SIDE IN ARRAY B. THE ORIGINAL LEAST SQUARES MATRIX ALSO CONTAINS THE LINEAR CONSTRAINTS (THE FIRST N1 ROWS OF THIS MATRIX SET UP A SYSTEM THAT MUST BE STRICT- LY SATISFIED). FIRST, THE ORTHOGONAL TRANSFORMATION WITH THE HOUSEHOLDER MATRICES IS PERFORMED ON THE RIGHT-HAND SIDE. NEXT THE SYSTEM IS SOLVED BY MEANS OF A BACK SUBSTITUTION. IN THIS WAY THE FIRST APPROXIMATION OF THE SOLUTION (WITH PERMUTED COLUMNS) IS OBTAINED. AFTER THIS AN ITERATIVE PROCESS REFINES THE APPROXIMATION UNTIL THE EUCLIDEAN NORM OF THE CORRECTION VECTOR IS NEGLIGIBLY SMALL COMPARED TO THE APPROXIMATION OR UNTIL THE MAXIMUM NUMBER OF ITERATIONS IS REACHED. FOR A MORE DETAILED DESCRIPTION OF THE ITERATIVE IMPROVEMENT, SEE REF[1]. AFTER THE ITERATIVE PROCESS AN APPROXIMATION TO THE SOLUTION IS FOUND. HOWEVER, THE ORDER OF THE COMPONENTS POSSIBLY IS NOT CORRECT. THEREFORE THIS ORDER IS RESTORED AT THE END OF THE PROCEDURE (SEE ALSO METHOD AND PERFORMANCE OF LSQDECOMP). THE LEAST SQUARES SOLUTIONS OF SEVERAL OVERDETERMINED SYSTEMS WITH THE SAME CONSTRAINTS AND COEFFICIENT MATRIX CAN BE SOLVED BY SUCCESSIVE CALLS OF LSQREFSOL WITH DIFFERENT RIGHT-HAND SIDES. REFERENCES: [1] A.BJOERCK AND G.H.GOLUB: ITERATIVE REFINEMENT OF LEAST SQUARES SOLUTIONS BY HOUSEHOLDER TRANSFORMATION, BIT 7 (1967), PP. 322-337. EXAMPLE OF USE: THE FOLLOWING PROGRAM SOLVES THE PROBLEM: MINIMIZE //B - A*X// UNDER X1 + 1000*X2 + 5*X3 = 2016 ,WHERE A IS THE MATRIX 1 0 8 0 3 2 1 2 -5 0 0 0 AND THE VECTOR B = (25, 12, 5.00003, 1)' , X = (X1, X2, X3)' ; BEGIN INTEGER N,M,N1,I,J; N := 5; M := 3; N1 := 1; BEGININTEGERARRAY CI[1:M]; ARRAY AUX[2:7],QR,A[1:N,1:M],B,RES[1:N],AID,X[1:M]; REAL LDX; A[1,1] := 1; A[1,2] := 1000; A[1,3] := 5; A[2,1] := 1; A[2,2] := 0; A[2,3] := 8; A[3,1] := 0; A[3,2] := 3; A[3,3] := 2; A[4,1] := 1; A[4,2] := 2; A[4,3] := -5; A[5,1]:=A[5,2]:=A[5,3]:=0; B[1] := 2016; B[2] :=25; B[3] :=12; B[4] := 5.00003; B[5] := 1; AUX[2] := -14; AUX[6] := 5; FOR I:=1 STEP 1 UNTIL N DO FOR J:=1 STEP 1 UNTIL M DO QR[I,J] := A[I,J]; LSQDECOMP(QR,N,M,N1,AUX,AID,CI); LSQREFSOL(A,QR,N,M,N1,AUX,AID,CI,B,LDX,X,RES); OUTPUT(61,((THE SOLUTION VECTOR: ),//)); FOR I:=1 STEP 1 UNTIL M DO OUTPUT(61,(/),X[I]); OUTPUT(61,(//,(THE RESIDUAL VECTOR: ),//)); FOR J:=N1+1 STEP 1 UNTIL N DO OUTPUT(61,(/),RES[J]); OUTPUT(61,(///,(NUMBER OF ITERATIONS: ),D,//, (NORM LAST CORRECTION OF X: ),N),AUX[7],LDX) END END DELIVERS: THE SOLUTION VECTOR: +1.0000000000000+000 +2.0000000000000+000 +3.0000000000000+000 THE RESIDUAL VECTOR: -5.2734444477081-016 +2.1280091641666-015 +5.3479806840033-016 +1.0000000000000+000 NUMBER OF ITERATIONS: 2 NORM LAST CORRECTION OF X: +2.1657844626990-015 SOURCE TEXT(S): 0CODE 34137; PROCEDURE LSQDECOMP( A, N ,M ,N1 ,AUX ,AID ,CI ); VALUE N , M ,N1;INTEGER N,M,N1;ARRAY A,AUX, AID; INTEGERARRAY CI; BEGININTEGERJ,K,KPIV,NR,S;BOOLEAN FSUM; REAL BETA,SIGMA,NORM,AIDK,AKK,W,EPS; ARRAY SUM[1:M]; NORM:=0 ; AUX[3]:=M;NR:=N1;FSUM:=TRUE; FOR K:=1 STEP 1 UNTIL M DO BEGIN IF K=N1+1 THEN BEGIN FSUM:=TRUE; NR:=N END; IF FSUM THEN FOR J:=K STEP 1 UNTIL M DO BEGIN W:=SUM[J]:= TAMMAT(K ,NR ,J ,J ,A ,A); IF W>NORM THEN NORM:=W END; FSUM:=FALSE;EPS:=AUX[2]*SQRT(NORM); SIGMA:=SUM[K]; KPIV:=K; FOR J:=K+1 STEP 1 UNTIL M DO IF SUM[J]>SIGMA THEN BEGIN SIGMA:=SUM[J]; KPIV:=J END; IF KPIV^=K THEN BEGIN SUM[KPIV]:=SUM[K]; ICHCOL( 1 ,N ,K ,KPIV ,A) END; CI[K]:=KPIV; AKK:=A[K,K]; SIGMA:=TAMMAT(K ,NR ,K ,K ,A ,A); W:=SQRT(SIGMA); AIDK:=AID[K]:=IF AKK<0 THEN W ELSE -W; IF WN1 THEN N1 ELSE S-1; W:=A[J,S]-MATMAT(1 ,NR , J ,S ,A ,A); A[J,S]:=IF S>N1 THEN W ELSE W/AID[S] END END FOR K; ENDDEC: END LSQDECOMP; EOP CODE 34138; PROCEDURE LSQREFSOL(A, QR, N, M, N1, AUX, AID, CI, B,LDX,X,RES); VALUEN,M,N1;INTEGERN,M,N1;INTEGERARRAYCI;REALLDX; ARRAYQR,A,AID,AUX,X,RES,B; BEGININTEGERI,J,K,S; REALC1,NEXVE,NDX,NDR,D,DD,OP,OPL,CORRNORM; ARRAYF[1:N],G[1:M]; PROCEDURE HOUSEHOLDER(P, Q, R, E); VALUE P,Q,R,E;INTEGER P,Q,R,E; BEGIN FOR S:=P STEP Q UNTIL R DO ELMVECCOL(S, E, S, F, QR,TAMVEC(S, E, S,QR, F)/(QR[S,S]* AID[S])) END; FOR J:=1 STEP 1 UNTIL M DO BEGIN S:=CI[J];IF S^=JTHEN ICHCOL(1,N,J,S,A) END; FORJ:=1STEP1UNTILMDOX[J]:=G[J]:=0; FORI:=1STEP1UNTILNDO BEGINRES[I]:=0;F[I]:=B[I]END; FORK:=0,1,K+1 WHILE (CORRNORM>AUX[2]*NEXVE & K<=AUX[6]) DO BEGINNDX:=NDR:=0; IFK^=0THEN BEGINFORI:=1STEP1UNTILNDORES[I]:=RES[I]+F[I]; FORS:=1STEP1UNTILMDO BEGIN X[S]:=X[S]+G[S]; LNGTAMVEC(1,N,S,A,RES,0,0,D,DD); G[S]:=(-D-TAMVEC(1,S-1,S,QR,G))/AID[S] END; FORI:=1STEP1UNTILNDO BEGIN LNGMATVEC(1, M, I, A, X, IF I>N1 THEN RES[I] ELSE 0, 0, D, DD); LNG SUB(B[I],0,D,DD,OP,OPL); F[I]:=OP END END; NEXVE:=SQRT(VECVEC(1,M,0,X,X)+VECVEC(1,N,0,RES,RES)); HOUSEHOLDER(1, 1, N1, N1); FOR I:=N1+1 STEP 1 UNTIL N DO F[I]:=F[I]-MATVEC(1,N1, I, QR, F); HOUSEHOLDER(N1+1, 1, M, N); FOR I:=1 STEP 1 UNTIL M DO BEGIN C1:=F[I];F[I]:=G[I]; G[I]:=IF I>N1 THEN C1-G[I] ELSE C1 END; FORS:=MSTEP-1UNTIL1DO BEGING[S]:=(G[S]-MATVEC(S+1,M,S,QR,G))/AID[S]; NDX:=NDX+G[S]**2 END; HOUSEHOLDER(M, -1, N1+1, N); FOR S:=1 STEP 1 UNTIL N1 DO F[S]:=F[S]-TAMVEC(N1+1, N, S, QR, F); HOUSEHOLDER(N1, -1, 1, N1); AUX[7]:=K; FORI:=1STEP1UNTILNDONDR:=NDR+F[I]**2; CORRNORM:=SQRT(NDX+NDR) ENDFOR K; LDX:=SQRT(NDX); FOR S:=M STEP -1 UNTIL 1 DO BEGIN J:=CI[S];IF J^=S THEN BEGIN C1:=X[J];X[J]:=X[S];X[S]:=C1;ICHCOL(1,N,J,S,A)END END END LSQREFSOL; EOP ########################################################################## ########################################################################## 1SECTION: 3.1.1.3.1.1 (FEBRUARY 1979) AUTHOR : D.T.WINTER INSTITUTE : MATHEMATICAL CENTRE RECEIVED : 731217 BRIEF DESCRIPTION : THIS SECTION CONTAINS 2 PROCEDURES FOR THE SOLUTION OF AN OVERDETERMINED SYSTEM OF LINEAR EQUATIONS: SOLSVDOVR SOLVES AN OVERDETERMINED SYSTEM OF LINEAR EQUATIONS , MULTIPLYING THE RIGHT-HAND SIDE BY THE PSEUDO-INVERSE OF THE GIVEN MATRIX; THE SINGULAR VALUES DECOMPOSITION SHOULD BE AVAILABLE. SOLOVR CALCULATES THE SINGULAR VALUES DECOMPOSITION AND SOLVES AN OVERDETERMINED SYSTEM OF LINEAR EQUATIONS. KEYWORDS : BEST LEAST-SQUARES SOLUTION SINGULAR VALUES PSEUDO-INVERSE SUBSECTION : SOLSVDOVR CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE SOLSVDOVR(U, VAL, V, M, N, X, EM); VALUE M,N; INTEGER M,N; ARRAY U, VAL, V, X, EM; CODE 34280; THE MEANING OF THE FORMAL PARAMETERS IS : U: ; ARRAY U[1:M,1:N]; ENTRY:THE MATRIX U IN THE SINGULAR VALUES DECOMPOSITION U*S*V'. VAL: ; ARRAY VAL[1:N]; ENTRY:THE SINGULAR VALUES. V: ; ARRAY V[1:N,1:N]; ENTRY:THE MATRIX V IN THE SINGULAR VALUES DECOMPOSITION. N: ; THE NUMBER OF UNKNOWNS. M: ; THE LENGTH OF THE RIGHT-HAND SIDE VECTOR, N SHOULD SATISFY N <= M. X: ; ARRAY X[1:M]; ENTRY: THE RIGHT-HAND SIDE VECTOR; EXIT: THE SOLUTION VECTOR IN X[1:N]. EM: ; ARRAY EM[6:6]; ENTRY: EM[6]: THE MINIMAL NON-NEGLECTABLE SINGULAR VALUE. PROCEDURES USED : MATVEC = CP34011 TAMVEC = CP34012 REQUIRED CENTRAL MEMORY : AN AUXILIARY ARRAY OF N REALS IS DECLARED. RUNNING TIME : ROUGHLY PROPORTIONAL TO (M + N) * N METHOD AND PERFORMANCE : THE SOLUTION IS FOUND IN THREE STEPS : 1. U' * X = X1 IS CALCULATED, 2. VAL+ * X1 = X2 IS CALCULATED, HERE VAL+ DENOTES THE DIAGONAL MATRIX OBTAINED FROM VAL BY SETTING VAL+[I,I] = 1/VAL[I] IF VAL[I] GREATER THAN OR EQUAL TO EM[6], AND 0 OTHERWISE, 3. THE SOLUTION V * X2 IS CALCULATED. SUBSECTION : SOLOVR CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : INTEGER PROCEDURE SOLOVR(A, M, N, X, EM); VALUE M, N; INTEGER M, N; ARRAY A, X, EM; CODE 34281; SOLOVR:= THE NUMBER OF SINGULAR VALUES NOT FOUND, I.E. ZERO IF ALL SINGULAR VALUES ARE CALCULATED. THE MEANING OF THE FORMAL PAREMETERS IS : A: ; ARRAY A[1:M,1:N]; ENTRY: THE MATRIX OF THE SYSTEM; M: ; THE NUMBER OF ROWS OF A; N: ; THE NUMBER OF COLUMNS OF A, N <= M; X: ; ARRAY X[1:M]; ENTRY: THE RIGHT-HAND SIDE VECTOR; EXIT: THE SOLUTION VECTOR IN X[1:N]; EM: ; ARRAY EM[0:7]; ENTRY: EM[0]: THE MACHINE PRECISION; EM[2]: THE RELATIVE PRECISION OF THE SINGULAR VALUES; EM[4]: THE MAXIMAL NUMBER OF ITERATIONS TO BE PERFORMED IN THE SINGULAR VALUES DECOMPOSITION; EM[6]: THE MINIMAL NON-NEGLECTABLE SINGULAR VALUE; EXIT:EM[1]: THE INFINITY NORM OF THE MATRIX; EM[3]: THE MAXIMAL NEGLECTED SUPERDIAGONAL ELEMENT; EM[5]: THE NUMBER OF ITERATIONS PERFORMED IN THE SINGULAR VALUES DECOMPOSITION; EM[7]: THE NUMERICAL RANK OF THE MATRIX, I.E. THE NUMBER OF SINGULAR VALUES GREATER THAN OR EQUAL TO EM[6]. PROCEDURES USED : QRISNGVALDEC = CP34273 SOLSVDOVR = CP34280 REQUIRED CENTRAL MEMORY : AUXILIARY ARRAYS ARE DECLARED TO A TOTAL OF (N + 2) * N REALS RUNNING TIME : ROUGHLY PROPORTIONAL TO (M + N) * N * N METHOD AND PERFORMANCE : THE SOLUTION IS FOUND IN TWO STEPS : 1. THE SINGULAR VALUES DECOMPOSITION IS CALCULATED BY MEANS OF THE PROCEDURE QRISNGVALDEC (SECTION 3.5.1.2); 2. THE SOLUTION IS CALCULATED BY MEANS OF THE PROCEDURE SOLSVDOVR, (THIS SECTION); REFERENCES : WILKINSON, J.H. AND C.REINSCH HANDBOOK OF AUTOMATIC COMPUTATION, VOL. 2 (CONTRIBUTION I-10) LINEAR ALGEBRA HEIDELBERG (1971) EXAMPLE OF USE : FIRST A PROGRAM IS GIVEN, AND THEN THE RESULTS OF THIS PROGRAM : BEGIN ARRAY A[1:8,1:5], B[1:8], EM[0:7]; INTEGER I; A[1,1]:=22; A[1,2]:= A[2,3]:=10; A[1,3]:= A[7,1]:= A[8,5]:=2; A[1,4]:= A[3,5]:=3; A[1,5]:= A[2,2]:=7; A[2,1]:=14; A[2,5]:=8; A[2,4]:= A[8,3]:=0; A[3,1]:= A[3,3]:= A[6,5]:=-1; A[3,2]:=13; A[3,4]:=-11; A[4,1]:=-3; A[4,2]:= A[4,4]:= A[5,4]:= A[8,4]:=-2; A[4,3]:=13; A[4,5]:= A[5,5]:= A[8,1]:=4; A[5,1]:= A[6,1]:=9; A[5,2]:=8; A[5,3]:= A[6,2]:= A[7,5]:=1; A[6,3]:=-7; A[6,4]:= A[7,4]:= A[8,2]:=5; A[7,2]:=-6; A[7,3]:=6; B[1]:=-1; B[2]:=2; B[3]:= B[7]:=1; B[4]:=4; B[5]:= B[8]:=0; B[6]:=-3; EM[0]:=-14; EM[2]:=-12; EM[4]:=80; EM[6]:=-10; I:= SOLOVR(A, 8, 5, B, EM); OUTPUT(61, (4B, (NUMBER SINGULAR VALUES NOT FOUND : ), 3ZD,/, 4B, (NORM : ), N,/, 4B, (MAX NEGL SUBD ELEM : ), N,/, 4B, (NUMBER ITERATIONS : ), 3ZD, /, 4B, (RANK : ), 3ZD, /), I, EM[1], EM[3], EM[5], EM[7]); OUTPUT(61, (/, 4B, (SOLUTION VECTOR),/,/, 5(4B, N, /)), B[1], B[2], B[3], B[4], B[5]) END NUMBER SINGULAR VALUES NOT FOUND : 0 NORM : +4.4000000000000+001 MAX NEGL SUBD ELEM : +4.3977072741076-014 NUMBER ITERATIONS : 6 RANK : 3 SOLUTION VECTOR -8.3333333333334-002 +1.0989227456287-015 +2.5000000000000-001 -8.3333333333332-002 +8.3333333333334-002 EOP SOURCE TEXT(S): 0CODE 34280; PROCEDURE SOLSVDOVR(U, VAL, V, M, N, X, EM); VALUE M, N; INTEGER M, N; ARRAY U, VAL, V, X, EM; BEGIN INTEGER I; REAL MIN; ARRAY X1[1:N]; MIN:= EM[6]; FOR I:= 1 STEP 1 UNTIL N DO X1[I]:= IF VAL[I] <= MIN THEN 0 ELSE TAMVEC(1, M, I, U, X) / VAL[I]; FOR I:= 1 STEP 1 UNTIL N DO X[I]:= MATVEC(1, N, I, V, X1) END SOLSVDOVR; EOP 0CODE 34281; INTEGER PROCEDURE SOLOVR(A, M, N, X, EM); VALUE M, N; INTEGER M, N; ARRAY A, X, EM; BEGIN INTEGER I; ARRAY VAL[1:N], V[1:N,1:N]; SOLOVR:= I:= QRISNGVALDEC(A, M, N, VAL, V, EM); IF I = 0 THEN SOLSVDOVR(A, VAL, V, M, N, X, EM) END SOLOVR; EOP ########################################################################## ########################################################################## 1SECTION 3.1.1.3.1.2 (DECEMBER 1975) AUTHOR : D.T.WINTER INSTITUTE : MATHEMATICAL CENTRE RECEIVED : 731217 BRIEF DESCRIPTION : THIS SECTION CONTAINS 2 PROCEDURES FOR THE SOLUTION OF AN UNDERDETERMINED SYSTEM OF LINEAR EQUATIONS: SOLUND EXPECTS AS INPUT THE MATRIX OF THE SYSTEM OF EQUATIONS, CALCULATES THE SINGULAR VALUES DECOMPOSITION BY MEANS OF THE PROCEDURE QRISNGVALDEC, AND SOLVES THE SYSTEM BY MEANS OF THE PROCEDURE SOLSVDUND. SOLSVDUND ASSUMES THAT THE MATRIX IS ALREADY DECOMPOSED AND SOLVES THE SYSTEM OF EQUATIONS, MULTIPLYING THE RIGHT-HAND SIDE BY THE PSEUDO-INVERSE OF THE GIVEN MATRIX. KEYWORDS : BEST LEAST-SQUARES SOLUTION SINGULAR VALUES PSEUDO-INVERSE SUBSECTION : SOLSVDUND CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE SOLSVDUND(U, VAL, V, M, N, X, EM); VALUE M, N; INTEGER M, N; ARRAY U, VAL, V, X, EM; CODE 34282; THE MEANING OF THE FORMAL PARAMETERS IS : U: ; ARRAY U[1:M,1:N]; ENTRY:THE MATRIX U IN THE SINGULAR VALUES DECOMPOSITION V*S*U'. VAL: ; ARRAY VAL[1:N]; ENTRY:THE SINGULAR VALUES; V: ; ARRAY V[1:N,1:N]; ENTRY:THE MATRIX V IN THE SINGULAR VALUES DECOMPOSITION. N: ; THE LENGTH OF THE RIGHT-HAND SIDE VECTOR; M: ; THE NUMBER OF UNKNOWNS, N SHOULD SATISFY N <= M; X: ; ARRAY X[1:M]; ENTRY: THE RIGHT-HAND SIDE VECTOR IN X[1:N]; EXIT: THE SOLUTION VECTOR IN X[1:M]; EM: ; ARRAY EM[6:6]; ENTRY: EM[6]: THE MINIMAL NON-NEGLECTABLE SINGULAR VALUE. PROCEDURES USED : MATVEC = CP34011 TAMVEC = CP34012 REQUIRED CENTRAL MEMORY : AN AUXILIARY ARRAY OF N REALS IS DECLARED RUNNING TIME : ROUGHLY PROPORTIONAL TO (M + N) * N METHOD AND PERFORMANCE : THE SOLUTION IS FOUND IN THREE STEPS : 1. V' * X = X1 IS CALCULATED, 2. VAL+ * X1 = X2 IS CALCULATED, HERE VAL+ DENOTES THE DIAGONAL MATRIX OBTAINED FROM VAL BY SETTING VAL+[I,I] = 1/VAL[I] IF VAL[I] GREATER THAN OR EQUAL TO EM[6], AND 0 OTHERWISE, 3. THE SOLUTION U * X2 IS CALCULATED. LANGUAGE : ALGOL 60 SUBSECTION : SOLUND CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : INTEGER PROCEDURE SOLUND(A, M, N, X, EM); VALUE M, N; INTEGER M, N; ARRAY A, X, EM; CODE 34283; SOLUND:= THE NUMBER OF SINGULAR VALUES NOT FOUND, I.E. ZERO IF ALL SINGULAR VALUES ARE CALCULATED. THE MEANING OF THE FORMAL PAREMETERS IS : A: ; ARRAY A[1:M,1:N]; ENTRY: THE TRANSPOSE OF THE MATRIX; M: ; THE NUMBER OF ROWS OF A; N: ; THE NUMBER OF COLUMNS OF A, N <= M; X: ; ARRAY X[1:M]; ENTRY: THE RIGHT-HAND SIDE VECTOR IN X[1:N]; EXIT: THE SOLUTION VECTOR. EM: ; ARRAY EM[0:7]; ENTRY: EM[0]: THE MACHINE PRECISION; EM[2]: THE RELATIVE PRECISION FOR THE SINGULAR VALUES; EM[4]: THE MAXIMAL NUMBER OF ITERATIONS TO BE PERFORMED IN THE SINGULAR VALUES DECOMPOSITION; EM[6]: THE MINIMAL NON-NEGLECTABLE SINGULAR VALUE; EXIT: EM[1]: THE INFINITY NORM OF THE MATRIX; EM[3]: THE MAXIMAL NEGLECTED SUPERDIAGONAL ELEMENT; EM[5]: THE NUMBER OF ITERATIONS PERFORMED IN THE SINGULAR VALUES DECOMPOSITION; EM[7]: THE NUMERICAL RANK OF THE MATRIX, I.E. THE NUMBER OF SINGULAR VALUES GREATER THAN OR EQUAL TO EM[6]. PROCEDURES USED : QRISNGVALDEC = CP34273 SOLSVDUND = CP34282 REQUIRED CENTRAL MEMORY : AUXILIARY ARRAYS ARE DECLARED TO A TOTAL OF (N + 1) * N REALS METHOD AND PERFORMANCE : THE SOLUTION IS FOUND IN TWO STEPS : 1. THE SINGULAR VALUES DECOMPOSITION IS CALCULATED BY MEANS OF THE PROCEDURE QRISNGVALDEC; 2. THE SOLUTION IS CALCULATED BY MEANS OF THE PROCEDURE SOLSVDUND. RUNNING TIME : ROUGHLY PROPORTIONAL TO (M + N) * N * N LANGUAGE : ALGOL-60 REFERENCES : WILKINSON, J.H. AND C.REINSCH HANDBOOK OF AUTOMATIC COMPUTATION, VOL. 2 LINEAR ALGEBRA HEIDELBERG (1971) EXAMPLE OF USE : FIRST WE GIVE A PROGRAM, AND THAN THE RESULTS OF THIS PROGRAM : BEGIN ARRAY A[1:8,1:5], B[1:8], EM[0:7]; INTEGER I; A[1,1]:=22; A[1,2]:= A[2,3]:=10; A[1,3]:= A[7,1]:= A[8,5]:=2; A[1,4]:= A[3,5]:=3; A[1,5]:= A[2,2]:=7; A[2,1]:=14; A[2,5]:=8; A[2,4]:= A[8,3]:=0; A[3,1]:= A[3,3]:= A[6,5]:=-1; A[3,2]:=13; A[3,4]:=-11; A[4,1]:=-3; A[4,2]:= A[4,4]:= A[5,4]:= A[8,4]:=-2; A[4,3]:=13; A[4,5]:= A[5,5]:= A[8,1]:=4; A[5,1]:= A[6,1]:=9; A[5,2]:=8; A[5,3]:= A[6,2]:= A[7,5]:=1; A[6,3]:=-7; A[6,4]:= A[7,4]:= A[8,2]:=5; A[7,2]:=-6; A[7,3]:=6; B[1]:=-1; B[2]:=2; B[3]:=1; B[4]:=4; B[5]:=0; EM[0]:=-14; EM[2]:=-12; EM[4]:=80; EM[6]:=-10; I:= SOLUND(A, 8, 5, B, EM); OUTPUT(61, (4B, (NUMBER SINGULAR VALUES NOT FOUND : ), 3ZD,/, 4B, (NORM : ),N, /, 4B, (MAX NEGL SUBD ELEM : ), N,/, 4B, (NUMBER ITERATIONS : ), 3ZD, /, 4B, (RANK : ), 3ZD, /), I, EM[1], EM[3], EM[5], EM[7]); OUTPUT(61, (/, 4B, (SOLUTION VECTOR), /,/, 8(4B, N,/)), B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8]) END NUMBER SINGULAR VALUES NOT FOUND : 0 NORM : +4.4000000000000+001 MAX NEGL SUBD ELEM : +4.3977072741076-014 NUMBER ITERATIONS : 6 RANK : 3 SOLUTION VECTOR +1.6410256410255-002 +1.4807692307694-002 -4.8397435897438-002 +1.0000000000002-002 -6.7948717948740-003 +1.1602564102565-002 +2.9999999999996-002 -8.3974358974328-003 SOURCE TEXT(S): 0CODE 34282; PROCEDURE SOLSVDUND(U, VAL, V, M, N, X, EM); VALUE M, N; INTEGER M, N; ARRAY U, VAL, V, X, EM; BEGIN INTEGER I; REAL MIN; ARRAY X1[1:N]; MIN:= EM[6]; FOR I:= 1 STEP 1 UNTIL N DO X1[I]:= IF VAL[I] <= MIN THEN 0 ELSE TAMVEC(1, N, I, V, X) / VAL[I]; FOR I:= 1 STEP 1 UNTIL M DO X[I]:= MATVEC(1, N, I, U, X1) END SOLSVDUND; EOP 0CODE 34283; INTEGER PROCEDURE SOLUND(A, M, N, X, EM); VALUE M, N; INTEGER M, N; ARRAY A, X, EM; BEGIN INTEGER I; ARRAY VAL[1:N], V[1:N,1:N]; SOLUND:= I:= QRISNGVALDEC(A, M, N, VAL, V, EM); IF I = 0 THEN SOLSVDUND(A, VAL, V, M, N, X, EM) END SOLUND; EOP ########################################################################## ########################################################################## 1SECTION 3.1.1.3.1.3 (DECEMBER 1975) AUTHOR : D.T.WINTER INSTITUTE : MATHEMATICAL CENTRE RECEIVED : 731217 BRIEF DESCRIPTION : THIS SECTION CONTAINS 2 PROCEDURES FOR THE CALCULATION OF THE HOMOGENEOUS EQUATIONS A * X = 0 AND X' * A = 0, WHERE A DENOTES A MATRIX, AND X A VECTOR: HOMSOLSVD ASSUMES THAT THE SINGULAR VALUES DECOMPOSITION OF A HAS BEEN GIVEN. HOMSOL FIRST CALCULATES THE SINGULAR VALUES DECOMPOSITION BY MEANS OF THE PROCEDURE QRISNGVALDEC. KEYWORDS : HOMOGENEOUS SOLUTION SINGULAR VALUES SUBSECTION : HOMSOLSVD CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE HOMSOLSVD(U, VAL, V, M, N); VALUE M, N; INTEGER M, N; ARRAY U, VAL, V; CODE 34284; THE MEANING OF THE FORMAL PARAMETERS IS : U: ; ARRAY U[1:M,1:N]; ENTRY: THE MATRIX U IN THE SINGULAR VALUES DECOMPOSITION A=U*S*V'. EXIT: THE COLUMNS OF U THAT CORRESPOND TO THE ELEMENTS OF VAL WITH A VALUE SMALLER THAN SOME SMALL CONSTANT MAY BE SEEN AS THE SOLUTIONS OF X' * A = 0; VAL: ; ARRAY VAL[1:N]; ENTRY:THE SINGULAR VALUES; EXIT :THE ARRAY WILL BE ORDERED IN SUCH A WAY THAT VAL[I] < VAL[J] IF J < I; V: ; ARRAY V[1:N,1:N]; ENTRY:THE MATRIX V IN THE SINGULAR VALUES DECOMPOSITION; EXIT:THE COLUMNS OF V THAT CORRESPOND TO THE ELEMENTS OF VAL THAT ARE SMALLER THAN SOME SMALL CONSTANT MAY BE SEEN AS THE SOLUTIONS OF THE EQUATION A * X = 0; M: ; THE NUMBER OF ROWS OF U; N: ; THE NUMBER OF COLUMNS OF U; PROCEDURES USED : ICHCOL = CP34031 RUNNING TIME : PROPORTIONAL TO N ' 2 METHOD AND PERFORMANCE : THE PROCEDURE DOES NOTHING MORE THAN A SIMPLE SORTING PROCESS ON THE ELEMENTS OF THE ARRAY VAL, AT THE SAME TIME THE COLUMNS OF U AND V ARE INTERCHANGED, ACCORDING TO THE INTERCHANGING OF THE ELEMENTS VAL. LANGUAGE : ALGOL 60 SUBSECTION : HOMSOL CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : INTEGER PROCEDURE HOMSOL(A, M, N, V, EM); VALUE M, N; INTEGER M, N; ARRAY A, V, EM; CODE 34285; HOMSOL:= THE NUMBER OF SINGULAR VALUES NOT FOUND, I.E. ZERO IF ALL SINGULAR VALUES ARE CALCULATED. THE MEANING OF THE FORMAL PAREMETERS IS : A: ; ARRAY A[1:M,1:N]; ENTRY: THE MATRIX; EXIT: THE COLUMNS OF A THAT CORRESPOND TO THE ELEMENTS OF VAL THAT ARE SMALLER THAN SOME SMALL CONSTANT, MAY BE SEEN AS THE SOLUTIONS OF THE EQUATION X' * A = 0. M: ; THE NUMBER OF ROWS OF A. N: ; THE NUMBER OF COLUMNS OF A. V: ; ARRAY V[1:N,1:N]; EXIT: THE COLUMNS OF V THAT CORRESPOND TO ELEMENTS OF VAL SMALLER THAN SOME SMALL CONSTANT MAY BE SEEN AS THE SOLUTIONS OF THE EQUATION A * X = 0. EM: ; ARRAY EM[0:7]; ENTRY: EM[0]: THE MACHINE PRECISION; EM[2]: THE RELATIVE PRECISION FOR THE SINGULAR VALUES; EM[4]: THE MAXIMAL NUMBER OF ITERATIONS TO BE PERFORMED IN THE SINGULAR VALUES DECOMPOSITION. EM[6]: THE MINIMAL NON-NEGLECTABLE SINGULAR VALUE; EXIT: EM[1]: THE INFINITY NORM OF THE MATRIX; EM[3]: THE MAXIMAL NEGLECTED SUPERDIAGONAL ELEMENT; EM[5]: THE NUMBER OF ITERATIONS PERFORMED IN THE SINGULAR VALUES DECOMPOSITION; EM[7]: THE NUMERICAL RANK OF THE MATRIX, I.E. THE NUMBER OF SINGULAR VALUES GREATER THAN OR EQUAL TO EM[6]. PROCEDURES USED : QRISNGVALDEC = CP34273 HOMSOLSVD = CP34284 METHOD AND PERFORMANCE : THE SOLUTION IS FOUND IN TWO STEPS : 1. THE SINGULAR VALUES DECOMPOSITION IS CALCULATED BY MEANS OF THE PROCEDURE QRISNGVALDEC; 2. THE SINGULAR VALUES ARE ORDERED BY MEANS OF THE PROCEDURE HOMSOLSVD (PROVIDED THAT ALL SINGULAR VALUES HAVE BEEN FOUND). RUNNING TIME : ROUGHLY PROPORTIONAL TO (M + N) * N * N LANGUAGE : ALGOL 60 REFERENCES : WILKINSON, J.H. AND C.REINSCH HANDBOOK OF AUTOMATIC COMPUTATION, VOL. 2 LINEAR ALGEBRA HEIDELBERG (1971) EXAMPLE OF USE : FIRST WE GIVE A PROGRAM, AND THAN THE RESULTS OF THIS PROGRAM : BEGIN ARRAY A[1:8,1:5], V[1:5,1:5], EM[0:7]; INTEGER I, J; A[1,1]:=22; A[1,2]:= A[2,3]:=10; A[1,3]:= A[7,1]:= A[8,5]:=2; A[1,4]:= A[3,5]:=3; A[1,5]:= A[2,2]:=7; A[2,1]:=14; A[2,5]:=8; A[2,4]:= A[8,3]:=0; A[3,1]:= A[3,3]:= A[6,5]:=-1; A[3,2]:=13; A[3,4]:=-11; A[4,1]:=-3; A[4,2]:= A[4,4]:= A[5,4]:= A[8,4]:=-2; A[4,3]:=13; A[4,5]:= A[5,5]:= A[8,1]:=4; A[5,1]:= A[6,1]:=9; A[5,2]:=8; A[5,3]:= A[6,2]:= A[7,5]:=1; A[6,3]:=-7; A[6,4]:= A[7,4]:= A[8,2]:=5; A[7,2]:=-6; A[7,3]:=6; EM[0]:=-14; EM[2]:=-12; EM[4]:=80; EM[6]:=-10; I:= HOMSOL(A, 8, 5, V, EM); OUTPUT(61, (4B, (NUMBER SINGULAR VALUES NOT FOUND : ), 3ZD,/, 4B, (NORM : ), N,/, 4B, (MAX NEGL SUBD ELEM : ), N,/, 4B, (NUMBER ITERATIONS : ), 3ZD, /, 4B, (RANK : ), 3ZD, /), I, EM[1], EM[3], EM[5], EM[7]); FOR J:= EM[7] + 1 STEP 1 UNTIL 5 DO OUTPUT(61, (/, 4B, (COLUMN NUMBER : ), D, 5(/ ,4B, 2(N)), 3(/, 4B, N), /), J, A[1,J], V[1,J], A[2,J], V[2,J], A[3,J], V[3,J], A[4,J], V[4,J], A[5,J], V[5,J], A[6,J], A[7,J], A[8,J]) END NUMBER SINGULAR VALUES NOT FOUND : 0 NORM : +4.4000000000000+001 MAX NEGL SUBD ELEM : +4.3977072741076-014 NUMBER ITERATIONS : 6 RANK : 3 COLUMN NUMBER : 4 +3.4708599800002-001 -4.1909548511171-001 -6.0723369623011-001 +4.4050912303713-001 +1.2207461910546-001 -5.2004549247434-002 +6.1882574433898-001 +6.7605914021670-001 -4.6344371870996-003 +4.1297730284731-001 +3.3409859838125-001 -3.3528410857408-002 -1.3547246422274-002 COLUMN NUMBER : 5 -2.5533109413182-001 +0.0000000000000+000 -1.7359809248754-001 -4.1854806384909-001 -2.2081225414163-001 -3.4879005320758-001 +4.1165471593410-002 -2.4415303724531-001 +9.2044247057656-001 +8.0221712237742-001 -2.8895953996492-002 +6.1327596621994-002 -4.9058079025100-002 SOURCE TEXT(S): CODE 34284; PROCEDURE HOMSOLSVD(U, VAL, V, M, N); VALUE M, N; INTEGER M, N; ARRAY U, VAL, V; BEGIN INTEGER I, J; REAL X; FOR I:= N STEP - 1 UNTIL 2 DO FOR J:= I - 1 STEP - 1 UNTIL 1 DO IF VAL[I] > VAL[J] THEN BEGIN X:= VAL[I]; VAL[I]:= VAL[J]; VAL[J]:= X; ICHCOL(1, M, I, J, U); ICHCOL(1, N, I, J, V) END END HOMSOLSVD; EOP 0CODE 34285; INTEGER PROCEDURE HOMSOL(A, M, N, V, EM); VALUE M, N; INTEGER M, N; ARRAY A, V, EM; BEGIN INTEGER I; ARRAY VAL[1:N]; HOMSOL:= I:= QRISNGVALDEC(A, M, N, VAL, V, EM); IF I = 0 THEN HOMSOLSVD(A, VAL, V, M, N) END HOMSOL; EOP ########################################################################## ########################################################################## 1SECTION 3.1.1.3.1.4 (DECEMBER 1979) AUTHOR : D.T.WINTER INSTITUTE : MATHEMATICAL CENTRE RECEIVED : 731217 BRIEF DESCRIPTION : THIS SECTION CONTAINS TWO PROCEDURES FOR THE CALCULATION OF THE PSEUDO-INVERSE OF A MATRIX: PSDINVSVD ASSUMES THAT THE MATRIX IS GIVEN AS SINGULAR VALUES DECOMPOSITION. PSDINV FIRST CALCULATES THIS DECOMPOSITION. KEYWORDS : PSEUDO-INVERSE SINGULAR VALUES SUBSECTION : PSDINVSVD CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE PSDINVSVD(U, VAL, V, M, N, EM); VALUE M, N; INTEGER M, N; ARRAY U, VAL, V, EM; CODE 34286; THE MEANING OF THE FORMAL PARAMETERS IS : U: ; ARRAY U[1:M,1:N]; ENTRY: THE MATRIX U IN THE SINGULAR VALUES DECOMPOSITION U * S * V'; EXIT: THE TRANSPOSE OF THE PSEUDO-INVERSE. VAL: ; ARRAY VAL[1:N]; THE SINGULAR VALUES. V: ; ARRAY V[1:N,1:N]; THE MATRIX V IN THE SINGULAR VALUES DECOMPOSITION U * S * V'. M: ; THE NUMBER OF ROWS OF U. N: ; THE NUMBER OF COLUMNS OF V. EM: ; ARRAY EM[6:6]; ENTRY: EM[6]:THE MINIMAL NON-NEGLECTABLE SINGULAR VALUE. PROCEDURES USED : MATVEC = CP34011 REQUIRED CENTRAL MEMORY : AN AUXILIARY ARRAY OF N REALS IS DECLARED RUNNING TIME : ROUGHLY PROPORTIONAL TO M * N * N METHOD AND PERFORMANCE : THE PSEUDO-INVERSE IS CALCULATED IN TWO STEPS : 1. THE MATRIX X = VAL+ * U' IS CALCULATED, WHERE VAL+ DENOTES THE DIAGONAL MATRIX OBTAINED FROM VAL BY PUTTING VAL+[I,I] = 1/VAL[I] IF VAL[I] GREATER THAN OR EQUAL TO EM[6], AND VAL+[I,I] = 0 OTHERWISE. 2. THE PSEUDO INVERSE (V * X) IS CALCULATED. SUBSECTION : PSDINV CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : INTEGER PROCEDURE PSDINV(A, M, N, EM); VALUE M, N; INTEGER M, N; ARRAY A, EM; CODE 34287; PSDINV:= THE NUMBER OF SINGULAR VALUES NOT FOUND, I.E. ZERO IF ALL SINGULAR VALUES ARE CALCULATED. THE MEANING OF THE FORMAL PARAMETERS IS : A ; ARRAY A[1:M,1:N]; ENTRY : THE GIVEN MATRIX; EXIT : THE TRANSPOSE OF THE PSEUDO-INVERSE; M: ; THE NUMBER OF ROWS OF A; N: ; THE NUMBER OF COLUMNS OF A, N<= M; EM: ; ARRAY EM[0:7]; ENTRY: EM[0]: THE MACHINE PRECISION; EM[2]: THE RELATIVE PRECISION FOR THE SINGULAR VALUES; EM[4]: THE MAXIMAL NUMBER OF ITERATIONS TO BE PERFORMED; EM[6]: THE MINIMAL NON-NEGLECTABLE SINGULAR VALUE; EXIT: EM[1]: THE INFINITY NORM OF THE MATRIX; EM[3]: THE MAXIMAL NEGLECTED SUPERDIAGONAL ELEMENT; EM[5]: THE NUMBER OF ITERATIONS PERFORMED IN THE SINGULAR VALUES DECOMPOSITION; EM[7]: THE NUMERICAL RANK OF THE MATRIX, I.E. THE NUMBER OF SINGULAR VALUES GREATER THAN OR EQUAL TO EM[6]; PROCEDURES USED : QRISNGVALDEC = CP34273 PSDINVSVD = CP34286 REQUIRED CENTRAL MEMORY : AUXILIARY ARRAYS ARE DECLARED TO A TOTAL OF (N + 1) * N REALS RUNNING TIME : ROUGHLY PROPORTIONAL TO (2M + N) * N * N METHOD AND PERFORMANCE : FIRST THE SINGULAR VALUES DECOMPOSITION IS CALCULATED, AND THEN THE PSEUDO-INVERSE IS CALCULATED BY PSDINVSVD. REFERENCES : WILKINSON, J.H. AND C.REINSCH HANDBOOK OF AUTOMATIC COMPUTATION, VOL.2 LINEAR ALGEBRA HEIDELBERG (1971) EXAMPLE OF USE : FIRST WE GIVE A PROGRAM, AND THEN THE RESULTS OF THIS PROGRAM : BEGIN ARRAY A[1:8,1:5], EM[0:7]; INTEGER I, J; A[1,1]:=22; A[1,2]:= A[2,3]:=10; A[1,3]:= A[7,1]:= A[8,5]:=2; A[1,4]:= A[3,5]:=3; A[1,5]:= A[2,2]:=7; A[2,1]:=14; A[2,5]:=8; A[2,4]:= A[8,3]:=0; A[3,1]:= A[3,3]:= A[6,5]:=-1; A[3,2]:=13; A[3,4]:=-11; A[4,1]:=-3; A[4,2]:= A[4,4]:= A[5,4]:= A[8,4]:=-2; A[4,3]:=13; A[4,5]:= A[5,5]:= A[8,1]:=4; A[5,1]:= A[6,1]:=9; A[5,2]:=8; A[5,3]:= A[6,2]:= A[7,5]:=1; A[6,3]:=-7; A[6,4]:= A[7,4]:= A[8,2]:=5; A[7,2]:=-6; A[7,3]:=6; EM[0]:=-14; EM[2]:=-12; EM[4]:=80; EM[6]:=-10; I:= PSDINV(A, 8, 5, EM); OUTPUT(61, (4B, (NUMBER SINGULAR VALUES NOT FOUND : ), 3ZD,/, 4B, (NORM : ), N,/, 4B, (MAX NEGL SUBD ELEM : ), N,/, 4B, (NUMBER ITERATIONS : ), 3ZD, /, 4B, (RANK : ), 3ZD, /), I, EM[1], EM[3], EM[5], EM[7]); OUTPUT(61, (/, 4B, (TRANSPOSE OF PSEUDO-INVERSE), /, 4B, (FIRST THREE COLUMNS), /, /, 8(4B, 3(N), /), /, /, 4B, (LAST TWO COLUMNS), /, /, 8(15B, 2(N), /)), A[1,1], A[1,2], A[1,3], A[2,1], A[2,2], A[2,3], A[3,1], A[3,2], A[3,3], A[4,1], A[4,2], A[4,3], A[5,1], A[5,2], A[5,3], A[6,1], A[6,2], A[6,3], A[7,1], A[7,2], A[7,3], A[8,1], A[8,2], A[8,3], A[1,4], A[1,5], A[2,4], A[2,5], A[3,4], A[3,5], A[4,4], A[4,5], A[5,4], A[5,5], A[6,4], A[6,5], A[7,4], A[7,5], A[8,4], A[8,5]) END NUMBER SINGULAR VALUES NOT FOUND : 0 NORM : +4.4000000000000+001 MAX NEGL SUBD ELEM : +4.3977072741076-014 NUMBER ITERATIONS : 6 RANK : 3 TRANSPOSE OF PSEUDO-INVERSE FIRST THREE COLUMNS +2.1129807692308-002 +4.6153846153850-003 -2.1073717948727-003 +9.3108974358974-003 +2.2115384615376-003 +2.0528846153848-002 -1.1097756410256-002 +2.7403846153848-002 -3.8862179487199-003 -7.9166666666667-003 -5.0000000000007-003 +3.3750000000001-002 +5.5128205128205-003 +9.8076923076935-003 -8.9743589743826-004 +1.4318910256410-002 -2.5961538461548-003 -2.0136217948716-002 +4.8958333333335-003 -1.4999999999998-002 +1.5312499999996-002 +1.5064102564102-003 +7.4038461538447-003 -1.6987179487147-003 LAST TWO COLUMNS +7.6041666666662-003 +3.8060897435894-003 -2.0833333333295-004 +1.0016025641026-002 -2.7604166666667-002 +4.2067307692303-003 -5.4166666666662-003 +1.0416666666667-002 -5.0000000000005-003 +3.2051282051275-003 +1.2812500000000-002 -6.2099358974354-003 +1.2395833333332-002 +2.6041666666656-003 -4.9999999999993-003 +1.6025641025649-003 EOP SOURCE TEXT(S): 0CODE 34286; PROCEDURE PSDINVSVD(U, VAL, V, M, N, EM); VALUE M, N; INTEGER M, N; ARRAY U, VAL, V, EM; BEGIN INTEGER I, J; REAL MIN, VALI; ARRAY X[1:N]; MIN:= EM[6]; FOR I:= 1 STEP 1 UNTIL N DO IF VAL[I] > MIN THEN BEGIN VALI:= 1 / VAL[I]; FOR J:= 1 STEP 1 UNTIL M DO U[J,I]:= U[J,I] * VALI END ELSE FOR J:= 1 STEP 1 UNTIL M DO U[J,I]:= 0; FOR I:= 1 STEP 1 UNTIL M DO BEGIN FOR J:= 1 STEP 1 UNTIL N DO X[J]:= U[I,J]; FOR J:= 1 STEP 1 UNTIL N DO U[I,J]:= MATVEC(1, N, J, V, X) END END PSDINVSVD; EOP 0CODE 34287; INTEGER PROCEDURE PSDINV(A, M, N, EM); VALUE M, N; INTEGER M, N; ARRAY A, EM; BEGIN INTEGER I; ARRAY VAL[1:N], V[1:N,1:N]; PSDINV:= I:= QRISNGVALDEC(A, M, N, VAL, V, EM); IF I = 0 THEN PSDINVSVD(A, VAL, V, M, N, EM) END PSDINV; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.1.1.1 (DECEMBER 1975) AUTHOR : T.J. DEKKER. REVISOR : J. KOK. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 730903. BRIEF DESCRIPTION : THIS SECTION CONTAINS THE PROCEDURE DECBND FOR THE DECOMPOSITION OF A BAND MATRIX BY GAUSSIAN ELIMINATION WITH STABILIZING ROW INTERCHANGES (PARTIAL PIVOTING). KEY WORDS : LINEAR EQUATIONS, PARTIAL PIVOTING, GAUSSIAN ELIMINATION, BAND MATRIX. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE DECBND(A, N, LW, RW, AUX, M, P); VALUE N, LW, RW; INTEGER N, LW, RW; INTEGERARRAY P; ARRAY A, M, AUX; CODE 34320; THE MEANING OF THE FORMAL PARAMETERS IS : A : ; ARRAY A[1 : (LW + RW) * (N - 1) + N]; ENTRY : A CONTAINS ROWWISE THE BAND ELEMENTS OF THE BAND MATRIX IN SUCH A WAY THAT THE (I,J)-TH ELEMENT OF THE MATRIX IS GIVEN IN A[( LW + RW ) * (I - 1) + J], I=1,...,N AND J=MAX(1,I-LW),...,MIN(N,I+RW). THE VALUES OF THE REMAINING ELEMENTS OF A ARE IRRELEVANT. EXIT : THE BAND ELEMENTS OF THE GAUSSIAN ELIMINATED MATRIX, WHICH IS AN UPPERTRIANGULAR BAND MATRIX WITH (LW + RW) CODIAGONALS, ARE ROWWISE DELIVERED IN A AS FOLLOWS: THE (I,J)-TH ELEMENT OF U IS A [ ( LW + RW ) * (I - J) + J ],I=1,...,N AND J=I,...,MIN(N,I + LW + RW). N : ; ORDER OF THE BAND MATRIX; LW : ; NUMBER OF LEFT CODIAGONALS OF A; RW : ; NUMBER OF RIGHT CODIAGONALS OF A; AUX : ; ARRAY AUX[1 : 5]; ENTRY :AUX[2] = EPS IS A RELATIVE TOLERANCE TO CONTROL THE ELIMINATION; THE PROCESS IS DISCONTINUED IF (EPS > PIVOT[I] / EUCLIDEAN NORM OF I-TH ROW) IN THE I-TH ELIMINATION STEP; NORMAL EXIT : AUX[1] = SIGN OF THE DETERMINANT OF THE MATRIX (+1 OR -1); AUX[3] = N; AUX[5] = MINIMUM ABSOLUTE VALUE OF PIVOT[I] / EUCLIDEAN NORM OF THE I-TH ROW; ABNORMAL EXIT : IF THE ELIMINATION CANNOT BE CARRIED OUT, I.E. IF TEMP (THE QUANTITY ABS(PIVOT[I] / EUCLIDEAN NORM OF THE I-TH ROW)) IS TOO SMALL IN THE I-TH ELIMINATION STEP : AUX[3] = I - 1, AUX[5] = TEMP; M : ; ARRAY M[1 : LW * (N - 2) + 1]; EXIT : THE GAUSSIAN MULTIPLIERS OF ALL ELIMINATIONS IN SUCH A WAY THAT THE I-TH MULTIPLIER OF THE J-TH STEP IS M [ LW * (J - 1) + I - J ]. P : ; INTEGERARRAY P[1 : N]; EXIT : THE PIVOTAL INDICES. PROCEDURES USED : VECVEC = CP34010, ELMVEC = CP34020, ICHVEC = CP34030. REQUIRED CENTRAL MEMORY : EXECUTION FIELD LENGTH : A REAL ARRAY OF N ELEMENTS IS DECLARED. RUNNING TIME : (C1 * LW + C2) * (LW + RW + 1) * N; THE CONSTANTS C1 AND C2 DEPEND UPON THE ARITHMETIC OF THE COMPUTER. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : DECBND PERFORMS THE DECOMPOSITION OF A MATRIX WHOSE NON-ZERO ELEMENTS ARE IN BAND FORM, AND WHOSE BAND ELEMENTS ARE STORED ROWWISE IN A ONE-DIMENSIONAL ARRAY. THE METHOD USED IS GAUSSIAN ELIMINATION WITH STABILIZING ROW INTERCHANGES (PARTIAL PIVOTING). THE GAUSSIAN ELIMINATION IS PERFORMED IN N STEPS. IN THE K-TH STEP, K = 1, ... , N, A PIVOT IS SELECTED IN THE K-TH COLUMN OF THE REMAINING SUBMATRIX OF ORDER N - K + 1 (THIS COLUMN CONTAINS AT MOST LW + 1 NON-ZERO ELEMENTS); THEN THE PIVOTAL ROW IS INTERCHANGED WITH THE K-TH ROW; SUBSEQUENTLY THE K-TH UNKNOWN IS ELIMINATED IN THE LAST N - K ROWS (ONLY THE FIRST LW OF THESE LAST ROWS ARE INVOLVED HERE). THE PIVOT IS SELECTED IN SUCH A WAY THAT ITS ABSOLUTE VALUE DIVIDED BY THE EUCLIDEAN NORM OF THE CORRESPONDING ROW OF THE MATRIX IS MAXIMAL. THUS, THE MATRIX IS EQUILIBRATED IN THIS PIVOTING STRATEGY SUCH, THAT THE ROWS EFFECTIVELY OBTAIN UNIT EUCLIDEAN NORM. THE PROCEDURE DELIVERS THE BAND ELEMENTS OF THE ELIMINATED MATRIX (WHICH IS AN UPPER TRIANGULAR MATRIX WITH LW + RW SUPERDIAGONALS) AND THE GAUSSIAN MULTIPLIERS FOR EACH ELIMINATION . THE ELIMINATION CANNOT BE CARRIED OUT IF THE ABSOLUTE VALUE OF THE PIVOT IS LESS THAN A GIVEN RELATIVE TOLERANCE (AUX[2]) TIMES THE EUCLIDEAN NORM OF THE CORRESPONDING ROW OF THE MATRIX. THEN THE PREVIOUS STEP NUMBER OF THE ELIMINATION IS DELIVERED (IN AUX[3], WHICH ELSE TAKES THE VALUE N). SEE ALSO REF [1], SECTION 212. REFERENCE : [1] DEKKER, T.J. : ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1, MC TRACT 22, 1968, MATHEMATISCH CENTRUM, AMSTERDAM. EXAMPLE OF USE : SEE EXAMPLE OF USE OF SOLBND. SOURCE TEXT(S) : 0CODE 34320; PROCEDURE DECBND(A, N, LW, RW, AUX, M, P); VALUE N, LW, RW; INTEGER N, LW, RW; INTEGER ARRAY P; ARRAY A, M, AUX; BEGIN INTEGER I, J, K, KK, KK1, PK, MK, IK, LW1, F, Q, W, W1, W2, NRW, IW, SDET; REAL R, S, EPS, MIN; ARRAY V[1:N]; F:= LW; W1:= LW + RW; W:= W1 + 1; W2:= W - 2; IW:= 0; SDET:= 1; NRW:= N - RW; LW1:= LW + 1; Q:= LW - 1; FOR I:= 2 STEP 1 UNTIL LW DO BEGIN Q:= Q - 1; IW:= IW + W1; FOR J:= IW - Q STEP 1 UNTIL IW DO A[J]:= 0 END; IW:= - W2; Q:= - LW; FOR I:= 1 STEP 1 UNTIL N DO BEGIN IW:= IW + W; IF I <= LW1 THEN IW:= IW - 1; Q:= Q + W; IF I > NRW THEN Q:= Q - 1; V[I]:= SQRT(VECVEC(IW, Q, 0, A, A)) END; EPS:= AUX[2]; MIN:= 1; KK:= - W1; MK:= - LW; IF F > NRW THEN W2:= W2 + NRW - F; FOR K:= 1 STEP 1 UNTIL N DO BEGINIF F < N THEN F:= F + 1; IK:= KK:= KK + W; MK:= MK + LW; S:= ABS(A[KK]) / V[K]; PK:= K; KK1:= KK + 1; FOR I:= K + 1 STEP 1 UNTIL F DO BEGIN IK:= IK + W1; M[MK + I - K]:= R:= A[IK]; A[IK]:= 0; R:= ABS(R) / V[I]; IF R > S THEN BEGIN S:= R; PK:= I END END; IF S < MIN THEN MIN:= S; IF S < EPS THEN BEGIN AUX[3]:= K - 1; AUX[5]:= S; GO TO END END; IF K + W2 >= N THEN W2:= W2 - 1; P[K]:= PK; IF PK ^= K THEN BEGIN V[PK]:= V[K]; PK:= PK - K; ICHVEC(KK1, KK1 + W2, PK * W1, A); SDET:= - SDET; R:= M[MK + PK]; M[MK + PK]:= A[KK]; A[KK]:= R ENDELSE R:= A[KK]; IF R < 0 THEN SDET:= - SDET; IW:= KK1; LW1:= F - K + MK; FOR I:= MK + 1 STEP 1 UNTIL LW1 DO BEGIN M[I]:= S:= M[I] / R; IW:= IW + W1; ELMVEC(IW, IW + W2, KK1 - IW, A, A, - S) END END; AUX[3]:= N; AUX[5]:= MIN; END: AUX[1]:= SDET END DECBND; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.1.1.2 (JUNE 1974) PAGE 1 CONTRIBUTOR : J. KOK. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 730903. BRIEF DESCRIPTION : THIS SECTION CONTAINS THE PROCEDURE DETERMBND FOR THE CALCULATION OF THE DETERMINANT OF A BAND MATRIX. KEY WORDS : DETERMINANT, BAND MATRIX. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : REALPROCEDURE DETERMBND(A, N, LW, RW, SGNDET); VALUE N, LW, RW, SGNDET; INTEGER N, LW, RW, SGNDET; ARRAY A; CODE 34321; DETERMBND DELIVERS THE DETERMINANT OF THE MATRIX. THE MEANING OF THE FORMAL PARAMETERS IS : A, N, LW, RW : SEE 'CALLING SEQUENCE' OF DECBND (SECTION 3.1.2.1.1.1.1.1.); ENTRY : THE CONTENTS OF A ARE AS PRODUCED BY DECBND OR DECSOLBND (SECTION 3.1.2.1.1.1.1.3.); SGNDET : ; ENTRY : THE SIGN OF THE DETERMINANT AS DELIVERED IN AUX[1] BY DECBND, IF THE ELIMINATION BY DECBND WAS SUCCESSFUL. PROCEDURES USED : NONE. RUNNING TIME : PROPORTIONAL TO N. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : DETERMBND CAN BE CALLED AFTER DECBND OR DECSOLBND ONLY IF THE GAUSSIAN ELIMINATION WAS SUCCESSFUL, I.E. IF AUX[3] = N. THE FUNCTION VALUE OF DETERMBND IS THE DETERMINANT OF THE GAUSSIAN ELIMINATED UPPER TRIANGULAR MATRIX PROVIDED WITH THE CORRECT SIGN THAT IS DELIVERED BY DECBND OR DECSOLBND IN AUX[1]. DETERMBND SHOULD NOT BE CALLED WHEN OVERFLOW CAN BE EXPECTED. EXAMPLE OF USE : SEE EXAMPLES OF USE OF SOLBND AND DECSOLBND. SOURCE TEXT(S) : 0CODE 34321; REALPROCEDURE DETERMBND(A, N, LW, RW, SGNDET); VALUE N, LW, RW, SGNDET; INTEGER N, LW, RW, SGNDET; ARRAY A; BEGININTEGER I, L; REAL P; L:= 1; P:= 1; LW:= LW + RW + 1; FOR I:= 1 STEP 1 UNTIL N DO BEGIN P:= A[L] * P; L:= L + LW END; DETERMBND:= ABS(P) * SGNDET END DETERMBND; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.1.1.3 (JUNE 1974) PAGE 1 AUTHOR : T.J. DEKKER. REVISOR : J. KOK. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 730903. BRIEF DESCRIPTION : THIS SECTION CONTAINS TWO PROCEDURES. A) SOLBND, FOR THE SOLUTION OF ONE OR MORE SYSTEMS OF LINEAR EQUATIONS WITH THE SAME COEFFICIENT MATRIX, IF THIS MATRIX HAS BEEN DECOMPOSED BY A CALL OF THE PROCEDURE DECBND (SECTION 3.1.2.1.1.1.1.1.). B) DECSOLBND, FOR THE SOLUTION OF ONE SYSTEM OF LINEAR EQUATIONS BY GAUSSIAN ELIMINATION WITH STABILIZING ROW INTERCHANGES (PARTIAL PIVOTING) IF THE COEFFICIENT MATRIX IS IN BAND FORM AND IS STORED ROWWISE IN A ONE-DIMENSIONAL ARRAY. KEY WORDS : LINEAR EQUATIONS, PARTIAL PIVOTING, GAUSSIAN ELIMINATION, BAND MATRIX. SUBSECTION : SOLBND. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE SOLBND(A, N, LW, RW, M, P, B); VALUE N, LW, RW; INTEGER N, LW, RW; INTEGERARRAY P; ARRAY A, M, B; CODE 34071; THE MEANING OF THE FORMAL PARAMETERS IS : A, N, LW, RW, M, P : SEE 'CALLING SEQUENCE' OF DECBND, ENTRY : THE CONTENTS OF THE ARRAYS A, M, P ARE AS PRODUCED BY DECBND; B : ; ARRAY B[1 : N]; ENTRY : THE RIGHT HAND SIDE OF THE SYSTEM OF LINEAR EQUATIONS; EXIT : THE SOLUTION OF THE SYSTEM. PROCEDURES USED : VECVEC = CP34010, ELMVEC = CP34020. RUNNING TIME : (C3 * LW + C4 * RW + C5) * N; THE CONSTANTS C3, C4 AND C5 DEPEND UPON THE ARITHMETIC OF THE COMPUTER. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : SOLBND CALCULATES THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS, PROVIDED THAT THE MATRIX WAS DECOMPOSED BY A SUCCESSFUL CALL OF DECBND (SECTION 3.1.2.1.1.1.1.1.). THE SOLUTION OF THE LINEAR SYSTEM IS OBTAINED BY CARRYING OUT THE ELIMINATIONS, FOR WHICH THE GAUSSIAN MULTIPLIERS ARE SAVED, ON THE RIGHT HAND SIDE, AND BY SOLVING THE NEW SYSTEM WITH THE UPPER TRIANGULAR BAND MATRIX , AS PRODUCED BY DECBND, BY BACK SUBSTITUTION. THE SOLUTIONS OF SEVERAL SYSTEMS WITH THE SAME COEFFICIENT MATRIX CAN BE OBTAINED BY SUCCESSIVE CALLS OF SOLBND. EXAMPLE OF USE : THE FOLLOWING PROGRAM SOLVES THE SYSTEM OF SIMULTANEOUS EQUATIONS 2 * X1 - X2 = 1 - X1 + 2 * X2 - X3 = 0 - X2 + 2 * X3 - X4 = 0 - X3 + 2 * X4 - X5 = 0 - X4 + 2 * X5 = 1 BEGINCOMMENT 730822, TEST DECBND, SOLBND AND DETERMBND; INTEGER I; INTEGERARRAY ROWIND[1 : 5]; ARRAY BAND[1 : 13], MULT[1 : 4], RIGHT, AUX[1 : 5]; FOR I:= 1 STEP 1 UNTIL 13 DO BAND[I]:= IF (I + 1) // 3 * 3 < I THEN 2 ELSE - 1; RIGHT[1]:= RIGHT[5]:= 1; FOR I:= 2, 3, 4 DO RIGHT[I]:= 0; AUX[2]:= - 12; DECBND(BAND, 5, 1, 1, AUX, MULT, ROWIND); IF AUX[3] = 5 THEN BEGIN SOLBND(BAND, 5, 1, 1, MULT, ROWIND, RIGHT); OUTPUT(61, (5(+2Z.4D2B), /(DETERMINANT IS ) +.8D+DD ), RIGHT, DETERMBND(BAND, 5, 1, 1, AUX[1])) END END DELIVERS : +1.0000 +1.0000 +1.0000 +1.0000 +1.0000 DETERMINANT IS +.60000000+01 SUBSECTION : DECSOLBND. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE DECSOLBND(A, N, LW, RW, AUX, B); VALUE N, LW, RW; INTEGER N, LW, RW; ARRAY A, AUX, B; CODE 34322; THE MEANING OF THE FORMAL PARAMETERS IS : A, N, LW, RW, AUX : SEE DECBND (SECTION : 3.1.2.1.1.1.1.1); B : SEE SOLBND (THIS SECTION). PROCEDURES USED : VECVEC = CP34010, ELMVEC = CP34020, ICHVEC = CP34030. REQUIRED CENTRAL MEMORY : EXECUTION FIELD LENGTH : A REAL ARRAY OF N ELEMENTS AND A REAL ARRAY OF LW + 1 ELEMENTS ARE DECLARED. RUNNING TIME : (C1 * LW + C6) * (LW + RW + 1) * N; THE CONSTANTS C1 AND C6 DEPEND UPON THE ARITHMETIC OF THE COMPUTER. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : DECSOLBND PERFORMS GAUSSIAN ELIMINATION IN THE SAME WAY AS DECBND , MEANWHILE ALSO CARRYING OUT THE ELIMINATION WITH THE GIVEN RIGHT HAND SIDE. THE SOLUTION OF THE ELIMINATED SYSTEM IS OBTAINED BY BACK SUBSTITUTION. EXAMPLE OF USE : THE PROGRAM BEGINCOMMENT 730822, TEST DECSOLBND AND DETERMBND; INTEGER I; ARRAY BAND[1 : 13], RIGHT, AUX[1 : 5]; FOR I:= 1 STEP 1 UNTIL 13 DO BAND[I]:= IF (I + 1) // 3 * 3 < I THEN 2 ELSE - 1; RIGHT[1]:= RIGHT[5]:= 1; FOR I:= 2, 3, 4 DO RIGHT[I]:= 0; AUX[2]:= - 12; DECSOLBND(BAND, 5, 1, 1, AUX, RIGHT); IF AUX[3] = 5 THEN BEGIN OUTPUT(61, (5(+2Z.4D2B), /(DETERMINANT IS ) +.8D+DD ), RIGHT, DETERMBND(BAND, 5, 1, 1, AUX[1])) END END WHICH SOLVES THE SAME PROBLEM AS THE PROGRAM IN THE EXAMPLE OF USE OF SOLBND, DELIVERS : +1.0000 +1.0000 +1.0000 +1.0000 +1.0000 DETERMINANT IS +.60000000+01 SOURCE TEXT(S) : 0CODE 34071; PROCEDURE SOLBND(A, N, LW, RW, M, P, B); VALUE N, LW, RW; INTEGER N, LW, RW; INTEGER ARRAY P; ARRAY A, B, M; BEGIN INTEGER F, I, K, KK, W, W1, W2, SHIFT; REAL S; F:= LW; SHIFT:= - LW; W1:= LW - 1; FOR K:= 1 STEP 1 UNTIL N DO BEGINIF F < N THEN F:= F + 1; SHIFT:= SHIFT + W1; I:=P[K]; S:= B[I]; IF I ^= K THEN BEGIN B[I]:= B[K]; B[K]:= S END; ELMVEC(K + 1, F, SHIFT, B, M, - S) END; W1:= LW + RW; W:= W1 + 1; KK:= (N + 1) * W - W1; W2:= - 1; SHIFT:= N * W1; FOR K:= N STEP - 1 UNTIL 1 DO BEGIN KK:= KK - W; SHIFT:= SHIFT - W1; IF W2 < W1 THEN W2:= W2 + 1; B[K]:= (B[K] - VECVEC(K + 1, K + W2, SHIFT, B, A)) / A[KK] END END SOLBND; EOP 0CODE 34322; PROCEDURE DECSOLBND(A, N, LW, RW, AUX, B); VALUE N, LW, RW; INTEGER N, LW, RW; ARRAY A, B, AUX; BEGININTEGER I, J, K, KK, KK1, PK, IK, LW1, F, Q, W, W1, W2,IW, NRW, SHIFT, SDET; REAL R, S, EPS, MIN; ARRAY M[0:LW], V[1:N]; F:= LW; SDET:= 1; W1:= LW + RW; W:= W1 + 1; W2:= W - 2; IW:= 0; NRW:= N - RW; LW1:= LW + 1; Q:= LW - 1; FOR I:= 2 STEP 1 UNTIL LW DO BEGIN Q:= Q - 1; IW:= IW + W1; FOR J:= IW - Q STEP 1 UNTIL IW DO A[J]:= 0 END; IW:= - W2; Q:= - LW; FOR I:= 1 STEP 1 UNTIL N DO BEGIN IW:= IW + W; IF I <= LW1 THEN IW:= IW - 1; Q:= Q + W; IF I > NRW THEN Q:= Q - 1; V[I]:= SQRT(VECVEC(IW, Q, 0, A, A)) END; EPS:= AUX[2]; MIN:= 1; KK:= - W1; IF F > NRW THEN W2:= W2 + NRW - F; FOR K:= 1 STEP 1 UNTIL N DO BEGINIF F < N THEN F:= F + 1; IK:= KK:= KK + W; S:= ABS(A[KK]) / V[K]; PK:= K; KK1:= KK + 1; FOR I:= K + 1 STEP 1 UNTIL F DO BEGIN IK:= IK + W1; M[I - K]:= R:= A[IK]; A[IK]:= 0; R:= ABS(R) / V[I]; IF R > S THEN BEGIN S:= R; PK:= I END END; IF S < MIN THEN MIN:= S; IF S < EPS THEN BEGIN AUX[3]:= K - 1; AUX[5]:= S; GO TO END END; IF K + W2 >= N THEN W2:= W2 - 1; IF PK ^= K THEN BEGIN V[PK]:= V[K]; PK:= PK - K; ICHVEC(KK1, KK1 + W2, PK * W1, A); SDET:= - SDET; R:= B[K]; B[K]:= B[PK + K]; B[PK + K]:= R; R:= M[PK]; M[PK]:= A[KK]; A[KK]:= R END ELSE R:= A[KK]; IW:= KK1; LW1:= F - K; IF R < 0 THEN SDET:= - SDET; FOR I:= 1 STEP 1 UNTIL LW1 DO BEGIN M[I]:= S:= M[I] / R; IW:= IW + W1; ELMVEC(IW, IW + W2, KK1 - IW, A, A, - S); B[K + I]:= B[K + I] - B[K] * S END END; AUX[3]:= N; AUX[5]:= MIN; KK:= (N + 1) * W - W1; W2:= - 1; SHIFT:= N * W1; FOR K:= N STEP - 1 UNTIL 1 DO BEGIN KK:= KK - W; SHIFT:= SHIFT - W1; IF W2 < W1 THEN W2:= W2 + 1; B[K]:= (B[K] - VECVEC(K + 1, K + W2, SHIFT, B, A)) / A[KK] END; END: AUX[1]:= SDET END DECSOLBND; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.1.2.1 (JUNE 1974) PAGE 1 AUTHOR: W. HOFFMANN. CONTRIBUTOR: J. C. P. BUS. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731210. BRIEF DESCRIPTION: THIS SECTION CONTAINS TWO PREPARATORY PROCEDURES FOR THE SOLUTION OF SYSTEMS OF LINEAR ALGEBRAIC EQUATIONS WITH A TRIDIAGONAL MATRIX; DECTRI PERFORMS A TRIANGULAR DECOMPOSITION OF A TRIDIAGONAL MATRIX. DECTRIPIV PERFORMS A TRIANGULAR DECOMPOSITION OF A TRIDIAGONAL MATRIX, USING PARTIAL PIVOTING TO STABILIZE THE PROCESS. KEYWORDS: LU DECOMPOSITION, TRIANGULAR DECOMPOSITION, TRIDIAGONAL MATRIX. SUBSECTION: DECTRI. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE DECTRI(SUB, DIAG, SUPER, N, AUX); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AUX; CODE 34423; THE MEANING OF THE FORMAL PARAMETERS IS: SUB: ; ARRAY SUB[1: N - 1]; ENTRY: THE SUBDIAGONAL OF THE GIVEN MATRIX T, SAY; T[I + 1, I] SHOULD BE GIVEN IN SUB[I], I = 1, ..., N - 1; EXIT: SUPPOSE L DENOTES THE LOWER-BIDIAGONAL MATRIX, SUCH THAT LU = T, FOR SOME UPPER-BIDIAGONAL MATRIX U, WITH UNIT DIAGONAL ELEMENTS, THEN L[I + 1, I] WILL BE DELIVERED IN SUB[I], I = 1, ..., AUX[3] - 1; DIAG: ; ARRAY DIAG[1: N]; ENTRY: THE DIAGONAL OF T; EXIT: L[I, I] WILL BE DELIVERED IN DIAG[I], I = 1, ..., AUX[3]; SUPER: ; ARRAY SUPER[1: N - 1]; ENTRY: THE SUPERDIAGONAL OF T; T[I, I + 1] SHOULD BE GIVEN IN SUPER[I], I = 1, ..., N - 1; EXIT: U[I, I + 1] WILL BE DELIVERED IN SUPER[I], I = 1, ..., AUX[3] - 1; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:5]; ENTRY : AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS, HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; EXIT: AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; AUX[5]: IF AUX[3] = N, THEN AUX[5] WILL EQUAL THE INFINITY- NORM OF THE MATRIX, ELSE AUX[5] IS SET EQUAL TO THE VALUE OF THAT ELEMENT WHICH CAUSES THE BREAKDOWN OF THE DECOMPOSITION. PROCEDURES USED: NONE. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE METHOD USED IN DECTRI YIELDS A LOWER-BIDIAGONAL MATRIX L AND A UNIT UPPER-BIDIAGONAL MATRIX U, SUCH THAT THE PRODUCT LU EQUALS THE GIVEN TRIDIAGONAL MATRIX; THE PROCESS IS TERMINATED IN THE K-TH STEP, IF THE MODULUS OF THE K-TH DIAGONAL ELEMENT IS SMALLER THAN A CERTAIN SMALL VALUE, WHICH IS GIVEN BY AUX[2] MULTIPLIED BY THE 1-NORM OF THE K-TH ROW; IN THIS CASE AUX[3] WILL BE GIVEN THE VALUE K - 1 AND AUX[5] WILL BE GIVEN THE VALUE OF THE K-TH DIAGONAL ELEMENT. EXAMPLE OF USE: SEE DECSOLTRI (SECTION 3.1.2.1.1.1.2.3). SUBSECTION: DECTRIPIV. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE DECTRIPIV(SUB, DIAG, SUPER, N, AID, AUX, PIV); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AID, AUX; BOOLEAN ARRAY PIV; CODE 34426; THE MEANING OF THE FORMAL PARAMETERS IS: SUB: ; ARRAY SUB[1: N - 1]; ENTRY: THE SUBDIAGONAL OF THE GIVEN MATRIX T, SAY; T[I+1,I] SHOULD BE GIVEN IN SUB[I],I > 1,...,N - 2 EXIT: LET T' DENOTE THE MATRIX T WITH PERMUTED ROWS; SUPPOSE L DENOTES THE LOWER-BIDIAGONAL MATRIX, SUCH THAT LU = T', FOR SOME UNIT UPPER-TRIANGULAR MATRIX U, THEN L[I + 1, I] WILL BE DELIVERED IN SUB[I], I = 1, ..., AUX[3] - 1; NOTE THAT U HAS TWO CODIAGONALS, BECAUSE OF THE PARTIAL PIVOTING DURING THE DECOMPOSITION; DIAG: ; ARRAY DIAG[1: N]; ENTRY: THE DIAGONAL OF T; EXIT: L[I,I] WILL BE DELIVERED IN DIAG[I],I=1,...,AUX[3]; SUPER: ; ARRAY SUPER[1: N - 1]; ENTRY: THE SUPERDIAGONAL OF T; T[I, I + 1] SHOULD BE GIVEN IN SUPER[I], I = 1, ..., N - 1; EXIT: U[I, I + 1] WILL BE DELIVERED IN SUPER[I], I = 1, ..., AUX[3] - 1; N: ; THE ORDER OF THE MATRIX; AID: ; ARRAY AID[1: N - 2]; EXIT:U[I,I+2] WILL BE DELIVERED IN AID[I],I=1,...,AUX[3]-2; AUX: ; ARRAY AUX[2:5]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS, HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; EXIT: AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; AUX[5]: IF AUX[3] = N, THEN AUX[5] WILL EQUAL THE INFINITY- NORM OF THE MATRIX, ELSE AUX[5] IS SET EQUAL TO THE VALUE OF THAT ELEMENT WHICH CAUSES THE BREAKDOWN OF THE DECOMPOSITION. PIV: ; BOOLEANARRAY PIV[1 : N - 1]; THE VALUE OF PIV[I] WILL BE TRUE IF THE I-TH AND (I + 1)-TH ROW ARE INTERCHANGED, I = 1, ..., MIN(AUX[3], N - 1), ELSE PIV[I] WILL BE FALSE. PROCEDURES USED: NONE. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE METHOD USED IN DECTRIPIV YIELDS A LOWER-BIDIAGONAL MATRIX L AND A UNIT UPPER-TRIANGULAR MATRIX U WITH TWO CODIAGONALS, SUCH THAT THE PRODUCT LU EQUALS THE GIVEN TRIDIAGONAL MATRIX WITH PERMUTED ROWS; PARTIAL PIVOTING IS USED DURING THE TRIANGULAR DECOMPOSITION, I.E. THAT ELEMENT OF THE K-TH COLUMN OF L IS CHOSEN AS PIVOT IN THE K-TH STEP, WHOSE MODULUS DIVIDED BY THE 1-NORM OF THE CORRESPONDING ROW OF THE GIVEN MATRIX IS MAXIMAL; THE PROCESS IS TERMINATED IN THE K-TH STEP, IF THE MODULUS OF THE K-TH PIVOT ELEMENT IS LESS THAN A CERTAIN SMALL VALUE, WHICH IS GIVEN BY AUX[2] MULTIPLIED BY THE 1-NORM OF THE CORRESPONDING ROW; IN THIS CASE AUX[3] WILL BE GIVEN THE VALUE K - 1, AND AUX[5] WILL BE GIVEN THE VALUE OF THE K-TH PIVOT ELEMENT. EXAMPLE OF USE: SEE SOLTRIPIV (SECTION 3.1.2.1.1.1.2.3). SOURCE TEXTS: 0CODE 34423; PROCEDURE DECTRI(SUB, DIAG, SUPER, N, AUX); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AUX; BEGIN INTEGER I, N1; REAL D, R, S, U, NORM, NORM1, TOL; TOL:= AUX[2]; D:= DIAG[1]; R:= SUPER[1]; NORM:= NORM1:= ABS(D) + ABS(R); IF ABS(D) <= NORM1 * TOL THEN BEGIN AUX[3]:= 0; AUX[5]:= D; GOTO EXIT END; U:= SUPER[1]:= R / D; S:= SUB[1]; N1:= N - 1; FOR I:= 2 STEP 1 UNTIL N1 DO BEGIN D:= DIAG[I]; R:= SUPER[I]; NORM1:= ABS(S) + ABS(D) + ABS(R); D:= DIAG[I]:= D - U * S; IF ABS(D) <= NORM1 * TOL THEN BEGIN AUX[3]:= I - 1; AUX[5]:= D; GOTO EXIT END; U:= SUPER[I]:= R / D; S:= SUB[I]; IF NORM1 > NORM THEN NORM:= NORM1 END; D:= DIAG[N]; NORM1:= ABS(D) + ABS(S); D:= DIAG[N]:= D - U * S; IF ABS(D) <= NORM1 * TOL THEN BEGIN AUX[3]:= N1; AUX[5]:= D; GOTO EXIT END; IF NORM1 > NORM THEN NORM:= NORM1; AUX[3]:= N; AUX[5]:= NORM; EXIT: END DECTRI EOP 0CODE 34426; PROCEDURE DECTRIPIV(SUB, DIAG, SUPER, N, AID, AUX, PIV); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AID, AUX; BOOLEAN ARRAY PIV; BEGIN INTEGER I, I1, N1, N2; REAL D, R, S, U, T, Q, V, W, NORM, NORM1, NORM2, TOL; TOL:= AUX[2]; D:= DIAG[1]; R:= SUPER[1]; NORM:= NORM2:= ABS(D) + ABS(R); N2:= N - 2; FOR I:= 1 STEP 1 UNTIL N2 DO BEGIN I1:= I + 1; S:= SUB[I]; T:= DIAG[I1]; Q:= SUPER[I1]; NORM1:= NORM2; NORM2:= ABS(S) + ABS(T) + ABS(Q); IF NORM2 > NORM THEN NORM:= NORM2; IF ABS(D) * NORM2 < ABS(S) * NORM1 THEN BEGIN IF ABS(S) <= TOL * NORM2 THEN BEGIN AUX[3]:= I - 1; AUX[5]:= S; GOTO EXIT END; DIAG[I]:= S; U:= SUPER[I]:= T / S; V:= AID[I]:= Q / S; SUB[I]:= D; W:= SUPER[I1]:= -V * D; D:= DIAG[I1]:= R - U * D; R:= W; NORM2:= NORM1; PIV[I]:= TRUE END ELSE BEGIN IF ABS(D) <= TOL * NORM1 THEN BEGIN AUX[3]:= I - 1; AUX[5]:= D; GOTO EXIT END; U:= SUPER[I]:= R / D; D:= DIAG[I1]:= T - U * S; AID[I]:= 0; PIV[I]:= FALSE; R:= Q END END; N1:= N - 1; S:= SUB[N1]; T:= DIAG[N]; NORM1:= NORM2; NORM2:= ABS(S) + ABS(T); IF NORM2 > NORM THEN NORM:= NORM2; IF ABS(D) * NORM2 < ABS(S) * NORM1 THEN BEGIN IF ABS(S) <= TOL * NORM2 THEN BEGIN AUX[3]:= N2; AUX[5]:= S; GOTO EXIT END; DIAG[N1]:= S; U:= SUPER[N1]:= T / S; SUB[N1]:= D; D:= DIAG[N]:= R - U * D; NORM2:= NORM1; PIV[N1]:= TRUE END ELSE BEGIN IF ABS(D) <= TOL * NORM1 THEN BEGIN AUX[3]:= N2; AUX[5]:= D; GOTO EXIT END; U:= SUPER[N1]:= R / D; D:= DIAG[N]:= T - U * S; PIV[N1]:= FALSE END; IF ABS(D) <= TOL * NORM2 THEN BEGIN AUX[3]:= N1; AUX[5]:= D; GOTO EXIT END; AUX[3]:= N; AUX[5]:= NORM; EXIT: END DECTRIPIV; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.1.2.3 (JUNE 1974) AUTHOR: W. HOFFMANN. CONTRIBUTOR: J. C. P. BUS. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731210. BRIEF DESCRIPTION: THIS SECTION CONTAINS FOUR PROCEDURES FOR SOLVING A SYSTEM OF LINEAR EQUATIONS WITH A TRIDIAGONAL MATRIX; SOLTRI CALCULATES A SOLUTION BY FORWARD AND BACK SUBSTITUTION IF THE TRIANGULAR DECOMPOSED FORM AS DELIVERED BY DECTRI IS GIVEN. DECSOLTRI PERFORMS THE TRIANGULAR DECOMPOSITION OF THE GIVEN MATRIX ( NOT USING ANY PIVOTING STRATEGY DURING THE PROCESS ) AND CALCULATES THE SOLUTION BY FORWARD AND BACK SUBSTITUTION. SOLTRIPIV CALCULATES A SOLUTION BY FORWARD AND BACK SUBTITUTION,IF THE TRIANGULAR DECOMPOSED FORM AS DELIVERED BY DECTRIPIV IS GIVEN. DECSOLTRIPIV PERFORMS THE TRIANGULAR DECOMPOSITION OF THE GIVEN MATRIX ( USING PARTIAL PIVOTING ) AND CALCULATES THE SOLUTION BY FORWARD AND BACK SUBSTITUTION. KEYWORDS: ALGEBRAIC EQUATIONS, LINEAR SYSTEMS, TRIDIAGONAL MATRIX, FORWARD AND BACK SUBSTITUTION. SUBSECTION: SOLTRI. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE SOLTRI(SUB, DIAG, SUPER, N, B); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, B; CODE 34424; THE MEANING OF THE FORMAL PARAMETERS IS: SUB: ; ARRAY SUB[1, N - 1]; ENTRY : THE SUBDIAGONAL OF THE LOWER-BIDIAGONAL MATRIX, AS DELIVERED BY DECTRI (SECTION 3.1.2.1.1.1.2.1); DIAG: ; ARRAY DIAG[1:N]; ENTRY : THE DIAGONAL OF THE LOWER- BIDIAGONAL MATRIX, AS DELIVERED BY DECTRI; SUPER: ; ARRAY SUPER[1: N - 1]; ENTRY : THE SUPERDIAGONAL OF THE UPPER-BIDIAGONAL MATRIX AS DELIVERED BY DECTRI; N: ; THE ORDER OF THE MATRIX; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: THE CALCULATED SOLUTION OF THE LINEAR SYSTEM. PROCEDURES USED: NONE. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SOLTRI CALCULATES THE SOLUTION OF A LINEAR SYSTEM WITH A TRIDIAGONAL MATRIX, WITH FORWARD AND BACK SUBSTITUTION; THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX, AS PRODUCED BY DECTRI (SECTION 3.1.2.1.1.1.2.1), SHOULD BE GIVEN; ONE CALL OF DECTRI FOLLOWED BY SEVERAL CALLS OF SOLTRI MAY BE USED TO SOLVE SEVERAL LINEAR SYSTEMS HAVING THE SAME TRIDIAGONAL MATRIX, BUT DIFFERENT RIGHT-HAND SIDES. EXAMPLE OF USE: SEE DECSOLTRI (THIS SECTION). SUBSECTION: DECSOLTRI. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE DECSOLTRI(SUB, DIAG, SUPER, N, AUX, B); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AUX, B; CODE 34425; THE MEANING OF THE FORMAL PARAMETERS IS: SUB: ; ARRAY SUB[1: N - 1]; ENTRY: THE SUBDIAGONAL OF THE GIVEN MATRIX T, SAY; T[I + 1, I] SHOULD BE GIVEN IN SUB[I], I = 1, ..., N - 1; EXIT: SUPPOSE L DENOTES THE LOWER-BIDIAGONAL MATRIX, SUCH THAT LU = T, FOR SOME UPPER-BIDIAGONAL MATRIX U, WITH UNIT DIAGONAL ELEMENTS, THEN L[I + 1, I] WILL BE DELIVERED IN SUB[I], I = 1, ..., AUX[3] - 1; DIAG: ; ARRAY DIAG[1: N]; ENTRY: THE DIAGONAL OF T; EXIT: L[I, I] WILL BE DELIVERED IN DIAG[I], I = 1, ..., AUX[3]; SUPER: ; ARRAY SUPER[1: N - 1]; ENTRY: THE SUPERDIAGONAL OF T; T[I, I + 1] SHOULD BE GIVEN IN SUPER[I], I = 1, ..., N - 1; EXIT: U[I, I + 1] WILL BE DELIVERED IN SUPER[I], I = 1, ..., AUX[3] - 1; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:5]; ENTRY : AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS, HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; EXIT : AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; AUX[5]: IF AUX[3] = N, THEN AUX[5] WILL EQUAL THE INFINITY- NORM OF THE MATRIX (SEE SECTION 3.1.2.1.1.1.2.1, SUBSECTION DECTRI); B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: IF AUX[3] = N, THEN THE SOLUTION OF THE LINEAR SYSTEM IS OVERWRITTEN ON B, ELSE B REMAINS UNALTERED. PROCEDURES USED: DECTRI = CP34423, SOLTRI = CP34424. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: DECSOLTRI CALCULATES THE SOLUTION OF A LINEAR SYSTEM WITH A TRIDIAGONAL MATRIX; THE TRIANGULAR DECOMPOSITION IS DONE BY CALLING DECTRI (SECTION 3.1.2.1.1.1.2.1) AND THE FORWARD AND BACK SUBSTITUTION BY CALLING SOLTRI (THIS SECTION); IF AUX[3] < N, THEN THE EFFECT OF DECSOLTRI IS MERELY THAT OF DECTRI. EXAMPLE OF USE: LET T BE A TRIDIAGONAL MATRIX WITH SUBDIAGONAL AND SUPERDIAGONAL ELEMENTS I * 2 AND I RESPECTIVELY (I = 1, ..., N - 1), AND DIAGONAL ELEMENTS I + 10 (I = 1, ..., N); LET B BE THE SECOND COLUMN OF T; THEN THE SOLUTION OF THE LINEAR SYSTEM TX = B IS GIVEN BY THE SECOND UNIT VECTOR; BY THE FOLLOWING PROGRAM WE MAY SOLVE THIS SYSTEM AND PRINT THE ERROR IN THE CALCULATED SOLUTION. BEGIN INTEGER I; ARRAY D, SUB, SUPER, B[1:30], AUX[2:5]; FOR I:= 1 STEP 1 UNTIL 30 DO BEGIN SUB[I]:= I * 2; SUPER[I]:= I; D[I]:= I + 10; B[I]:= 0 END; B[1]:= 1; B[2]:= 12; B[3]:= 4; AUX[2]:= -14; DECSOLTRI(SUB, D, SUPER, 30, AUX, B); OUTPUT(71, (/,(AUX[3] AND AUX[5]:),2(/,N)), AUX[3], AUX[5]); B[2]:= B[2] - 1; OUTPUT(71, (//(ERROR IN THE SOLUTION: ), N), SQRT(VECVEC(1, 30, 0, B, B))) END RESULTS: AUX[3] AND AUX[5]: +3.0000000000000+001 +1.2400000000000+002 ERROR IN THE SOLUTION: +0.0000000000000+000 SUBSECTION: SOLTRIPIV. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE SOLTRIPIV(SUB, DIAG, SUPER, N, AID, PIV, B); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AID, B; BOOLEAN ARRAY PIV; CODE 34427; THE MEANING OF THE FORMAL PARAMETERS IS: SUB: ; ARRAY SUB[1, N - 1]; ENTRY : THE SUBDIAGONAL OF THE LOWER-BIDIAGONAL MATRIX, AS DELIVERED BY DECTRIPIV (SECTION 3.1.2.1.1.1.2.1); DIAG: ; ARRAY DIAG[1:N]; ENTRY: THE DIAGONAL OF THE LOWER- BIDIAGONAL MATRIX, AS DELIVERED BY DECTRIPIV; SUPER: ; ARRAY SUPER[1: N - 1]; ENTRY : THE FIRST CODIAGONAL OF THE UPPER-TRIANGULAR MATRIX AS DELIVERED BY DECTRIPIV; N: ; THE ORDER OF THE MATRIX; AID: ; ARRAY AID[1: N - 2]; ENTRY: THE SECOND CODIAGONAL OF THE UPPER-TRIANGULAR MATRIX AS DELIVERED BY DECTRIPIV; PIV: ; BOOLEANARRAY PIV[1: N-1]; ENTRY: THE PIVOT- INFORMATION AS DELIVERED BY DECTRIPIV; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: THE CALCULATED SOLUTION OF THE LINEAR SYSTEM. PROCEDURES USED: NONE. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SOLTRIPIV CALCULATES THE SOLUTION OF A LINEAR SYSTEM WITH A TRIDIAGONAL MATRIX, WITH FORWARD AND BACK SUBSTITUTION; THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX,AS PRODUCED BY DECTRIPIV (SECTION 3.1.2.1.1.1.2.1), SHOULD BE GIVEN; ONE CALL OF DECTRIPIV FOLLOWED BY SEVERAL CALLS OF SOLTRIPIV MAY BE USED TO SOLVE SEVERAL LINEAR SYSTEMS HAVING THE SAME TRIDIAGONAL MATRIX, BUT DIFFERENT RIGHT-HAND SIDES. EXAMPLE OF USE: LET T BE THE MATRIX AS GIVEN IN THE EXAMPLE OF USE OF DECSOLTRI (THIS SECTION) AND LET B1 AND B2 BE THE SECOND AND THIRD COLUMN OF T, THEN THE SOLUTIONS OF THE LINEAR SYSTEMS TX = B1 AND TX = B2 ARE GIVEN BY THE SECOND AND THIRD UNIT VECTOR RESPECTIVELY; IN THE FOLLOWING PROGRAM THESE SYSTEMS ARE SOLVED AND THE ERRORS IN THE CALCULATED SOLUTIONS ARE PRINTED. BEGIN INTEGER I; ARRAY D, SUB, SUPER, AID, B1, B2[1:30], AUX[2:5]; BOOLEAN ARRAY PIV[1:29]; FOR I:= 1 STEP 1 UNTIL 30 DO BEGIN SUB[I]:= I * 2; SUPER[I]:= I; D[I]:= I + 10; B1[I]:= B2[I]:= 0 END; B1[1]:= 1; B1[2]:= 12; B1[3]:= 4; B2[2]:= 2; B2[3]:= 13; B2[4]:= 6; AUX[2]:= -14; DECTRIPIV(SUB, D, SUPER, 30, AID, AUX, PIV); SOLTRIPIV(SUB, D, SUPER, 30, AID, PIV, B1); SOLTRIPIV(SUB, D, SUPER, 30, AID, PIV, B2); OUTPUT(71, (/,(AUX[3] AND AUX[5]:),2(/,N)), AUX[3], AUX[5]); B1[2]:= B1[2] - 1; B2[3]:= B2[3] - 1; OUTPUT(71, (//(ERROR IN B1: ),N,/,(ERROR IN B2: ),N), SQRT(VECVEC(1, 30, 0, B1, B1)), SQRT(VECVEC(1, 30, 0, B2, B2))) END RESULTS: AUX[3] AND AUX[5]: +3.0000000000000+001 +1.2400000000000+002 ERROR IN B1: +0.0000000000000+000 ERROR IN B2: +0.0000000000000+000 SUBSECTION: DECSOLTRIPIV. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE DECSOLTRIPIV(SUB, DIAG, SUPER, N, AUX, B); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AUX, B; CODE 34428; THE MEANING OF THE FORMAL PARAMETERS IS: SUB: ; ARRAY SUB[1: N - 1]; ENTRY: THE SUBDIAGONAL OF THE GIVEN MATRIX T, SAY; T[I + 1, I] SHOULD BE GIVEN IN SUB[I], I = 1, ..., N - 1; EXIT: THE ELEMENTS OF SUB WILL BE OVERWRITTEN; DIAG: ; ARRAY DIAG[1: N]; ENTRY: THE DIAGONAL OF T; EXIT: THE ELEMENTS OF DIAG WILL BE OVERWRITTEN; SUPER: ; ARRAY SUPER[1: N - 1]; ENTRY: THE SUPERDIAGONAL OF T; T[I, I + 1] SHOULD BE GIVEN IN SUPER[I], I = 1, ..., N - 1; EXIT: THE ELEMENTS OF SUPER WILL BE OVERWRITTEN; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:5]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS, HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; EXIT: AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; AUX[5]: IF AUX[3] = N, THEN AUX[5] WILL EQUAL THE INFINITY- NORM OF THE MATRIX (SEE SECTION 3.1.2.1.1.1.2.1., SUBSECTION DECTRIPIV); B: ; ARRAY B[1 : N]; ENTRY: THE RIGHT-HAND SIDE OF THE LINEAR SYSTEM; EXIT: IF AUX[3] = N, THEN THE SOLUTION OF THE LINEAR SYSTEM WILL BE OVERWRITTEN ON B, ELSE B WILL REMAIN UNALTERED. PROCEDURES USED: NONE. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: ONE AUXILIARY ARRAY OF TYPE BOOLEAN AND ORDER N IS DECLARED IN DECSOLTRIPIV; LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: ONE CALL OF DECSOLTRIPIV IS EQUIVALENT WITH CALLING CONSECUTIVELY DECTRIPIV (SECTION 3.1.2.1.1.1.2.1) AND SOLTRIPIV (THIS SECTION); HOWEVER, DECSOLTRIPIV DOES NOT MAKE USE OF DECTRIPIV AND SOLTRIPIV, TO SAVE MEMORY SPACE AND TIME; THIS IS ONLY TRUE IN THE CASE THAT LINEAR SYSTEMS WITH DIFFERENT MATRICES HAVE TO BE SOLVED; IF AUX[3] < N THEN DECSOLTRIPIV IS TERMINATED PREMATURELY (SEE DECTRIPIV IN SECTION 3.1.2.1.1.1.2.1). EXAMPLE OF USE: THE SAME LINEAR SYSTEM AS GIVEN IN THE EXAMPLE OF USE OF DECSOLTRI MAY BE SOLVED WITH DECSOLTRIPIV BY THE FOLLOWING PROGRAM: BEGIN INTEGER I; ARRAY D, SUB, SUPER, B[1:30], AUX[2:5]; FOR I:= 1 STEP 1 UNTIL 30 DO BEGIN SUB[I]:= I * 2; SUPER[I]:= I; D[I]:= I + 10; B[I]:= 0 END; B[1]:= 1; B[2]:= 12; B[3]:= 4; AUX[2]:= -14; DECSOLTRIPIV(SUB, D, SUPER, 30, AUX, B); OUTPUT(71, (/,(AUX[3] AND AUX[5]:),2(/,N)), AUX[3], AUX[5]); B[2]:= B[2] - 1; OUTPUT(71, (//(ERROR IN THE SOLUTION: ), N), SQRT(VECVEC(1, 30, 0, B, B))) END RESULTS: AUX[3] AND AUX[5]: +3.0000000000000+001 +1.2400000000000+002 ERROR IN THE SOLUTION: +0.0000000000000+000 SOURCE TEXTS: 0CODE 34424; PROCEDURE SOLTRI(SUB, DIAG, SUPER, N, B); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, B; BEGIN INTEGER I; REAL R; R:= B[1]:= B[1] / DIAG[1]; FOR I:= 2 STEP 1 UNTIL N DO R:= B[I]:= (B[I] - SUB[I - 1] * R) / DIAG[I]; FOR I:= N - 1 STEP -1 UNTIL 1 DO R:= B[I] := B[I] - SUPER[I] * R END SOLTRI; EOP 0CODE 34425; PROCEDURE DECSOLTRI(SUB, DIAG, SUPER, N, AUX, B); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AUX, B; BEGIN DECTRI(SUB, DIAG, SUPER, N, AUX); IF AUX[3]= N THEN SOLTRI(SUB, DIAG, SUPER, N, B) END DECSOLTRI; EOP 0CODE 34427; PROCEDURE SOLTRIPIV(SUB, DIAG, SUPER, N, AID, PIV, B); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AID, B; BOOLEAN ARRAY PIV; BEGIN INTEGER I, N1; REAL BI, BI1, R, S, T; N1:= N - 1; FOR I:= 1 STEP 1 UNTIL N1 DO BEGIN IF PIV[I] THEN BEGIN BI:= B[I+1]; BI1:= B[I] END ELSE BEGIN BI:= B[I]; BI1:= B[I+1] END; R:= B[I]:= BI / DIAG[I]; B[I+1]:= BI1 - SUB[I] * R END; R:= B[N]:= B[N] / DIAG[N]; T:= B[N1]:= B[N1] - SUPER[N1] * R; FOR I:= N - 2 STEP -1 UNTIL 1 DO BEGIN S:= R; R:= T; T:= B[I]:= B[I] - SUPER[I] * R - (IF PIV[I] THEN AID[I] * S ELSE 0) END END SOLTRIPIV EOP 0CODE 34428; PROCEDURE DECSOLTRIPIV(SUB, DIAG, SUPER, N, AUX, B); VALUE N; INTEGER N; ARRAY SUB, DIAG, SUPER, AUX, B; BEGIN INTEGER I, I1, N1, N2; REAL D, R, S, U, T, Q, V, W, NORM, NORM1, NORM2, TOL, BI, BI1, BI2; BOOLEAN ARRAY PIV[1:N]; TOL:= AUX[2]; D:= DIAG[1]; R:= SUPER[1]; BI:= B[1]; NORM:= NORM2:= ABS(D) + ABS(R); N2:= N - 2; FOR I:= 1 STEP 1 UNTIL N2 DO BEGIN I1:= I + 1; S:= SUB[I]; T:= DIAG[I1]; Q:= SUPER[I1]; BI1:= B[I1]; NORM1:= NORM2; NORM2:= ABS(S) + ABS(T) + ABS(Q); IF NORM2 > NORM THEN NORM:= NORM2; IF ABS(D) * NORM2 < ABS(S) * NORM1 THEN BEGIN IF ABS(S) <= TOL * NORM2 THEN BEGIN AUX[3]:= I - 1; AUX[5]:= S; GOTO EXIT END; U:= SUPER[I]:= T / S; BI1:= B[I]:= BI1 / S; BI:= BI - BI1 * D; V:= SUB[I]:= Q / S; W:= SUPER[I1]:= -V * D; D:= DIAG[I1]:= R - U * D; R:= W; NORM2:= NORM1; PIV[I]:= TRUE END ELSE BEGIN IF ABS(D) <= TOL * NORM1 THEN BEGIN AUX[3]:= I - 1; AUX[5]:= D; GOTO EXIT END; U:= SUPER[I]:= R / D; BI:= B[I]:= BI / D; BI:= BI1 - BI * S; D:= DIAG[I1]:= T - U * S; PIV[I]:= FALSE; R:= Q END END; N1:= N - 1; S:= SUB[N1]; T:= DIAG[N]; NORM1:= NORM2; BI1:= B[N]; NORM2:= ABS(S) + ABS(T); IF NORM2 > NORM THEN NORM:= NORM2; IF ABS(D) * NORM2 < ABS(S) * NORM1 THEN BEGIN IF ABS(S) <= TOL * NORM2 THEN BEGIN AUX[3]:= N2; AUX[5]:= S; GOTO EXIT END; U:= SUPER[N1]:= T / S; BI1:= B[N1]:= BI1 / S; BI:= BI - BI1 * D; D:= R - U * D; NORM2:= NORM1 END ELSE BEGIN IF ABS(D) <= TOL * NORM1 THEN BEGIN AUX[3]:= N2; AUX[5]:= D; GOTO EXIT END; U:= SUPER[N1]:= R / D; BI:= B[N1]:= BI / D; BI:= BI1 - BI * S; D:= T - U * S END; IF ABS(D) <= TOL * NORM2 THEN BEGIN AUX[3]:= N1; AUX[5]:= D; GOTO EXIT END; AUX[3]:= N; AUX[5]:= NORM; BI1:= B[N]:= BI / D; BI:= B[N1]:= B[N1] - SUPER[N1] * BI1; FOR I:= N - 2 STEP -1 UNTIL 1 DO BEGIN BI2:= BI1; BI1:= BI; BI:= B[I]:= B[I] - SUPER[I] * BI1 - (IF PIV[I] THEN SUB[I] * BI2 ELSE 0) END; EXIT: END DECSOLTRIPIV; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.2.1.1 (DECEMBER 1975) AUTHOR : T.J. DEKKER. CONTRIBUTOR : J. KOK. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 731001. BRIEF DESCRIPTION : THIS SECTION CONTAINS THE PROCEDURE CHLDECBND FOR THE CHOLESKY DECOMPOSITION OF A SYMMETRIC POSITIVE DEFINITE BAND MATRIX. KEYWORDS : LINEAR EQUATIONS, CHOLESKY DECOMPOSITION, SYMMETRIC POSITIVE DEFINITE MATRIX, BAND MATRIX. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS : PROCEDURE CHLDECBND(A, N, W, AUX); VALUE N, W; INTEGER N, W; ARRAY A, AUX; CODE 34330; THE MEANING OF THE FORMAL PARAMETERS IS : A : ; ARRAY A[1 : W * (N - 1) + N]; ENTRY : A CONTAINS COLUMNWISE (I.E. THE (I,J)-TH ELEMENT OF THE MATRIX IS A[(J-1)*W+I], J=1,..,N, I=MAX(1,J-W),..,J) THE UPPER-TRIANGULAR BAND ELEMENTS OF THE SYMMETRIC BAND MATRIX; EXIT : THE BAND ELEMENTS OF THE CHOLESKY MATRIX, WHICH IS AN UPPER-TRIANGULAR BAND MATRIX WITH W SUPERDIAGONALS, ARE DELIVERED COLUMNWISE IN A; N : ; ORDER OF THE BAND MATRIX; W : ; NUMBER OF SUPERDIAGONALS OF THE MATRIX; AUX : ; ARRAY AUX[2 : 3]; ENTRY : AUX[2] IS A RELATIVE TOLERANCE TO CONTROL THE CALCULATION OF THE DIAGONAL ELEMENTS OF THE CHOLESKY MATRIX (SEE METHOD AND PERFORMANCE); NORMAL EXIT : AUX[3] = N; ABNORMAL EXIT : AUX[3] = K - 1, WHERE K IS THE INDEX OF THE DIAGONAL ELEMENT OF THE CHOLESKY MATRIX THAT CANNOT BE CALCULATED. PROCEDURES USED : VECVEC = CP34010. RUNNING TIME : (C1 * W + C2) * W * N; THE CONSTANTS C1 AND C2 DEPEND UPON THE ARITHMETIC OF THE COMPUTER. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : CHLDECBND PERFORMS THE CHOLESKY DECOMPOSITION OF A SYMMETRIC POSITIVE DEFINITE MATRIX, WHOSE NON-ZERO ELEMENTS ARE IN BAND FORM, AND WHOSE UPPER-TRIANGULAR BAND ELEMENTS ARE STORED COLUMNWISE IN IONAL ARRAY. THE METHOD USED IS CHOLESKY'S SQUARE ROOT METHOD. IF THE GIVEN MATRIX IS POSITIVE DEFINITE, THEN THIS METHOD YIELDS AN UPPER- TRIANGULAR BAND MATRIX, THE CHOLESKY MATRIX. THE NUMBER OF NON-ZERO SUPERDIAGONALS OF THE GIVEN MATRIX AND ITS CHOLESKY MATRIX ARE EQUAL. THE PROCESS IS COMPLETED IN N STAGES, AT EACH STAGE PRODUCING A ROW OF THE CHOLESKY MATRIX. HOWEVER, THE PROCESS IS DISCONTINUED IF AT SOME STAGE, SAY K, THE K-TH DIAGONAL ELEMENT OF THE GIVEN MATRIX MINUS THE SUM OF SQUARES OF THE SUPERDIAGONAL ELEMENTS OF THE K-TH COLUMN OF THE CHOLESKY MATRIX (THE SQUARE ROOT OF THIS QUANTITY BEING THE K-TH DIAGONAL ELEMENT OF THE CHOLESKY MATRIX) IS EITHER NEGATIVE OR LESS THAN A GIVEN RELATIVE TOLERANCE (AUX[2]) TIMES THE MAXIMAL DIAGONAL ELEMENT THE GIVEN MATRIX. IN THIS CASE THE GIVEN MATRIX, POSSIBLY MODIFIED BY ROUNDING ERRORS, IS NOT POSITIVE DEFINITE. THIS IS INDICATED IN AUX[3], BY WHICH THE VALUE K - 1 IS DELIVERED. IF THE DECOMPOSITION IS CARRIED OUT FULLY, AUX[3] BECOMES N. THE PROCEDURE DELIVERS THE BAND ELEMENTS OF THE CHOLESKY MATRIX. SEE ALSO REF [1], SECTION 222. REFERENCE : [1] DEKKER, T.J. : ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1, MC TRACT 22, 1968, MATHEMATISCH CENTRUM, AMSTERDAM. EXAMPLE OF USE : SEE EXAMPLE OF USE OF CHLSOLBND. SOURCE TEXT(S) : 0CODE 34330; PROCEDURE CHLDECBND(A, N, W, AUX); VALUE N, W; INTEGER N, W; ARRAY A, AUX; BEGIN INTEGER J, K, JMAX, KK, KJ, W1, START; REAL R, EPS, MAX; MAX:= 0; KK:= - W; W1:= W + 1; FOR J:= 1 STEP 1 UNTIL N DO BEGIN KK:= KK + W1; IF A[KK] > MAX THEN MAX:= A[KK]END; JMAX:= W; W1:= W + 1; KK:= - W; EPS:= AUX[2] * MAX; FOR K:= 1 STEP 1 UNTIL N DO BEGINIF K + W > N THEN JMAX:= JMAX - 1; KK:= KK + W1; START:= KK - K + 1; R:= A[KK] - VECVEC(IF K <= W1 THEN START ELSE KK - W, KK - 1, 0, A, A); IF R <= EPS THEN BEGIN AUX[3]:= K - 1; GO TO END END; A[KK]:= R:= SQRT(R); KJ:= KK; FOR J:= 1 STEP 1 UNTIL JMAX DO BEGIN KJ:= KJ + W; A[KJ]:= (A[KJ] - VECVEC(IF K + J <= W1 THEN START ELSE KK - W + J, KK - 1, KJ - KK, A, A)) / R END END; AUX[3]:= N; END: END CHLDECBND; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.2.1.2 (JUNE 1974) PAGE 1 CONTRIBUTOR : J. KOK. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 731001. BRIEF DESCRIPTION : THIS SECTION CONTAINS ONE PROCEDURE, CHLDETERMBND, FOR THE CALCULATION OF THE DETERMINANT OF A SYMMETRIC POSITIVE DEFINITE BAND MATRIX. KEY WORDS : DETERMINANT, SYMMETRIC POSITIVE DEFINITE MATRIX, BAND MATRIX. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : REALPROCEDURE CHLDETERMBND(A, N, W); VALUE N, W; INTEGER N, W; ARRAY A; CODE 34331; CHLDETERMBND DELIVERS THE DETERMINANT OF THE SYMMETRIC POSITIVE DEFINITE BAND MATRIX WHOSE CHOLESKY MATRIX IS STORED IN A. THE MEANING OF THE FORMAL PARAMETERS IS : A, N, W : SEE 'CALLING SEQUENCE' OF CHLDECBND (SECTION 3.1.2.1.1.2.1.1.); THE CONTENTS OF A ARE AS PRODUCED BY CHLDECBND OR CHLDECSOLBND (SECTION 3.1.2.1.1.2.1.3.). PROCEDURES USED : NONE. RUNNING TIME : PROPORTIONAL TO N. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : CHLDETERMBND CAN BE CALLED AFTER CHLDECBND OR CHLDECSOLBND ONLY IF THE CHOLESKY DECOMPOSITION WAS SUCCESSFUL, I.E. IF AUX[3] = N. THE FUNCTION VALUE OF CHLDETERMBND IS THE SQUARE OF THE DETERMINANT OF THE CHOLESKY MATRIX. CHLDETERMBND SHOULD NOT BE CALLED WHEN OVERFLOW CAN BE EXPECTED. EXAMPLE OF USE : SEE EXAMPLES OF USE OF CHLSOLBND AND CHLDECSOLBND. SOURCE TEXT(S) : 0CODE 34331; REALPROCEDURE CHLDETERMBND(A, N, W); VALUE N, W; INTEGER N,W; ARRAY A; BEGININTEGER J, KK, W1; REAL P; W1:= W + 1; KK:= - W; P:= 1; FOR J:= 1 STEP 1 UNTIL N DO BEGIN KK:= KK + W1; P:= A[KK] * P END; CHLDETERMBND:= P * P END CHLDETERMBND; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.2.1.3 (DECEMBER 1975) PAGE 1 AUTHOR : T.J. DEKKER. CONTRIBUTOR : J. KOK. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 731001. BRIEF DESCRIPTION : THIS SECTION CONTAINS TWO PROCEDURES. A) CHLSOLBND, FOR THE SOLUTION OF ONE OR MORE SYSTEMS OF LINEAR EQUATIONS WITH THE SAME COEFFICIENT MATRIX, WHICH IS SYMMETRIC, POSITIVE DEFINITE AND IN BANDFORM, PROVIDED THAT THIS MATRIX HAS BEEN DECOMPOSED BY A CALL OF THE PROCEDURE CHLDECBND (SECTION 3.1.2.1.1.2.1.1.). B) CHLDECSOLBND, FOR THE SOLUTION OF ONE SYSTEM OF LINEAR EQUATIONS BY CHOLESKY'S SQUARE ROOT METHOD, PROVIDED THAT THE SYMMETRIC POSITIVE DEFINITE COEFFICIENT MATRIX IS IN BAND FORM AND IS STORED COLUMNWISE IN A ONE-DIMENSIONAL ARRAY. KEYWORDS : LINEAR EQUATIONS, CHOLESKY DECOMPOSITION, SYMMETRIC POSITIVE DEFINITE MATRIX, BAND MATRIX. SUBSECTION : CHLSOLBND. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE CHLSOLBND(A, N, W, B); VALUE N, W; INTEGER N, W; ARRAY A, B; CODE 34332; THE MEANING OF THE FORMAL PARAMETERS IS : A, N, W : SEE 'CALLING SEQUENCE' OF CHLDECBND, THE CONTENTS OF THE ARRAY A ARE AS PRODUCED BY CHLDECBND; B : ; ARRAY B[1 : N]; ENTRY : THE RIGHT HAND SIDE OF THE SYSTEM OF LINEAR EQUATIONS; EXIT : THE SOLUTION OF THE SYSTEM. PROCEDURES USED : VECVEC = CP34010, SCAPRD1= CP34017. RUNNING TIME: (C3 * W + C4) * N; THE CONSTANTS C3 AND C4 DEPEND UPON THE ARITHMETIC OF THE COMPUTER. LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : THE PROCEDURE CHLSOLBND CALCULATES THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS, PROVIDED THAT THE COEFFICIENT MATRIX WAS DECOMPOSED BY A SUCCESSFUL CALL OF CHLDECBND (SECTION 3.1.2.1.1.2.1.1.). THE SOLUTION OF THE LINEAR SYSTEM IS OBTAINED BY CARRYING OUT THE FORWARD AND BACK SUBSTITUTION WITH THE CHOLESKY MATRIX AND THE RIGHT HAND SIDE. THE LATTER IS OVERWRITTEN BY THE SOLUTION. THE SOLUTIONS OF SEVERAL SYSTEMS WITH THE SAME COEFFICIENT MATRIX CAN BE OBTAINED BY SUCCESSIVE CALLS OF CHLSOLBND. EXAMPLE OF USE : THE FOLLOWING PROGRAM SOLVES THE SYSTEM OF SIMULTANEOUS EQUATIONS 2 * X1 - X2 = 1 - X1 + 2 * X2 - X3 = 0 - X2 + 2 * X3 - X4 = 0 - X3 + 2 * X4 - X5 = 0 - X4 + 2 * X5 = 1 BEGINCOMMENT 730829, TEST CHLDECBND, CHLSOLBND AND CHLDETERMBND; INTEGER I; ARRAY SYMBAND[1 : 9], RIGHT[1 : 5], AUX[2 : 3]; FOR I:= 1 STEP 1 UNTIL 9 DO SYMBAND[I]:= IF I // 2 * 2 < I THEN 2 ELSE - 1; RIGHT[1]:= RIGHT[5]:= 1; FOR I:= 2, 3, 4 DO RIGHT[I]:= 0; AUX[2]:= - 12; CHLDECBND(SYMBAND, 5, 1, AUX); IF AUX[3] = 5 THEN BEGIN CHLSOLBND(SYMBAND, 5, 1, RIGHT); OUTPUT(61, (5(+2Z.4D2B), /(DETERMINANT IS ) +.8D+DD ), RIGHT, CHLDETERMBND(SYMBAND, 5, 1)) END END. THIS PROGRAM DELIVERS: +1.0000 +1.0000 +1.0000 +1.0000 +1.0000 DETERMINANT IS +.60000000+01 SUBSECTION : CHLDECSOLBND. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE CHLDECSOLBND(A, N, W, AUX, B); VALUE N, W; INTEGER N, W; ARRAY A, AUX, B; CODE 34333; THE MEANING OF THE FORMAL PARAMETERS IS : A, N, W, AUX : SEE CHLDECBND; B : SEE CHLSOLBND. PROCEDURES USED : CHLDECBND = CP34330, CHLSOLBND = CP34332. RUNNING TIME: (C1 * W + C5) * W * N; THE CONSTANTS C1 AND C5 DEPEND UPON THE ELEMENTARY ARITHMETIC OF THE COMPUTER LANGUAGE : ALGOL 60. METHOD AND PERFORMANCE : CHLDECSOLBND SOLVES A SYSTEM OF LINEAR EQUATIONS BY CALLING CHLDECBND AND, PROVIDED THAT THE CHOLESKY DECOMPOSITION WAS SUCCESSFUL, CHLSOLBND. THE COEFFICIENT MATRIX OF THIS SYSTEM HAS TO BE A SYMMETRIC POSITIVE DEFINITE BAND MATRIX WHOSE UPPER-TRIANGULAR BAND ELEMENTS ARE STORED COLUMNWISE IN IONAL ARRAY. EXAMPLE OF USE : THE PROGRAM BEGINCOMMENT 730829, TEST CHLDECSOLBND AND CHLDETERMBND; INTEGER I; ARRAY SYMBAND[1 : 9], RIGHT[1 : 5], AUX[2 : 3]; FOR I:= 1 STEP 1 UNTIL 9 DO SYMBAND[I]:= IF I // 2 * 2 < I THEN 2 ELSE - 1; RIGHT[1]:= RIGHT[5]:= 1; FOR I:= 2, 3, 4 DO RIGHT[I]:= 0; AUX[2]:= - 12; CHLDECSOLBND(SYMBAND, 5, 1, AUX, RIGHT); IF AUX[3] = 5 THEN BEGIN OUTPUT(61, (5(+2Z.4D2B), /(DETERMINANT IS ) +.8D+DD ), RIGHT, CHLDETERMBND(SYMBAND, 5, 1)) END END WHICH SOLVES THE SAME PROBLEM AS THE PROGRAM IN THE EXAMPLE OF USE OF CHLSOLBND, DELIVERS: +1.0000 +1.0000 +1.0000 +1.0000 +1.0000 DETERMINANT IS +.60000000+01 EOP SOURCE TEXT(S) : 0CODE 34332; PROCEDURE CHLSOLBND(A, N, W, B); VALUE N, W; INTEGER N, W; ARRAY A, B; BEGIN INTEGER I, K, IMAX, KK, W1; KK:= - W; W1:= W + 1; FOR K:= 1 STEP 1 UNTIL N DO BEGIN KK:= KK + W1; B[K]:= (B[K] - VECVEC(IF K <= W1 THEN 1 ELSE K - W, K - 1, KK - K, B, A)) / A[KK] END; IMAX:= - 1; FOR K:= N STEP - 1 UNTIL 1 DO BEGINIF IMAX < W THEN IMAX:= IMAX + 1; B[K]:= (B[K] - SCAPRD1(KK + W, W, K + 1, 1, IMAX, A, B)) / A[KK]; KK:= KK - W1 END END CHLSOLBND; EOP 0CODE 34333; PROCEDURE CHLDECSOLBND(A, N, W, AUX, B); VALUE N, W; INTEGER N, W; ARRAY A, AUX, B; BEGIN CHLDECBND(A, N, W, AUX); IF AUX[3] = N THEN CHLSOLBND(A, N, W, B) END CHLDECSOLBND; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.2.2.1 (JUNE 1974) PAGE 1 AUTHOR: W. HOFFMANN. CONTRIBUTOR: J. C. P. BUS. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731215. BRIEF DESCRIPTION: THIS SECTION CONTAINS A PROCEDURE, DECSYMTRI, TO PERFORM A TRIANGULAR DECOMPOSITION OF A SYMMETRIC TRIDIAGONAL MATRIX. KEYWORDS: LU DECOMPOSITION, TRIANGULAR DECOMPOSITION, SYMMETRIC TRIDIAGONAL MATRIX. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE DECSYMTRI(DIAG, CO, N, AUX); VALUE N; INTEGER N; ARRAY DIAG, CO, AUX; CODE 34420; THE MEANING OF THE FORMAL PARAMETERS IS: DIAG: ; ARRAY DIAG[1: N]; ENTRY: THE DIAGONAL OF THE GIVEN MATRIX T, SAY; EXIT: SUPPOSE U DENOTES THE UNIT UPPER-BIDIAGONAL MATRIX, SUCH THAT U'DU = T FOR SOME DIAGONAL MATRIX D, WHERE U' DENOTES THE TRANSPOSED MATRIX; THEN D[I,I] WILL BE DELIVERED IN DIAG[I], I = 1, ..., AUX[3]; CO: ; ARRAY CO[1: N - 1]; ENTRY: THE CODIAGONAL OF T; T[I, I + 1] SHOULD BE GIVEN IN CO[I], I = 1, ..., N - 1; EXIT: U[I, I + 1] WILL BE DELIVERED IN CO[I], I = 1, ..., AUX[3] - 1; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:5]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS, HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; EXIT: AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; AUX[5]: IF AUX[3] = N, THEN AUX[5] WILL EQUAL THE INFINITY- NORM OF THE MATRIX, ELSE AUX[5] IS SET EQUAL TO THE VALUE OF THAT ELEMENT WHICH CAUSES THE BREAKDOWN OF THE DECOMPOSITION. PROCEDURES USED: NONE. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE METHOD USED IN DECSYMTRI YIELDS A UNIT UPPER-BIDIAGONAL MATRIX U AND A DIAGONAL MATRIX D, SUCH THAT THE PRODUCT U'DU EQUALS THE GIVEN SYMMETRIC TRIDIAGONAL MATRIX; THE PROCESS IS TERMINATED IN THE K-TH STEP IF THE MODULUS OF THE K-TH DIAGONAL ELEMENT IS SMALLER THAN A CERTAIN SMALL VALUE, WHICH IS GIVEN BY AUX[2] MULTIPLIED BY THE 1-NORM OF THE K-TH ROW; IN THIS CASE AUX[3] WILL BE GIVEN THE VALUE K - 1 AND AUX[5] WILL BE GIVEN THE VALUE OF THE K-TH DIAGONAL ELEMENT. EXAMPLE OF USE: SEE DECSOLSYMTRI (SECTION 3.1.2.1.1.2.2.3). SOURCE TEXT: 0CODE 34420; PROCEDURE DECSYMTRI(DIAG, CO, N, AUX); VALUE N; INTEGER N; ARRAY DIAG, CO, AUX; BEGIN INTEGER I, N1; REAL D, R, S, U, TOL, NORM, NORMR; TOL:= AUX[2]; D:= DIAG[1]; R:= CO[1]; NORM:= NORMR:= ABS(D) + ABS(R); IF ABS(D) <= NORMR * TOL THEN BEGIN AUX[3]:= 0; AUX[5]:= D; GOTO EXIT END; U:= CO[1]:= R / D; N1:= N - 1; FOR I:= 2 STEP 1 UNTIL N1 DO BEGIN S:= R; R:= CO[I]; D:= DIAG[I]; NORMR:= ABS(S) + ABS(D) + ABS(R); D:= DIAG[I]:= D - U * S; IF ABS(D) <= NORMR * TOL THEN BEGIN AUX[3]:= I - 1; AUX[5]:= D; GOTO EXIT END; U:= CO[I]:= R / D; IF NORMR > NORM THEN NORM:= NORMR END; D:= DIAG[N]; NORMR:= ABS(D) + ABS(R); D:= DIAG[N]:= D - U * R; IF ABS(D) <= NORMR * TOL THEN BEGIN AUX[3]:= N1; AUX[5]:= D; GOTO EXIT END; IF NORMR > NORM THEN NORM:= NORMR; AUX[3]:= N; AUX[5]:= NORM; EXIT: END DECSYMTRI; EOP ########################################################################## ########################################################################## 1SECTION 3.1.2.1.1.2.2.3 (FEBRUARY 1979) AUTHOR: W. HOFFMANN. CONTRIBUTOR: J. C. P. BUS. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731215. BRIEF DESCRIPTION: THIS SECTION CONTAINS TWO PROCEDURES FOR SOLVING A SYSTEM OF LINEAR EQUATIONS WITH A SYMMETRIC TRIDIAGONAL MATRIX; SOLSYMTRI CALCULATES A SOLUTION IF THE TRIANGULARLY DECOMPOSED FORM, AS DELIVERED BY DECSYMTRI (SECTION 3.1.2.1.1.2.2.1), IS GIVEN; DECSOLSYMTRI PERFORMS THE TRIANGULAR DECOMPOSITION AS WELL AS THE FORWARD AND BACK SUBSTITUTION TO CALCULATE THE SOLUTION OF THE GIVEN LINEAR SYSTEM. KEYWORDS: ALGEBRAIC EQUATIONS, LINEAR SYSTEMS, SYMMETRIC TRIDIAGONAL MATRIX, FORWARD AND BACK SUBSTITUTION. SUBSECTION: SOLSYMTRI. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE SOLSYMTRI(DIAG, CO, N, B); VALUE N; INTEGER N; ARRAY DIAG, CO, B; CODE 34421; THE MEANING OF THE FORMAL PARAMETERS IS: DIAG: ; ARRAY DIAG[1:N]; ENTRY: THE DIAGONAL MATRIX, AS DELIVERED BY DECSYMTRI (SECTION 3.1.2.1.1.2.2.1); CO: ; ARRAY CO[1: N - 1]; ENTRY: THE CODIAGONAL OF THE UNIT UPPER-BIDIAGONAL MATRIX AS DELIVERED BY DECSYMTRI; N: ; THE ORDER OF THE MATRIX; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT HAND SIDE OF THE LINEAR SYSTEM; EXIT: THE CALCULATED SOLUTION OF THE LINEAR SYSTEM. PROCEDURES USED: NONE. METHOD AND PERFORMANCE: SOLSYMTRI CALCULATES THE SOLUTION OF A LINEAR SYSTEM WITH A SYMMETRIC TRIDIAGONAL MATRIX, WITH FORWARD AND BACK SUBSTITUTION; THE TRIANGULARLY DECOMPOSED FORM OF THE MATRIX, AS PRODUCED BY DECSYMTRI (SECTION 3.1.2.1.1.2.2.1), SHOULD BE GIVEN; ONE CALL OF DECSYMTRI FOLLOWED BY SEVERAL CALLS OF SOLSYMTRI MAY BE USED TO SOLVE SEVERAL LINEAR SYSTEMS HAVING THE SAME SYMMETRIC TRIDIAGONAL MATRIX, BUT DIFFERENT RIGHT HAND SIDES. EXAMPLE OF USE: SEE DECSOLSYMTRI (THIS SECTION). SUBSECTION: DECSOLSYMTRI. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE DECSOLSYMTRI(DIAG, CO, N, AUX, B); VALUE N; INTEGER N; ARRAY DIAG, CO, AUX, B; CODE 34422; THE MEANING OF THE FORMAL PARAMETERS IS: DIAG: ; ARRAY DIAG[1: N]; ENTRY: THE DIAGONAL OF THE GIVEN MATRIX T, SAY; EXIT: SUPPOSE U DENOTES THE UNIT UPPER-BIDIAGONAL MATRIX, SUCH THAT U'DU = T FOR SOME DIAGONAL MATRIX D, WHERE U' DENOTES THE TRANSPOSED MATRIX; THEN D[I,I] WILL BE DELIVERED IN DIAG[I], I = 1, ..., AUX[3]; CO: ; ARRAY CO[1: N - 1]; ENTRY: THE CODIAGONAL OF T; T[I, I + 1] SHOULD BE GIVEN IN CO[I], I = 1, ..., N - 1; EXIT: U[I, I + 1] WILL BE DELIVERED IN CO[I], I = 1, ..., AUX[3] - 1; N: ; THE ORDER OF THE MATRIX; AUX: ; ARRAY AUX[2:5]; ENTRY: AUX[2]: A RELATIVE TOLERANCE; A REASONABLE CHOICE FOR THIS VALUE IS AN ESTIMATE OF THE RELATIVE PRECISION OF THE MATRIX ELEMENTS, HOWEVER, IT SHOULD NOT BE CHOSEN SMALLER THAN THE MACHINE PRECISION; EXIT: AUX[3]: THE NUMBER OF ELIMINATION STEPS PERFORMED; AUX[5]: IF AUX[3] = N, THEN AUX[5] WILL EQUAL THE INFINITY- NORM OF THE MATRIX, ELSE AUX[5] IS SET EQUAL TO THE VALUE OF THAT ELEMENT WHICH CAUSES THE BREAKDOWN OF THE DECOMPOSITION; B: ; ARRAY B[1:N]; ENTRY: THE RIGHT HAND SIDE OF THE LINEAR SYSTEM; EXIT: IF AUX[3] = N THEN THE SOLUTION OF THE LINEAR SYSTEM IS OVERWRITTEN ON B, ELSE B REMAINS UNALTERED. PROCEDURES USED: DECSYMTRI = CP34420, SOLSYMTRI = CP34421. METHOD AND PERFORMANCE: DECSOLSYMTRI CALCULATES THE SOLUTION OF A LINEAR SYSTEM WITH A SYMMETRIC TRIDIAGONAL MATRIX; THE TRIANGULAR DECOMPOSITION IS DONE BY CALLING DECSYMTRI (SECTION 3.1.2.1.1.2.2.1) AND THE FORWARD AND BACK SUBSTITUTION BY CALLING SOLSYMTRI (THIS SECTION); IF AUX[3]; THE HEADING OF THIS PROCEDURE READS: PROCEDURE MATVEC( P, Q); ARRAY P, Q; THIS PROCEDURE DEFINES THE MATRIX A (THE COEFFICIENT MATRIX OF THE SYSTEM) AS FOLLOWS : AT EACH CALL MATVEC DELIVERS IN Q THE MATRIX-VECTOR PRODUCT AP; P AND Q ARE ONE - DIMENSIONAL ARRAYS: ARRAY P,Q[L:N]; X: ; ARRAY X[L:N]; ENTRY: AN INITIAL APPROXIMATION TO THE SOLUTION X; EXIT: THE SOLUTION; R: ; ARRAY R[L:N]; ENTRY: THE RIGHT-HAND SIDE OF THE SYSTEM; EXIT: THE RESIDUE B - AX, COMPUTED RECURSIVELY; L,N: ; L AND N ARE RESPECTIVELY THE LOWER AND UPPER BOUND OF THE ARRAYS X,R,P,Q; GO ON: ; GO ON INDICATES THE CONTINUATION OF THE PROCESS. THIS EXPRESSION MAY DEPEND ON THE JENSEN PARAMETERS ITERATE AND NORM2. WITH THIS BOOLEAN EXPRESSION THE USER CONTROLS THE CONTINUATION OF THE PROCESS. IF GO ON:= FALSE THE ITERATION PROCESS IS STOPPED. ITERATE:; DELIVERS THE NUMBER OF ITERATION STEPS ALREADY PERFORMED; NORM2: ; DELIVERS THE SQUARED EUCLIDEAN NORM OF THE RESIDUE,COMPUTED RECURSIVELY PROCEDURES USED: VECVEC = CP34010 , ELMVEC = CP34020 . REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: 7 + 2 * ( N - L + 1 ). RUNNING TIME: THE RUNNING TIME IS PROPORTIONAL TO THE NUMBER OF ITERATION STEPS PERFORMED. EACH ITERATION STEP REQUIRES ONE EVALUATION OF THE PROCEDURE MATVEC, THE EVALUATION OF TWO SCALAR - VECTOR - PRODUCTS AND ONE VECTOR - VECTOR - PRODUCT. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SEE REF[1]. REFERENCES: [1].J.K.REID. ON THE METHOD OF CONJUGATE GRADIENTS FOR THE SOLUTION OF LARGE SPARSE SYSTEMS OF LINEAR EQUATIONS. IN:LARGE SPARSE SETS OF LINEAR EQUATIONS (J.K.REID ED)1971. EXAMPLE OF USE: BEGIN ARRAY X,B[0:12]; INTEGER IT,I; REAL NO; PROCEDURE A(X,B); ARRAY X,B; BEGIN B[0]:=2*X[0]-X[1]; FOR I:=1 STEP 1 UNTIL 11 DO B[I]:=-X[I-1]+2*X[I]-X[I+1]; B[12]:=2*X[12]-X[11] END A; FOR I:=0 STEP 1 UNTIL 12 DO X[I]:=B[I]:=0; B[0]:=1;B[12]:=4; CONJ GRAD(A,X,B,0,12,IT<20 AND NO>-10,IT,NO); OUTPUT(61,((IT= ),B3D5B,(NO= ),N,//,10B, (X),20B,(R),//),IT,NO); FOR I:=0 STEP 1 UNTIL 12 DO OUTPUT(61,(N,5B,N,/),X[I],B[I]) END DELIVERS: IT= 013 NO= +3.3424581859911-027 X R +1.2142857142857+000 -7.1054273576010-015 +1.4285714285715+000 +1.5151278924296-014 +1.6428571428572+000 -1.3184703260130-014 +1.8571428571429+000 +1.6718441615946-014 +2.0714285714286+000 -1.5514524667596-014 +2.2857142857144+000 +2.2130179956186-014 +2.5000000000001+000 -2.2524167805437-014 +2.7142857142858+000 +2.0834049529361-014 +2.9285714285715+000 -1.8674557504802-014 +3.1428571428572+000 +1.9163204503355-014 +3.3571428571429+000 -1.2366043539824-014 +3.5714285714286+000 +8.2548347242718-015 +3.7857142857143+000 +4.4408920985006-016 . SOURCE TEXT(S): 0CODE 34220; PROCEDURE CONJ GRAD( MATVEC, X, R, L, N, GO ON, ITERATE, NORM2); VALUE L, N; PROCEDURE MATVEC; ARRAY X, R; BOOLEAN GO ON; INTEGER L, N, ITERATE; REAL NORM2; BEGIN ARRAY P, AP[ L: N]; INTEGER I; REAL A, B, PRR, RRP; FOR ITERATE:= 0, ITERATE + 1 WHILE GO ON DO BEGIN IF ITERATE = 0 THEN BEGIN MATVEC( X, P); FOR I:= L STEP 1 UNTIL N DO P[ I]:= R[ I]:= R[ I] - P[ I]; PRR:= VECVEC( L, N, 0, R, R) END ELSE BEGIN B:= RRP / PRR; PRR:= RRP; FOR I:= L STEP 1 UNTIL N DO P[ I]:= R[ I] + B * P[ I] END; MATVEC( P, AP); A:= PRR / VECVEC( L, N, 0, P, AP); ELMVEC( L, N, 0, X, P, A); ELMVEC( L, N, 0, R, AP, -A); NORM2:= RRP:= VECVEC( L, N, 0, R, R) END END CONJ GRAD; EOP ########################################################################## ########################################################################## 1SECTION:3.2.1.1.1 (JUNE 1974) PAGE 1 AUTHORS : T.J.DEKKER AND W.HOFFMANN. CONTRIBUTORS: W.HOFFMANN, J.G.VERWER. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731022. BRIEF DESCRIPTION: THIS SECTION CONTAINS TWO PROCEDURES. A) EQILBR EQUILIBRATES A MATRIX BY MEANS OF A DIAGONAL SIMILARITY TRANSFORMATION, B) BAKLBR PERFORMS THE CORRESPONDING BACK TRANSFORMATION ON THE COLUMNS OF A MATRIX AND SHOULD BE CALLED AFTER EQILBR. KEYWORDS: SIMILARITY TRANSFORMATION, EQUILIBRATION. SUBSECTION: EQILBR. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE EQILBR(A, N, EM, D, INT); VALUE N; INTEGER N; ARRAY A, EM, D; INTEGER ARRAY INT; CODE 34173; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; THE ORDER OF THE GIVEN MATRIX; A: ; ARRAYA[1:N,1:N]; ENTRY: THE MATRIX TO BE EQUILIBRATED; EXIT: THE EQUILIBRATED MATRIX; EM: ; ARRAYEM[0:0]; ENTRY: EM[0], THE MACHINE PRECISION; D: ; ARRAYD[1:N]; EXIT: THE MAIN DIAGONAL OF THE TRANSFORMING DIAGONAL MATRIX; INT: ; INTEGERARRAY INT[1:N]; EXIT: INFORMATION DEFINING THE POSSIBLE INTERCHANGING OF SOME ROWS AND THE CORRESPONDING COLUMNS; PROCEDURES USED: TAMMAT = CP34014, MATTAM = CP34015, ICHCOL = CP34031, ICHROW = CP34032. RUNNING TIME: ROUGHLY PROPORTIONAL TO N SQUARED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE MATRIX IS EQUILIBRATED BY MEANS OF OSBORNE'S DIAGONAL SIMILARITY TRANSFORMATION POSSIBLY WITH INTERCHANGES [2]. THE TRANSFORMING DIAGONAL MATRIX AND THE EQUILIBRATED MATRIX ARE CALCULATED ITERATIVELY: IN EACH STEP A CERTAIN COLUMN OF THE MATRIX IS MULTIPLIED BY, AND THE CORRESPONDING ROW DIVIDED BY, A FACTOR WHICH IS CHOSEN IN SUCH A WAY THAT THE CONSIDERED COLUMN AND ROW OBTAIN ROUGHLY THE SAME EUCLIDEAN NORM (IN FACT, THE FACTOR IS ROUNDED TO THE NEAREST INTEGRAL POWER OF 2, IN ORDER TO PREVENT ROUNDING ERRORS); THE COLUMNS AND ROWS ARE HANDLED IN CYCLIC ORDER. IF THE MATRIX DOES NOT CONTAIN COLUMNS OR ROWS WHOSE OFF-DIAGONAL ELEMENTS ARE 0 OR NEARLY 0, THEN THE PROCESS (WITH UNROUNDED FACTORS) CONVERGES, AND IN PRACTICE A FEW STEPS ARE NEEDED TO OBTAIN A REASONABLY EQUILIBRATED MATRIX [2]. IF ALL OFF-DIAGONAL ELEMENTS OF SOME CONSIDERED COLUMN (ROW) ARE 0 OR NEARLY 0, THEN THIS COLUMN (ROW) IS INTERCHANGED WITH THE FIRST NONZERO COLUMN (LAST NONZERO ROW) OF THE MATRIX, AND, IN ORDER TO HAVE A SIMILARITY TRANSFORMATION, THE CORRESPONDING ROWS (COLUMNS) ARE ALSO INTERCHANGED; THEN FOR THE FURTHER EQUILIBRATION, THE SUBMATRIX IS CONSIDERED WHICH DOES NOT CONTAIN SUCH ZERO COLUMNS AND ROWS AND THE CORRESPONDING ROWS AND COLUMNS. THE EQUILIBRATION PROCESS IS CONTINUED UNTIL, IN A WHOLE CYCLE NO FACTOR > 2 OR < 0.5 AND NO ZERO COLUMN OR ROW IS FOUND, OR UNTIL (N + 1) * N ** 2 ROWS AND COLUMNS HAVE BEEN CONSIDERED. SUBSECTION: BAKLBR. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE BAKLBR(N, N1, N2, D, INT, VEC); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY D, VEC; INTEGER ARRAY INT; CODE 34174; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; THE LENGTH OF THE VECTORS TO BE TRANSFORMED; N1, N2: ; THE SERIAL NUMBERS OF THE FIRST AND LAST VECTOR TO BE TRANSFORMED; VEC: ; ARRAYVEC[1:N,N1:N2]; ENTRY: THE N2 - N1 + 1 VECTORS OF LENGTH N TO BE TRANSFORMED; EXIT: THE N2 - N1 + 1 VECTORS OF LENGTH N RESULTING FROM THE BACK TRANSFORMATION; D: ; ARRAYD[1:N]; ENTRY: THE MAIN DIAGONAL OF THE TRANSFORMING DIAGONAL MATRIX OF ORDER N, AS PRODUCED BY EQILBR; INT: ; INTEGERARRAY INT[1:N]; ENTRY: INFORMATION DEFINING THE POSSIBLE INTERCHANGING OF SOME ROWS AND COLUMNS, AS PRODUCED BY EQILBR. PROCEDURES USED: ICHROW = CP34032. RUNNING TIME: ROUGHLY PROPORTIONAL TO (N2 - N1 + 1) * N. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE BACK TRANSFORMATION, WHICH CORRESPONDS WITH THE DIAGONAL SIMILARITY TRANSFORMATION AS PERFORMED BY EQILBR, TRANSFORMS A VECTOR X INTO A VECTOR DX AND PERFORMS THE CORRESPONDING INTERCHANGES. THE MATRIX D IS THE DIAGONAL MATRIX OF THE DIAGONAL SIMILARITY TRANSFORMATION. REFERENCES: [1] DEKKER, T. J. AND HOFFMANN, W. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 2, MATHEMATICAL CENTRE TRACTS 23, MATHEMATISCH CENTRUM, AMSTERDAM, 1968; [2] OSBORNE, E. E, ON PRECONDITIONING OF MATRICES, J. ACM 7(1960) 338-354. EXAMPLES OF USE: EXAMPLES OF USE OF EQILBR AND BAKLBR CAN BE FOUND IN THE PROCEDURES FOR CALCULATING EIGENVALUES AND EIGENVECTORS AS DESCRIBED IN SECTION 3.3.1.2.2. SOURCE TEXT(S) : 0CODE 34173; COMMENT MCA 2405; PROCEDURE EQILBR(A, N, EM, D, INT); VALUE N; INTEGER N; ARRAY A, EM, D; INTEGER ARRAY INT; BEGIN INTEGER I, IM, I1, P, Q, J, T, COUNT, EXPONENT, NI; REAL C, R, EPS, OMEGA, FACTOR; PROCEDURE MOVE(K); VALUE K; INTEGER K; BEGIN REAL DI; NI:= Q - P; T:= T + 1; IF K ^= I THEN BEGIN ICHCOL(1, N, K, I, A); ICHROW(1, N, K, I, A); DI:= D[I]; D[I]:= D[K]; D[K]:= DI END END MOVE; FACTOR:= 1 / (2 * LN(2)); COMMENT MORE GENERALLY: LN(BASE); EPS:= EM[0]; OMEGA:= 1 / EPS; T:= P:= 1; Q:= NI:= I:= N; COUNT:= (N + 1) * N // 2; FOR J:= 1 STEP 1 UNTIL N DO BEGIN D[J]:= 1; INT[J]:= 0 END; FOR I:= IF I < Q THEN I + 1 ELSE P WHILE COUNT > 0 AND NI > 0 DO BEGIN COUNT:= COUNT - 1; IM:= I - 1; I1:= I + 1; C:= SQRT(TAMMAT(P, IM, I, I, A, A) + TAMMAT(I1, Q, I, I, A, A)); R:= SQRT(MATTAM(P, IM, I, I, A, A) + MATTAM(I1, Q, I, I, A, A)); IF C * OMEGA <= R * EPS THEN BEGIN INT[T]:= I; MOVE(P); P:= P + 1 END ELSE IF R * OMEGA <= C * EPS THEN BEGIN INT[T]:= -I; MOVE(Q); Q:= Q - 1 END ELSE BEGIN EXPONENT:= LN(R / C) * FACTOR; IF ABS(EXPONENT) > 1 THEN BEGIN NI:= Q - P; C:= 2 ** EXPONENT; R:= 1 / C; D[I]:= D[I] * C; FOR J:= 1 STEP 1 UNTIL IM, I1 STEP 1 UNTIL N DO BEGIN A[J,I]:= A[J,I] * C; A[I,J]:= A[I,J] * R END END ELSE NI:= NI - 1 END END END EQILBR; EOP 0CODE 34174; COMMENT MCA 2406; PROCEDURE BAKLBR(N, N1, N2, D, INT, VEC); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY D, VEC; INTEGER ARRAY INT; BEGIN INTEGER I, J, K, P, Q; REAL DI; P:= 1; Q:= N; FOR I:= 1 STEP 1 UNTIL N DO BEGIN DI:= D[I]; IF DI ^= 1 THEN FOR J:= N1 STEP 1 UNTIL N2 DO VEC[I,J]:= VEC[I,J] * DI; K:= INT[I]; IF K > 0 THEN P:= P + 1 ELSE IF K < 0 THEN Q:= Q - 1 END; FOR I:= P - 1 + N - Q STEP -1 UNTIL 1 DO BEGIN K:= INT[I]; IF K > 0 THEN BEGIN P:= P - 1; IF K ^= P THEN ICHROW(N1, N2, K, P, VEC) END ELSE BEGIN Q:= Q + 1; IF -K ^= Q THEN ICHROW(N1, N2, -K, Q, VEC) END END END BAKLBR; EOP ########################################################################## ########################################################################## 1SECTION:3.2.1.1.2 (JUNE 1974) PAGE 1 AUTHOR : C.G. VAN DER LAAN. CONTRIBUTORS : H.FIOLET, C.G. VAN DER LAAN. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED: 731008. BRIEF DESCRIPTION : THIS SECTION CONTAINS THE PROCEDURES EQILBRCOM AND BAKLBRCOM. EQILBRCOM EQUILIBRATES A GIVEN MATRIX. BAKLBRCOM TRANSFORMS THE EIGENVECTORS OF THE EQUILIBRATED MATRIX INTO THE EIGENVECTORS OF THE ORIGINAL MATRIX. KEYWORDS : COMPLEX MATRIX, EIGENVECTORS, EQUILIBRATION. SUBSECTION: EQILBRCOM. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE EQILBRCOM(A1, A2, N, EM, D, INT); VALUE N; INTEGER N; ARRAY A1, A2, EM, D; INTEGER ARRAY INT; CODE 34361; THE MEANING OF THE FORMAL PARAMETERS IS: A1,A2:: ; ARRAY A1,A2[1:N,1:N]; ENTRY: THE REAL PART AND IMAGINARY PART OF THE MATRIX TO BE EQUILIBRATED MUST BE GIVEN IN THE ARRAYS A1 AND A2, RESPECTIVELY; EXIT: THE REAL PART AND THE IMAGINARY PART OF THE EQUILIBRATED MATRIX ARE DELIVERED IN THE ARRAYS A1 AND A2, RESPECTIVELY; N: ; THE ORDER OF THE GIVEN MATRIX; EM: ; ARRAYEM[0:7]; ENTRY: EM[0]: THE MACHINE PRECISION; EM[6]: THE MAXIMUM ALLOWED NUMBER OF ITERATIONS; EXIT: EM[7]: THE NUMBER OF ITERATIONS PERFORMED; D: : ARRAY D[1:N]; EXIT: THE SCALING FACTORS OF THE DIAGONAL SIMILARITY TRANSFORMATION; INT: ; INTEGERARRAY INT[1:N]; EXIT: INFORMATION CONCERNING THE POSSIBLE INTERCHANGING OF SOME ROWS AND CORRESPONDING COLUMNS. PROCEDURES USED: ICHCOL = CP34031, ICHROW = CP34332, TAMMAT = CP34014, MATTAM = CP34015. RUNNING TIME: PROPORTIONAL TO N * NUMBER OF ITERATIONS. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SEE BAKLBRCOM. SUBSECTION: BAKLBRCOM. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE BAKLBRCOM(N, N1, N2, D, INT, VR, VI); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY D, VR, VI; INTEGER ARRAY INT; CODE 34362; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; THE ORDER OF THE MATRIX OF WHICH THE EIGENVECTORS ARE CALCULATED; N1,N2: ; THE EIGENVECTORS CORRESPONDING TO THE EIGENVALUES WITH INDICES N1,...,N2 ARE TO BE TRANSFORMED; D: : ARRAY D[1:N]; ENTRY: THE SCALING FACTORS OF THE DIAGONAL SIMILARITY TRANSFORMATION AS DELIVERED BY EQILBRCOM; INT: ; INTEGERARRAY INT[1:N]; ENTRY: INFORMATION DEFINING THE INTERCHANGING OF SOME ROWS AND COLUMNS, AS DELIVERED BY EQILBRCOM; VR,VI: ; ARRAY VR,VI[1:N,N1:N2]; ENTRY: THE BACK TRANSFORMATION IS PERFORMED ON THE EIGENVECTORS WITH THE REAL PARTS GIVEN IN ARRAY VR AND THE IMAGINARY PARTS GIVEN IN ARRAY VI; EXIT: THE REAL PARTS AND IMAGINARY PARTS OF THE RESULTING EIGENVECTORS ARE DELIVERED IN THE COLUMNS OF THE ARRAYS VR AND VI, RESPECTIVELY. PROCEDURES USED: BAKLBR = CP34174. RUNNING TIME: ROUGHLY PROPORTIONAL TO N * (N2-N1). LANGUAGE: ALGOL 60. THE FOLLOWING HOLDS FOR BOTH PROCEDURES: METHOD AND PERFORMANCE: A MATRIX M IS SAID TO BE EQUILIBRATED, WHEN THE DIAGONAL ELEMENTS OF M''M - MM'' ARE ZERO, WHERE '' STANDS FOR CONJUGATING AND TRANSPOSING. IN EQILBRCOM THE MATRIX M IS EQUILIBRATED BY MEANS OF OSBORNE'S DIAGONAL SIMILARITY TRANSFORMATION WITH POSSIBLE INTERCHANGES (OSBORNE, 1960). BAKLBRCOM PERFORMS THE CORRESPONDING BACK TRANSFORMATION. LET THE EIGENVECTORS OF THE EQUILIBRATED MATRIX BE GIVEN IN THE COLUMNS OF MATRIX V. THE EIGENVECTORS OF THE ORIGINAL MATRIX ARE OBTAINED BY MULTIPLYING (OR POSSIBLE INTERCHANGING) THE ROWS OF THE MATRIX V WITH THE SCALING FACTORS. AS THE SCALING FACTORS ARE REAL QUANTITIES, THE TRANSFORMATION IS PERFORMED BY CALLING THE PROCEDURE BAKLBR FOR BOTH VR AND VI (DEKKER AND HOFFMANN, 1968). REFERENCES: DEKKER, T.J. AND W.HOFFMANN (1968), ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 2, MATH. CENTRE TRACTS 23, MATHEMATISCH CENTRUM; OSBORNE, E.E. (1960), ON PRECONDITIONING OF MATRICES, JACM., 7, P.338-354; PARLETT, B.N. AND C.REINSCH (1969), BALANCING A MATRIX FOR CALCULATION OF EIGENVALUES AND EIGENVECTORS, NUM. MATH., 13, P.293-304; EXAMPLE OF USE: BAKLBRCOM IS USED IN THE PROCEDURE EIGCOM (SEE SECTION 3.3.2.2.2.). AS A FORMAL TEST OF THE PROCEDURE EQILBRCOM, THE FOLLOWING MATRIX WAS USED: 1 0 1024*I 0 1 0 I/1024 0 2 BEGIN INTEGER I,J; INTEGERARRAY INT[1:3]; REAL ARRAY A1,A2[1:3,1:3],EM[0:7],D[1:3]; EM[0]:=5-14;EM[6]:=10; INIMAT(1,3,1,3,A1,0);INIMAT(1,3,1,3,A2,0); A1[1,1]:=A1[2,2]:=1;A1[3,3]:=2; A2[1,3]:=2**10;A2[3,1]:=1/2**10; EQILBRCOM(A1,A2,3,EM,D,INT); OUTPUT(61,((EQUILIBRATED MATRIX:),/)); OUTPUT(61,(3(D2B),/,2(D2B),(I),/,D2B,(I),2BD/), A1[1,1],A1[1,2],A1[1,3],A1[2,1],A1[2,2],A1[3,1],A1[3,3]); OUTPUT(61,(/,(EM[7]:),5BD/),EM[7]); OUTPUT(61,((D[1:3]: ),3(3ZD2B),/),D[1],D[2],D[3]); OUTPUT(61,((INT[1:3]: ),BD,3B,2BD,B4ZD), INT[1],INT[2],INT[3]) END OUTPUT: EQUILIBRATED MATRIX: 1 0 0 0 1 I 0 I 2 EM[7]: 4 D[1:3]: 1 1024 1 INT[1:3]: 2 0 0 SOURCE TEXT(S) : 0CODE 34361; PROCEDURE EQILBRCOM(A1, A2, N, EM, D, INT); VALUE N; INTEGER N; ARRAY A1, A2, EM, D; INTEGER ARRAY INT; BEGIN INTEGER I, P, Q, J, T, COUNT, EXPONENT, NI, IM, I1; REAL C, R, EPS; PROCEDURE MOVE(K); VALUE K; INTEGER K; BEGIN REAL DI; NI:= Q - P; T:= T + 1; IF K ^= I THEN BEGIN ICHCOL(1, N, K, I, A1); ICHROW(1, N, K, I, A1); ICHCOL(1, N, K, I, A2); ICHROW(1, N, K, I, A2); DI:= D[I]; D[I]:= D[K]; D[K]:= DI END END MOVE; EPS:= EM[0] ** 4; T:= P:= 1; Q:= NI:= I:= N; COUNT:= EM[6]; FOR J:= 1 STEP 1 UNTIL N DO BEGIN D[J]:= 1; INT[J]:= 0 END; FOR I:= IF I < Q THEN I + 1 ELSE P WHILE COUNT > 0 AND NI > 0 DO BEGIN COUNT:= COUNT - 1; IM:= I - 1; I1:= I + 1; C:= TAMMAT(P, IM, I, I, A1, A1) + TAMMAT(I1, Q, I, I, A1, A1) + TAMMAT(P, IM, I, I, A2, A2) + TAMMAT(I1, Q, I, I, A2, A2); R:= MATTAM(P, IM, I, I, A1, A1) + MATTAM(I1, Q, I, I, A1, A1) + MATTAM(P, IM, I, I, A2, A2) + MATTAM(I1, Q, I, I, A2, A2); IF C / EPS <= R THEN BEGIN INT[T]:= I; MOVE(P); P:= P + 1 END ELSE IF R / EPS <= C THEN BEGIN INT[T]:= - I; MOVE(Q); Q:= Q - 1 END ELSE BEGIN EXPONENT:= LN(R / C) * 0.36067; IF ABS(EXPONENT) > 1 THEN BEGIN NI:= Q - P; C:= 2 ** EXPONENT; D[I]:= D[I] * C; FOR J:= 1 STEP 1 UNTIL IM, I1 STEP 1 UNTIL N DO BEGIN A1[J,I]:= A1[J,I] * C; A1[I,J]:= A1[I,J] / C; A2[J,I]:= A2[J,I] * C; A2[I,J]:= A2[I,J] / C END END ELSE NI:= NI - 1 END END; EM[7]:= EM[6] - COUNT END EQILBRCOM; EOP 0CODE 34362; PROCEDURE BAKLBRCOM(N, N1, N2, D, INT, VR, VI); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY D, VR, VI; INTEGER ARRAY INT; BEGIN BAKLBR(N, N1, N2, D, INT, VR); BAKLBR(N, N1, N2, D, INT, VI) END BAKLBRCOM; EOP ########################################################################## ########################################################################## 1SECTION:3.2.1.2.1.1 (DECEMBER 1979) AUTHORS: T.J.DEKKER, W.HOFFMANN. CONTRIBUTORS: W.HOFFMANN, J.G.VERWER. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 730705. BRIEF DESCRIPTION: THIS SECTION CONTAINS FIVE PROCEDURES. A) TFMSYMTRI2 AND TFMSYMTRI1 TRANSFORM A REAL SYMMETRIC MATRIX INTO A SIMILAR TRIDIAGONAL ONE BY MEANS OF HOUSEHOLDER'S TRANSFORMATION, B) BAKSYMTRI2 AND BAKSYMTRI1 PERFORM THE CORRESPONDING BACK TRANSFORMATION AND FINALLY, C) TFMPREVEC (WHICH IS TO BE USED IN COMBINATION WITH TFMSYMTRI2) CALCULATES THE TRANSFORMING MATRIX. TFMSYMTRI2 AND BAKSYMTRI2 USE THE UPPER TRIANGLE OF A TWO- DIMENSIONAL ARRAY FOR THE UPPER TRIANGLE OF THE GIVEN SYMMETRIC MATRIX (TFMSYMTRI2) OR FOR THE DATA FOR HOUSEHOLDER'S BACK TRANSFORMATION (BAKSYMTRI2). THE OTHER ELEMENTS ARE NEITHER USED NOR CHANGED. TFMSYMTRI1 AND BAKSYMTRI1 USE AN ARRAY A[1:(N+1)*N//2] FOR THE GIVEN SYMMETRIC MATRIX (TFMSYMTRI1) OR FOR THE DATA FOR HOUSEHOLDER'S TRANSFORMATION (BAKSYMTRI1). KEYWORDS: HOUSEHOLDER'S TRANSFORMATION, TRIANGULARIZATION. SUBSECTION: TFMSYMTRI2. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE TFMSYMTRI2(A, N, D, B, BB, EM); VALUE N; INTEGER N; ARRAY A, D, B, BB, EM; CODE 34140; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; THE ORDER OF THE GIVEN MATRIX; A: ; ARRAYA[1:N,1:N]; ENTRY: THE UPPER TRIANGLE OF THE SYMMETRIC MATRIX MUST BE GIVEN IN THE UPPER TRIANGULAR PART OF A (THE ELEMENTS A[I,J],I<=J); EXIT: THE DATA FOR HOUSEHOLDER'S BACK TRANSFORMATION IS DELIVERED IN THE UPPER TRIANGULAR PART OF A. THE ELEMENTS A[I,J], I>J ARE NEITHER USED NOR CHANGED; D: ; ARRAYD[1:N]; EXIT: THE MAIN DIAGONAL OF THE SYMMETRIC TRIDIAGONAL MATRIX T (SAY), PRODUCED BY HOUSEHOLDER'S TRANSFORMATION; B: ; ARRAY B[1:N]; EXIT: THE CODIAGONAL ELEMENTS OF T ARE DELIVERED IN B[1] THROUGH B[N-1]; B[N] IS SET EQUAL TO ZERO; BB: ; ARRAYBB[1:N]; EXIT: THE SQUARES OF THE CODIAGONAL ELEMENTS OF T ARE DELIVERED IN BB[1] THROUGH BB[N-1]; BB[N] IS SET EQUAL TO ZERO; EM: ; ARRAYEM[0:1]; ENTRY: EM[0], THE MACHINE PRECISION; EXIT: EM[1], THE INFINITY NORM OF THE ORIGINAL MATRIX. PROCEDURES USED: TAMVEC = CP34012, MATMAT = CP34013, TAMMAT = CP34014, ELMVECCOL= CP34021, ELMCOLVEC= CP34022, ELMCOL = CP34023. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. METHOD AND PERFORMANCE: A GIVEN SYMMETRIC MATRIX M IS TRANSFORMED INTO A TRIDIAGONAL ONE BY MEANS OF N-1 ORTHOGONAL SIMILARITY TRANSFORMATIONS; THE P-TH TRANSFORMATION IS CHOSEN IN SUCH A WAY THAT IN THE (N-P+1)-TH COLUMN AND ROW OF M THE DESIRED ZEROES ARE INTRODUCED. HOWEVER, IF, IN THIS COLUMN AND ROW, ALL ELEMENTS OUTSIDE THE MAIN DIAGONAL AND THE ADJACENT CODIAGONALS ARE SMALLER IN ABSOLUTE VALUE THAN THE INFINITY NORM OF M TIMES THE MACHINE PRECISION, THEN THE P-TH TRANSFORMATION IS SKIPPED. FOR FURTHER DETAILS SEE REF[1] AND REF[2]. SUBSECTION: BAKSYMTRI2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE BAKSYMTRI2(A, N, N1, N2, VEC); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A, VEC; CODE 34141; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAYA[1:N,1:N]; ENTRY: THE DATA FOR THE BACK TRANSFORMATION, AS PRODUCED BY TFMSYMTRI2, MUST BE GIVEN IN THE UPPER TRIANGULAR PART OF A; N: ; THE ORDER OF THE GIVEN MATRIX; N1,N2: ; LOWER AND UPPER BOUND, RESPECTIVELY, OF THE COLUMN NUMBERS OF VEC; VEC: ; ARRAYVEC[1:N,N1:N2]; ENTRY: THE VECTORS ON WHICH THE BACK TRANSFORMATION HAS TO BE PERFORMED; EXIT: THE TRANSFORMED VECTORS. PROCEDURES USED: TAMMAT = CP34014, ELMCOL = CP34023. RUNNING TIME: ROUGHLY PROPORTIONAL TO N SQUARED TIMES (N2-N1+1). METHOD AND PERFORMANCE: SEE REF[1]. SUBSECTION: TFMPREVEC. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE TFMPREVEC(A, N); VALUE N; INTEGER N; ARRAY A; CODE 34142; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAYA[1:N,1:N]; ENTRY: THE DATA FOR THE BACK TRANSFORMATION, AS PRODUCED BY TFMSYMTRI2, MUST BE GIVEN IN THE UPPER TRIANGULAR PART OF A; EXIT: THE MATRIX WHICH TRANSFORMS THE ORIGINAL MATRIX INTO A SIMILAR TRIDIAGONAL ONE. N: ; THE ORDER OF THE MATRIX; PROCEDURES USED: TAMMAT = CP34014, ELMCOL = CP34023. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. METHOD AND PERFORMANCE: SEE REF[1]. SUBSECTION: TFMSYMTRI1. CALLING SEQUENCE: THE HEADING OF THIS PROCEDURE IS: PROCEDURE TFMSYMTRI1(A, N, D, B, BB, EM); VALUE N; INTEGER N; ARRAY A, D, B, BB, EM; CODE 34143; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAYA[1:(N+1)*N//2]; ENTRY: THE UPPER TRIANGLE OF THE GIVEN MATRIX MUST BE GIVEN IN SUCH A WAY THAT THE (I,J)-TH ELEMENT OF THE MATRIX IS A[(J-1)*J//2+I], 1<=I<=J<=N; EXIT: THE DATA FOR HOUSEHOLDER'S BACK TRANSFORMATION AS USED BY BAKSYMTRI1; N: ; THE ORDER OF THE GIVEN MATRIX; D: ; ARRAYD[1:N]; EXIT: THE MAIN DIAGONAL OF THE SYMMETRIC TRIDIAGONAL MATRIX T (SAY), PRODUCED BY HOUSEHOLDER'S TRANSFORMATION; B: ; ARRAY B[1:N]; EXIT: THE CODIAGONAL ELEMENTS OF T ARE DELIVERED IN B[1] THROUGH B[N-1]; B[N] IS SET EQUAL TO ZERO; BB: ; ARRAYBB[1:N]; EXIT: THE SQUARES OF THE CODIAGONAL ELEMENTS OF T ARE DELIVERED IN BB[1] THROUGH BB[N-1]; BB[N] IS SET EQUAL TO ZERO; EM: ; ARRAYEM[0:1]; ENTRY: EM[0], THE MACHINE PRECISION; EXIT: EM[1], THE INFINITY NORM OF THE ORIGINAL MATRIX. PROCEDURES USED: VECVEC = CP34010, SEQVEC = CP34016, ELMVEC = CP34020. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. METHOD AND PERFORMANCE: SEE TFMSYMTRI2 (THIS SECTION). SUBSECTION: BAKSYMTRI1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE BAKSYMTRI1(A, N, N1, N2, VEC); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A, VEC; CODE 34144; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAYA[1:(N+1)*N//2]; ENTRY: THE DATA FOR THE BACK TRANSFORMATION, AS PRODUCED BY TFMSYMTRI1; N: ; THE ORDER OF THE GIVEN MATRIX; N1,N2: ; LOWER AND UPPER BOUND, RESPECTIVELY, OF THE COLUMN NUMBERS OF VEC; VEC: ; ARRAYVEC[1:N,N1:N2]; ENTRY: THE VECTORS ON WHICH THE BACK TRANSFORMATION HAS TO BE PERFORMED; EXIT: THE TRANSFORMED VECTORS. PROCEDURES USED: VECVEC = CP34010, ELMVEC = CP34020. REQUIRED CENTRAL MEMORY: AN AUXILIARY ONE-DIMENSIONAL REAL ARRAY OF LENGTH N IS USED. RUNNING TIME: ROUGHLY PROPORTIONAL TO N SQUARED TIMES (N2-N1+1). METHOD AND PERFORMANCE: SEE REF[1]. REFERENCES: [1] DEKKER, T.J. AND HOFFMANN, W. ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 2, MATHEMATICAL CENTRE TRACTS 23, MATHEMATISCH CENTRUM, AMSTERDAM, 1968; [2] WILKINSON, J.H. THE ALGEBRAIC EIGENVALUE PROBLEM, CLARENDON PRESS, OXFORD 1965. EXAMPLE OF USE: THE FIVE PROCEDURES OF THIS SECTION ARE USED IN SECTION 3.3.1.1.2: EIGSYM2 USES TFMSYMTRI2 AND BAKSYMTRI2; EIGSYM1 USES TFMSYMTRI1 AND BAKSYMTRI1; QRISYM USES TFMSYMTRI2 AND TFMPREVEC. SOURCE TEXT(S): 0CODE 34140; COMMENT MCA 2300; PROCEDURE TFMSYMTRI2(A, N, D, B, BB, EM); VALUE N;INTEGER N; ARRAY A, B, BB, D, EM; BEGIN INTEGER I, J, R, R1; REAL W, X, A1, B0, BB0, D0, MACHTOL, NORM; NORM:= 0; FOR J:= 1 STEP 1 UNTIL N DO BEGIN W:= 0; FOR I:= 1 STEP 1 UNTIL J DO W:= ABS(A[I,J]) + W; FOR I:= J + 1 STEP 1 UNTIL N DO W:= ABS(A[J,I]) + W; IF W > NORM THEN NORM:= W END; MACHTOL:= EM[0] * NORM; EM[1]:= NORM; R:= N; FOR R1:= N - 1 STEP -1 UNTIL 1 DO BEGIN D[R]:= A[R,R]; X:= TAMMAT(1, R - 2, R, R, A, A); A1:= A[R1,R]; IF SQRT(X) <= MACHTOL THEN BEGIN B0:= B[R1]:= A1; BB[R1]:= B0 * B0;A[R,R]:= 1 END ELSE BEGIN BB0:= BB[R1]:= A1 * A1 + X; B0:= IF A1 > 0 THEN -SQRT(BB0) ELSE SQRT(BB0); A1:= A[R1,R]:= A1 - B0; W:= A[R,R]:= 1 / (A1 * B0); FOR J:= 1 STEP 1 UNTIL R1 DO B[J]:= (TAMMAT(1, J, J, R, A, A) + MATMAT(J + 1, R1, J, R, A, A)) * W; ELMVECCOL(1, R1, R, B, A, TAMVEC(1, R1, R, A, B) * W * .5); FOR J:= 1 STEP 1 UNTIL R1 DO BEGIN ELMCOL(1, J, J, R, A, A, B[J]); ELMCOLVEC(1, J, J, A, B, A[J,R]) END; B[R1]:= B0 END; R:= R1 END; D[1]:= A[1,1]; A[1,1]:= 1; B[N]:= BB[N]:= 0 END TFMSYMTRI2; EOP 0CODE 34141; COMMENT MCA 2301; PROCEDURE BAKSYMTRI2(A, N, N1, N2, VEC); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A, VEC; BEGIN INTEGER I, J, K; REAL W; FOR J:= 2 STEP 1 UNTIL N DO BEGIN W:= A[J,J]; IF W < 0 THEN FOR K:= N1 STEP 1 UNTIL N2 DO ELMCOL(1, J - 1, K, J, VEC, A, TAMMAT(1, J - 1, J, K, A, VEC) * W) END END BAKSYMTRI2; EOP 0CODE 34142; COMMENT MCA 2302; PROCEDURE TFMPREVEC(A, N); VALUE N; INTEGER N; ARRAY A; BEGIN INTEGER I, J, J1, K; REAL AB; J1:= 1; FOR J:= 2 STEP 1 UNTIL N DO BEGIN FOR I:= 1 STEP 1 UNTIL J1 - 1 , J STEP 1 UNTIL N DO A[I,J1]:= 0; A[J1,J1]:= 1; AB:= A[J,J]; IF AB < 0 THEN FOR K:= 1 STEP 1 UNTIL J1 DO ELMCOL(1, J1, K, J, A, A, TAMMAT(1, J1, J, K, A, A) * AB); J1:= J END; FOR I:= N - 1 STEP -1 UNTIL 1 DO A[I,N]:= 0; A[N,N]:= 1 END TFMPREVEC; EOP 0CODE 34143; COMMENT MCA 2305; PROCEDURE TFMSYMTRI1(A, N, D, B, BB, EM); VALUE N;INTEGER N; ARRAY A, B, BB, D, EM; BEGIN INTEGER I, J, R, R1, P, Q, TI, TJ; REAL S, W, X, A1, B0, BB0, D0, NORM, MACHTOL; NORM:= 0; TJ:= 0; FOR J:= 1 STEP 1 UNTIL N DO BEGIN W:= 0; FOR I:= 1 STEP 1 UNTIL J DO W:= ABS(A[I + TJ]) +W; TJ:= TJ + J; TI:= TJ + J; FOR I:= J + 1 STEP 1 UNTIL N DO BEGIN W:= ABS(A[TI]) + W; TI:= TI + I END; IF W > NORM THEN NORM:= W END; MACHTOL:= EM[0] * NORM; EM[1]:= NORM; Q:= (N + 1) * N // 2; R:= N; FOR R1:= N - 1 STEP -1 UNTIL 1 DO BEGIN P:= Q - R; D[R]:= A[Q]; X:= VECVEC(P + 1, Q - 2, 0, A, A); A1:= A[Q - 1]; IF SQRT(X) <= MACHTOL THEN BEGIN B0:= B[R1]:= A1; BB[R1]:= B0 * B0; A[Q]:= 1 END ELSE BEGIN BB0:= BB[R1]:= A1 * A1 + X; B0:= IF A1 > 0 THEN -SQRT(BB0) ELSE SQRT(BB0); A1:= A[Q - 1]:= A1 - B0; W:= A[Q]:= 1 / (A1 * B0); TJ:= 0; FOR J:= 1 STEP 1 UNTIL R1 DO BEGIN TI:= TJ + J; S:= VECVEC(TJ + 1, TI, P - TJ, A, A); TJ:= TI + J; B[J]:= (SEQVEC(J + 1, R1, TJ, P, A, A) + S) * W; TJ:= TI END; ELMVEC(1, R1, P, B, A, VECVEC(1,R1,P,B,A)* W *.5); TJ:= 0; FOR J:= 1 STEP 1 UNTIL R1 DO BEGIN TI:= TJ + J; ELMVEC(TJ + 1, TI, P - TJ, A, A, B[J]);ELMVEC(TJ + 1, TI, -TJ, A, B, A[J + P]); TJ:= TI END; B[R1]:= B0 END; Q:= P; R:= R1 END; D[1]:= A[1]; A[1]:= 1; B[N]:= BB[N]:= 0 END TFMSYMTRI1; EOP 0CODE 34144; COMMENT MCA 2306; PROCEDURE BAKSYMTRI1(A, N, N1, N2, VEC); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A, VEC; BEGIN INTEGER J, J1, K, TI, TJ; REAL W; ARRAY AUXVEC[1:N]; FOR K:= N1 STEP 1 UNTIL N2 DO BEGIN FOR J:= 1 STEP 1 UNTIL N DO AUXVEC[J]:= VEC[J,K]; TJ:= J1:= 1; FOR J:= 2 STEP 1 UNTIL N DO BEGIN TI:= TJ + J; W:= A[TI]; IF W < 0 THEN ELMVEC(1, J1, TJ, AUXVEC,A,VECVEC(1, J1, TJ, AUXVEC, A) * W); J1:= J; TJ:= TI END; FOR J:= 1 STEP 1 UNTIL N DO VEC[J,K]:= AUXVEC[J] END END BAKSYMTRI1; EOP ########################################################################## ########################################################################## 1SECTION:3.2.1.2.1.2 (JUNE 1974) PAGE 1 AUTHORS: T.J.DEKKER AND W.HOFFMANN. CONTRIBUTORS: W.HOFFMANN, J.G.VERWER. INSTITUTE: MATHEMATICAL CENTRE. RECEIVED: 731112. BRIEF DESCRIPTION: THIS SECTION CONTAINS THREE PROCEDURES. A) TFMREAHES TRANSFORMS A MATRIX INTO A SIMILAR UPPER-HESSENBERG MATRIX BY MEANS OF WILKINSON'S TRANSFORMATION, B) BAKREAHES1 PERFORMS THE CORRESPONDING BACK TRANSFORMATION ON A VECTOR AND SHOULD BE CALLED AFTER TFMREAHES, C) BAKREAHES2 PERFORMS THE CORRESPONDING BACK TRANSFORMATION ON THE COLUMNS OF A MATRIX AND SHOULD BE CALLED AFTER TFMREAHES. KEYWORDS: SIMILARITY TRANSFORMATION, UPPER-HESSENBERG MATRIX. SUBSECTION: TFMREAHES. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE TFMREAHES(A, N, EM, INT); VALUE N; INTEGER N; ARRAY A, EM; INTEGER ARRAY INT; CODE 34170; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; THE ORDER OF THE GIVEN MATRIX; A: ; ARRAYA[1:N,1:N]; ENTRY: THE MATRIX TO BE TRANSFORMED; EXIT: THE UPPER-HESSENBERG MATRIX IS DELIVERED IN THE UPPER TRIANGLE AND THE FIRST SUBDIAGONAL OF A, THE (NONTRIVIAL ELEMENTS OF THE) TRANSFORMING MATRIX, L, IN THE REMAINING PART OF A, I.E. A[I,J] = L[I,J + 1], FOR I = 3,...,N AND J = 1,...,I - 2; EM: ; ARRAYEM[0:1]; ENTRY: EM[0], THE MACHINE PRECISION; EXIT: EM[1], THE INFINITY NORM OF THE ORIGINAL MATRIX; INT: ; INTEGERARRAY INT[1:N]; EXIT: THE PIVOTAL INDICES DEFINING THE STABILIZING ROW AND COLUMN INTERCHANGES; PROCEDURES USED: MATVEC = CP34011, MATMAT = CP34013, ICHCOL = CP34031, ICHROW = CP34032. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: A ONE-DIMENSIONAL REAL ARRAY OF LENGTH N IS DECLARED. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: WILKINSON'S TRANSFORMATION IS A TRIANGULAR SIMILARITY TRANSFORMATION WITH STABILIZING ROW AND COLUMN INTERCHANGES TRANSFORMING A MATRIX, M, INTO AN UPPER-HESSENBERG MATRIX, H. THE TRANSFORMING MATRIX IS THE PRODUCT OF A PERMUTATION MATRIX, P, AND A UNIT LOWER-TRIANGULAR MATRIX, L. THE NONDIAGONAL ELEMENTS IN THE FIRST COLUMN OF L ARE 0, AND THE ROW AND COLUMN INTERCHANGES ARE CHOSEN IN SUCH A WAY THAT THE ABSOLUTE VALUE OF EACH ELEMENT OF L IS AT MOST 1. BECAUSE OF THE SPECIAL FORM OF L, THE MATRICES H AND L CAN BE STORED TOGETHER IN THE ARRAY USED FOR THE MATRIX M (SEE CALLING SEQUENCE). FOR FURTHER DETAILS SEE REFERENCE [1] AND [2]. SUBSECTION: BAKREAHES1. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE BAKREAHES1(A, N, INT, V); VALUE N; INTEGER N; ARRAY A, V; INTEGER ARRAY INT; CODE 34171; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; THE LENGTH OF THE VECTOR TO BE TRANSFORMED; A: ; ARRAYA[1:N,1:N]; ENTRY: THE (NONTRIVIAL ELEMENTS OF THE) TRANSFORMING MATRIX, L, AS PRODUCED BY TFMREAHES MUST BE GIVEN IN THE PART BELOW THE FIRST SUBDIAGONAL OF A, I.E. A[I,J] = L[I,J + 1], FOR I = 3,...,N AND J = 1,...,I - 2; INT: ; INTEGERARRAY INT[1:N]; ENTRY: PIVOTAL INDICES DEFINING THE STABILIZING ROW AND COLUMN INTERCHANGES AS PRODUCED BY TFMREAHES; V: ; ARRAYV[1:N]; ENTRY: THE VECTOR TO BE TRANSFORMED; EXIT: THE TRANSFORMED VECTOR. PROCEDURES USED: MATVEC = CP34011. RUNNING TIME: ROUGHLY PROPORTIONAL TO N SQUARED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: THE BACK TRANSFORMATION WHICH CORRESPONDS TO WILKINSON'S TRANSFORMATION AS PERFORMED BY TFMREAHES TRANSFORMS A VECTOR, X, INTO THE VECTOR PLX, WHERE PL IS THE TRANSFORMING MATRIX. SUBSECTION: BAKREAHES2. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE IS: PROCEDURE BAKREAHES2(A, N, N1, N2, INT, VEC); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A, VEC; INTEGER ARRAY INT; CODE 34172; THE MEANING OF THE FORMAL PARAMETERS IS: N: ; THE LENGTH OF THE VECTORS TO BE TRANSFORMED; N1, N2: ; THE COLUMN NUMBERS OF THE FIRST AND LAST VECTOR TO BE TRANSFORMED; A: ; ARRAYA[1:N,1:N]; ENTRY: THE (NONTRIVIAL ELEMENTS OF THE) TRANSFORMING MATRIX, L, AS PRODUCED BY TFMREAHES MUST BE GIVEN IN THE PART BELOW THE FIRST SUBDIAGONAL OF A, I.E. A[I,J] = L[I,J + 1], FOR I = 3,...,N AND J = 1,...,I - 2; INT: ; INTEGERARRAY INT[1:N]; ENTRY: PIVOTAL INDICES DEFINING THE STABILIZING ROW AND COLUMN INTERCHANGES AS PRODUCED BY TFMREAHES; VEC: ; ARRAYVEC[1:N,N1:N2]; ENTRY: THE N2 - N1 + 1 VECTORS OF LENGTH N TO BE TRANSFORMED; EXIT: THE N2 - N1 + 1 VECTORS OF LENGTH N RESULTING FROM THE BACK TRANSFORMATION; PROCEDURES USED: TAMVEC = CP34012, ICHROW = CP34032. REQUIRED CENTRAL MEMORY: EXECUTION FIELD LENGTH: IONAL REAL ARRAY OF LENGTH N IS DECLARED. RUNNING TIME: ROUGHLY PROPORTIONAL TO (N2 - N1 + 1) * N * N. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SEE SUBSECTION BAKREAHES1. REFERENCES: [1] DEKKER, T. J. AND HOFFMANN, W, ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 2, MATHEMATICAL CENTRE TRACTS 23, MATHEMATISCH CENTRUM, AMSTERDAM, 1968; [2] J. H. WILKINSON, THE ALGEBRAIC EIGENVALUE PROBLEM, CLARENDON PRESS, OXFORD, 1965. EXAMPLES OF USE: EXAMPLES OF USE OF TFMREAHES, BAKREAHES1 AND BAKREAHES2 CAN BE FOUND IN THE PROCEDURES FOR CALCULATING EIGENVALUES AND EIGENVECTORS AS DESCRIBED IN SECTION 3.3.1.2.2. SOURCE TEXT(S) : 0CODE 34170; COMMENT MCA 2400; PROCEDURE TFMREAHES(A, N, EM, INT); VALUE N; INTEGER N; ARRAY A, EM; INTEGER ARRAY INT; BEGIN INTEGER I, J, J1, K, L; REAL S, T, MACHTOL, MACHEPS, NORM; ARRAY B[0:N - 1]; MACHEPS:= EM[0]; NORM:= 0; FOR I:= 1 STEP 1 UNTIL N DO BEGIN S:= 0; FOR J:= 1 STEP 1 UNTIL N DO S:= S + ABS(A[I,J]); IF S > NORM THEN NORM:= S END; EM[1]:= NORM; MACHTOL:= NORM * MACHEPS; INT[1]:= 0; FOR J:= 2 STEP 1 UNTIL N DO BEGIN J1:= J - 1; L:= 0; S:= MACHTOL; FOR K:= J + 1 STEP 1 UNTIL N DO BEGIN T:= ABS(A[K,J1]); IF T > S THEN BEGIN L:= K; S:= T END END; IF L ^= 0 THEN BEGIN IF ABS(A[J,J1]) < S THEN BEGIN ICHROW(1, N, J, L, A); ICHCOL(1, N, J, L, A) END ELSE L:= J; T:= A[J,J1]; FOR K:= J + 1 STEP 1 UNTIL N DO A[K,J1]:= A[K,J1] / T END ELSE FOR K:= J + 1 STEP 1 UNTIL N DO A[K,J1]:= 0; FOR I:= 1 STEP 1 UNTIL N DO B[I - 1]:= A[I,J]:= A[I,J] + (IF L = 0 THEN 0 ELSE MATMAT(J + 1, N, I, J1, A, A))- MATVEC(1, IF J1 < I - 2 THEN J1 ELSE I - 2, I, A, B); INT[J]:= L END END TFMREAHES; EOP 0CODE 34171; COMMENT MCA 2401; PROCEDURE BAKREAHES1(A, N, INT, V); VALUE N; INTEGER N; ARRAY A, V; INTEGER ARRAY INT; BEGIN INTEGER I, L; REAL W; ARRAY X[1:N]; FOR I:= 2 STEP 1 UNTIL N DO X[I - 1]:= V[I]; FOR I:= N STEP -1 UNTIL 2 DO BEGIN V[I]:= V[I] + MATVEC(1, I - 2, I, A, X); L:= INT[I]; IF L > I THEN BEGIN W:= V[I]; V[I]:= V[L]; V[L]:= W END END END BAKREAHES1; EOP 0CODE 34172; COMMENT MCA 2402; PROCEDURE BAKREAHES2(A, N, N1, N2, INT, VEC); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A, VEC; INTEGER ARRAY INT; BEGIN INTEGER I, L, K; ARRAY U[1:N]; FOR I:= N STEP -1 UNTIL 2 DO BEGIN FOR K:= I - 2 STEP -1 UNTIL 1 DO U[K + 1]:= A[I,K]; FOR K:= N1 STEP 1 UNTIL N2 DO VEC[I,K]:= VEC[I,K] + TAMVEC(2 , I - 1, K, VEC, U); L:= INT[I]; IF L > I THEN ICHROW(N1, N2, I, L, VEC) END END BAKREAHES2; EOP ########################################################################## ########################################################################## 1SECTION:3.2.1.2.2.1 (JUNE 1974) AUTHOR : C.G. VAN DER LAAN. CONTRIBUTORS : H.FIOLET, C.G. VAN DER LAAN. INSTITUTE : MATHEMATICAL CENTRE. RECEIVED : 730903. BRIEF DESCRIPTION : THIS SECTION CONTAINS THREE PROCEDURES; A) HSHHRMTRI TRANSFORMS THE HERMITIAN MATRIX M INTO A SIMILAR REAL SYMMETRIC TRIDIAGONAL MATRIX S; B) BAKHRMTRI PERFORMS A BACK TRANSFORMATION CORRESPONDING TO HSHHRMTRI; C) HSHHRMTRIVAL DELIVERS THE MAIN DIAGONAL ELEMENTS AND THE SQUARES OF THE CODIAGONAL ELEMENTS OF A HERMITIAN TRIDIAGONAL MATRIX WHICH IS UNITARY SIMILAR WITH A GIVEN HERMITIAN MATRIX. KEYWORDS : HERMITIAN MATRIX , TRIDIAGONALIZATION , COMPLEX HOUSEHOLDER,S TRANSFORMATION . SUBSECTION : HSHHRMTRI. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE HSHHRMTRI(A, N, D, B, BB, EM, TR, TI); VALUE N; INTEGER N; ARRAY A, D, B, BB, EM, TR, TI; CODE 34363; THE MEANING OF THE FORMAL PARAMETERS IS : A,TR,TI: ; ARRAYA[1:N,1:N]; ARRAY TR,TI[1:N-1]; ENTRY: THE REAL PART OF THE UPPER TRIANGLE OF THE HERMITIAN MATRIX MUST BE GIVEN IN THE UPPER TRIANGULAR PART OF A (THE ELEMENTS A[I,J], I<=J); THE IMAGINARY PART OF THE STRICT LOWER TRIANGLE OF THE HERMITIAN MATRIX MUST BE GIVEN IN THE STRICT LOWER PART OF A (THE ELEMENTS A[I,J],I>J); EXIT: DATA FOR THE BACKTRANSFORMATION; N: ; THE ORDER OF THE MATRIX; D: ; ARRAYD[1:N]; EXIT : THE MAIN DIAGONAL OF THE RESULTING SYMMETRIC TRIDIAGONAL MATRIX; B: ; ARRAYB[1:N-1]; EXIT: THE CODIAGONAL ELEMENTS OF THE RESULTING SYMMETRIC TRIDIAGONAL MATRIX; BB: ; ARRAYBB[1:N-1]; EXIT : THE SQUARES OF THE MODULI OF THE CODIAGONAL ELEMENTS OF THE RESULTING SYMMETRIC TRIDIAGONAL MATRIX; EM: ; ARRAYEM[0:1]; ENTRY: EM[0], THE MACHINE PRECISION; EXIT: EM[1], AN ESTIMATE FOR A NORM OF THE ORIGINAL MATRIX. PROCEDURES USED : MATVEC = CP34011 , TAMVEC = CP34012 , MATMAT = CP34013 , TAMMAT = CP34014 , MATTAM = CP34015 , ELMVECCOL = CP34021 , ELMCOLVEC = CP34022 , ELMCOL = CP34023 , ELMROW = CP34024 , ELMVECROW = CP34026 , ELMROWVEC = CP34027 , ELMROWCOL = CP34028 , ELMCOLROW = CP34029 , CARPOL = CP34344 . RUNNING TIME : PROPORTIONAL TO N CUBED . LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SEE HSHHRMTRIVAL (THIS SECTION). SUBSECTION : BAKHRMTRI. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE BAKHRMTRI(A, N, N1, N2, VECR, VECI, TR, TI); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A, VECR, VECI, TR, TI; CODE 34365; THE MEANING OF THE FORMAL PARAMETERS IS : A,TR,TI: ; ARRAYA[1:N,1:N]; ARRAY TR,TI[1:N-1]; ENTRY: THE DATA FOR THE BACKTRANSFORMATION AS PRODUCED BY HSHHRMTRI; N: ; THE ORDER OF THE MATRIX OF WHICH THE EIGENVECTORS ARE CALCULATED; N1,N2: ; THE EIGENVECTORS CORRESPONDING TO THE EIGENVALUES WITH INDICES N1,...,N2 ARE TO BE TRANSFORMED; VECR,VECI: ; ARRAY VECR,VECI[1:N,N1:N2]; ENTRY: THE BACK TRANSFORMATION IS PERFORMED ON THE REAL EIGENVECTORS GIVEN IN THE COLUMNS OF ARRAY VECR; EXIT: VECR : REAL PART OF THE TRANSFORMED EIGENVECTORS; VECI : IMAGINARY PART OF THE TRANSFORMED EIGENVECTORS. PROCEDURES USED : MATMAT = CP34013 , TAMMAT = CP34014 , ELMCOL = CP34023 , ELMCOLROW = CP34029 , COMMUL = CP34341 , COMROWCST = CP34353 . RUNNING TIME: PROPORTIONAL TO (N2-N1+1)*N**2 . LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SEE HSHHRMTRIVAL (THIS SECTION). SUBSECTION : HSHHRMTRIVAL. CALLING SEQUENCE : THE HEADING OF THE PROCEDURE READS : PROCEDURE HSHHRMTRIVAL(A, N, D, BB, EM); VALUE N; INTEGER N; ARRAY A, D, BB, EM; CODE 34364; THE MEANING OF THE FORMAL PARAMETERS IS : A: ; ARRAYA[1:N,1:N]; ENTRY: THE REAL PART OF THE UPPER TRIANGLE OF THE HERMITIAN MATRIX MUST BE GIVEN IN THE UPPER TRIANGULAR PART OF A (THE ELEMENTS A[I,J], I<=J); THE IMAGINARY PART OF THE STRICT LOWER TRIANGLE OF THE HERMITIAN MATRIX MUST BE GIVEN IN THE STRICT LOWER PART OF A (THE ELEMENTS A[I,J],I>J); THE ELEMENTS OF A ARE ALTERED; N: ; THE ORDER OF THE GIVEN MATRIX; D: ; ARRAYD[1:N]; EXIT: THE MAIN DIAGONAL OF THE RESULTING HERMITIAN TRIDIAGONAL MATRIX; BB: ; ARRAYBB[1:N-1]; EXIT: THE SQUARES OF THE MODULI OF THE CODIAGONAL ELEMENTS OF THE RESULTING HERMITIAN TRIDIAGONAL MATRIX; EM: ; ARRAYEM[0:1]; ENTRY: EM[0],THE MACHINE PRECISION; EXIT: EM[1], AN ESTIMATE FOR A NORM OF THE ORIGINAL MATRIX; PROCEDURES USED : MATVEC = CP34011 , TAMVEC = CP34012 , MATMAT = CP34013 , TAMMAT = CP34014 , MATTAM = CP34015 , ELMVECCOL = CP34021 , ELMCOLVEC = CP34022 , ELMCOL = CP34023 , ELMROW = CP34024 , ELMVECROW = CP34026 , ELMROWVEC = CP34027 , ELMROWCOL = CP34028 , ELMCOLROW = CP34029 . RUNNING TIME : PROPORTIONAL TO N CUBED . LANGUAGE : ALGOL 60. THE FOLLOWING HOLDS FOR THE THREE PROCEDURES : METHOD AND PERFORMANCE : HSHHRMTRIVAL TRANSFORMS A HERMITIAN MATRIX INTO A SIMILAR HERMITIAN TRIDIAGONAL MATRIX BY MEANS OF HOUSEHOLDER'S TRANSFORMATION. HSHHRMTRI TRANSFORMS A HERMITIAN MATRIX INTO A SIMILAR REAL TRIDIAGONAL MATRIX BY MEANS OF HOUSEHOLDER'S TRANSFORMATION FOLLOWED BY A COMPLEX DIAGONAL UNITARY SIMILARITY TRANSFORMATION IN ORDER TO MAKE THE RESULTING TRIDIAGONAL MATRIX REAL SYMMETRIC; HOUSEHOLDER'S TRANSFORMATION FOR COMPLEX HERMITIAN MATRICES IS A UNITARY SIMILARITY TRANSFORMATION,TRANSFORMING A HERMITIAN MATRIX INTO A SIMILAR COMPLEX TRIDIAGONAL ONE (SEE WILKINSON, 1965, P. 342-343). LET M BE A GIVEN HERMITIAN MATRIX OF ORDER N, WITH REAL PART MR AND IMAGINARY PART MI, P THE TRANSFORMING MATRIX AND T THE RESULTING HERMITIAN TRIDIAGONAL MATRIX. SINCE P IS UNITARY, WE HAVE T = PMP, WHERE STANDS FOR CONJUGATING AND TRANSPOSING. THE MATRIX P IS THE PRODUCT OF N-2 HOUSEHOLDER MATRICES, THESE BEING UNITARY HERMITIAN MATRICES OF THE FORM I-UU/T, WHERE T IS A SCALAR (>0), AND U A COMPLEX VECTOR. THE K-TH HOUSEHOLDER MATRIX, K=1,...,N-2, IS CHOSEN IN SUCH A WAY THAT THE LAST K ELEMENTS OF U VANISH, AND THE DESIRED ZEROS ARE INTRODUCED IN THE (N-K+1)-TH COLUMN AND ROW OF THE MATRIX M. HOWEVER, IF THE EUCLIDIAN NORM OF THE FIRST N-K-1 ELEMENTS OF COLUMN N-K+1 OF THE MATRIX M IS SMALLER THAN THE MACHINE PRECISION TIMES THE INFINITY NORM OF THE MATRIX ( NORM(MR) + NORM(MI) ), THEN THE K-TH TRANSFORMATION IS SKIPPED (I.E. THE K-TH HOUSEHOLDER MATRIX IS REPLACED BY I). THE COMPLEX DIAGONAL SIMILARITY TRANSFORMATION D TRANSFORMS THE HERMITIAN TRIDIAGONAL MATRIX T INTO A REAL SYMMETRIC TRIDIAGONAL MATRIX S (MUELLER, 1966). THE DIAGONAL OF D IS CHOSEN IN SUCH A WAY THAT THE CODIAGONAL ELEMENTS OF T ARE TRANSFORMED INTO THEIR ABSOLUTE VALUES. BAKHRMTRI PERFORMS THE BACK TRANSFORMATION TO REPLACE THE EIGENVECTORS OF THE TRIDIAGONAL SYMMETRIC MATRIX S BY THE EIGENVECTORS OF THE ORIGINAL HERMITIAN MATRIX M. IF X IS AN EIGENVECTOR OF S THEN PDX IS THE CORRESPONDING EIGENVECTOR OF M. STARTING FROM THE VECTOR V=DX, THE VECTOR PDX IS OBTAINED BY SUCCESSIVELY REPLACING V BY THE K-TH HOUSEHOLDER MATRIX TIMES V, FOR K=N-2,...,1. THE RESULTING VECTOR V THEN EQUALS PDX. REFERENCES : MUELLER, D.J. (1966), HOUSEHOLDER,S METHOD FOR COMPLEX MATRICES AND EIGENSYSTEMS OF HERMITIAN MATRICES, NUMER.MATH., 8, P.72-92; WILKINSON, J.H. (1965), THE ALGEBRAIC EIGENVALUE PROBLEM, CLARENDON PRESS, OXFORD. EXAMPLE OF USE : THE PROCEDURES HSHHRMTRIVAL AND BAKHRMTRI ARE USED IN SECTION 3.3.2.1. : EIGVALHRM AND QRIVALHRM USE HSHHRMTRIVAL, EIGHRM AND QRIHRM USE BAKHRMTRI . AS A FORMAL TEST OF THE PROCEDURE HSHHRMTRI, THE FOLLOWING MATRIX WAS USED (SEE GREGORY AND KARNEY, CHAPTER 6, EXAMPLE 6.6) : 3 1 0 +2I 1 3 -2I 0 0 +2I 1 1 -2I 0 1 1 BEGIN COMMENT GREGORY AND KARNEY,CHAPTER 6, EXAMPLE 6.6; REAL ARRAY A[1:4,1:4],D,B,BB[1:4],TR,TI[1:3],EM[0:1]; INTEGER I,J; PROCEDURE OUT(S,A,N); VALUE N;INTEGER N;ARRAY A;STRING S; BEGIN INTEGER I,J; OUTPUT(61,(10S),S); FOR I:=1 STEP 1 UNTIL N DO OUTPUT(61,(+D.3DBB),A[I]); OUTPUT(61,(/)) END OUT; INIMAT(1,4,1,4,A,0); A[1,1]:=A[2,2]:=3; A[1,2]:=A[3,3]:=A[3,4]:=A[4,4]:=1; A[3,2]:=2;A[4,1]:=-2; EM[0]:=-14; OUTPUT(61,((INITIAL MATRIX GIVEN IN ARRAY A[1:4,1:4]:),/)); FOR I:=1 STEP 1 UNTIL 4 DO BEGIN FOR J:=1 STEP 1 UNTIL 4 DO OUTPUT(61,(-DBBB),A[I,J]); OUTPUT(61,(/)) END; OUTPUT(61,(/,(HSHHRMTRI DELIVERS:),//)); HSHHRMTRI(A,4,D,B,BB,EM,TR,TI); OUT((D[1:4]: ),D,4); OUT((B[1:3]: ),B,3); OUT((BB[1:3]: ),BB,3); OUT((EM[1]: ),EM,1); END OUTPUT : INITIAL MATRIX GIVEN IN ARRAY A[1:4,1:4]: 3 1 0 0 0 3 0 0 0 2 1 1 -2 0 0 1 HSHHRMTRI DELIVERS: D[1:4]: +3.000 +1.400 +2.600 +1.000 B[1:3]: +2.236 +0.800 +2.236 BB[1:3]: +5.000 +0.640 +5.000 EM[1]: +6.000 SOURCE TEXT(S) : 0CODE 34363; PROCEDURE HSHHRMTRI(A, N, D, B, BB, EM, TR, TI); VALUE N; INTEGER N; ARRAY A, D, B, BB, EM, TR, TI; BEGIN INTEGER I, J, J1, JM1, R, RM1; REAL NRM, W, TOL2, X, AR, AI, MOD, C, S, H, K, T, Q, AJR, ARJ, BJ, BBJ; NRM:= 0; FOR I:= 1 STEP 1 UNTIL N DO BEGIN W:= ABS(A[I,I]); FOR J:= I - 1 STEP - 1 UNTIL 1, I + 1 STEP 1 UNTIL N DO W:= W + ABS(A[I,J]) + ABS(A[J,I]); IF W > NRM THEN NRM:= W END I; TOL2:= (EM[0] * NRM) ** 2; EM[1]:= NRM; R:= N; FOR RM1:= N - 1 STEP - 1 UNTIL 1 DO BEGIN X:= TAMMAT(1, R - 2, R, R, A, A) + MATTAM(1, R - 2, R, R, A, A); AR:= A[RM1,R]; AI:= - A[R,RM1]; D[R]:= A[R,R]; CARPOL(AR, AI, MOD, C, S); IF X < TOL2 THEN BEGIN A[R,R]:= - 1; B[RM1]:= MOD; BB[RM1]:= MOD * MOD END ELSE BEGIN H:= MOD * MOD + X; K:= SQRT(H); T:= A[R,R]:= H + MOD * K; IF AR = 0 AND AI = 0 THEN A[RM1,R]:= K ELSE BEGIN A[RM1,R]:= AR + C * K; A[R,RM1]:= - AI - S * K; S:= - S END; C:= - C; J:= 1; JM1:= 0; FOR J1:= 2 STEP 1 UNTIL R DO BEGIN B[J]:= (TAMMAT(1, J, J, R, A, A) + MATMAT(J1, RM1, J, R, A, A) + MATTAM(1, JM1, J, R, A, A) - MATMAT(J1, RM1, R, J, A, A)) / T; BB[J]:= (MATMAT(1, JM1, J, R, A, A) - TAMMAT(J1, RM1, J, R, A, A) - MATMAT(1, J, R, J, A, A) - MATTAM(J1, RM1, J, R, A, A)) / T; JM1:= J; J:= J1 END J1; Q:= (TAMVEC(1, RM1, R, A, B) - MATVEC(1, RM1, R, A, BB)) / T / 2; ELMVECCOL(1, RM1, R, B, A, - Q); ELMVECROW(1, RM1, R, BB, A, Q); J:= 1; FOR J1:= 2 STEP 1 UNTIL R DO BEGIN AJR:= A[J,R]; ARJ:= A[R,J]; BJ:= B[J]; BBJ:= BB[J]; ELMROWVEC(J, RM1, J, A, B, - AJR); ELMROWVEC(J, RM1, J, A, BB, ARJ); ELMROWCOL(J, RM1, J, R, A, A, - BJ); ELMROW(J, RM1, J, R, A, A, BBJ); ELMCOLVEC(J1, RM1, J, A, B, - ARJ); ELMCOLVEC(J1, RM1, J, A, BB, - AJR); ELMCOL(J1, RM1, J, R, A, A, BBJ); ELMCOLROW(J1, RM1, J, R, A, A, BJ); J:= J1; END J1; BB[RM1]:= H; B[RM1]:= K; END; TR[RM1]:= C; TI[RM1]:= S; R:= RM1; END RM1; D[1]:= A[1,1]; END HSHHRMTRI; EOP 0CODE 34365; PROCEDURE BAKHRMTRI(A, N, N1, N2, VECR, VECI, TR, TI); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY A, VECR, VECI, TR, TI; BEGIN INTEGER I, J, R, RM1; REAL C, S, T, QR, QI; FOR I:= 1 STEP 1 UNTIL N DO FOR J:= N1 STEP 1 UNTIL N2 DO VECI[I,J]:= 0; C:= 1; S:= 0; FOR J:= N - 1 STEP - 1 UNTIL 1 DO BEGIN COMMUL(C, S, TR[J], TI[J], C, S); COMROWCST(N1, N2, J, VECR, VECI, C, S) END J; RM1:= 2; FOR R:= 3 STEP 1 UNTIL N DO BEGIN T:= A[R,R]; IF T > 0 THEN FOR J:= N1 STEP 1 UNTIL N2 DO BEGIN QR:= (TAMMAT(1, RM1, R, J, A, VECR) - MATMAT(1, RM1, R, J, A, VECI)) / T; QI:= (TAMMAT(1, RM1, R, J, A, VECI) + MATMAT(1, RM1, R, J, A, VECR)) / T; ELMCOL(1, RM1, J, R, VECR, A, - QR); ELMCOLROW(1, RM1, J, R, VECR, A, - QI); ELMCOLROW(1, RM1, J, R, VECI, A, QR); ELMCOL(1, RM1, J, R, VECI, A, - QI) END; RM1:= R; END R END BAKHRMTRI; EOP 0CODE 34364; PROCEDURE HSHHRMTRIVAL(A, N, D, BB, EM); VALUE N; INTEGER N; ARRAY A, D, BB, EM; BEGIN INTEGER I, J, J1, JM1, R, RM1; REAL NRM, W, TOL2, X, AR, AI, H, T, Q, AJR, ARJ, DJ, BBJ, MOD2; NRM:= 0; FOR I:= 1 STEP 1 UNTIL N DO BEGIN W:= ABS(A[I,I]); FOR J:= I - 1 STEP - 1 UNTIL 1, I + 1 STEP 1 UNTIL N DO W:= W + ABS(A[I,J]) + ABS(A[J,I]); IF W > NRM THEN NRM:= W END I; TOL2:= (EM[0] * NRM) ** 2; EM[1]:= NRM; R:= N; FOR RM1:= N - 1 STEP - 1 UNTIL 1 DO BEGIN X:= TAMMAT(1, R - 2, R, R, A, A) + MATTAM(1, R - 2, R, R, A, A); AR:= A[RM1,R]; AI:= - A[R,RM1]; D[R]:= A[R,R]; IF X < TOL2 THEN BB[RM1]:= AR * AR + AI * AI ELSE BEGIN MOD2:= AR * AR + AI * AI; IF MOD2 = 0 THEN BEGIN A[RM1,R]:= SQRT(X); T:= X END ELSE BEGIN X:= X + MOD2; H:= SQRT(MOD2 * X); T:= X + H; H:= 1 + X / H; A[R,RM1]:= - AI * H; A[RM1,R]:= AR * H; END; J:= 1; JM1:= 0; FOR J1:= 2 STEP 1 UNTIL R DO BEGIN D[J]:= (TAMMAT(1, J, J, R, A, A) + MATMAT(J1, RM1, J, R, A, A) + MATTAM(1, JM1, J, R, A, A) - MATMAT(J1, RM1, R, J, A, A)) / T; BB[J]:= (MATMAT(1, JM1, J, R, A, A) - TAMMAT(J1, RM1, J, R, A, A) - MATMAT(1, J, R, J, A, A) - MATTAM(J1, RM1, J, R, A, A)) / T; JM1:= J; J:= J1 END J1; Q:= (TAMVEC(1, RM1, R, A, D) - MATVEC(1, RM1, R, A, BB)) / T / 2; ELMVECCOL(1, RM1, R, D, A, - Q); ELMVECROW(1, RM1, R, BB, A, Q); J:= 1; FOR J1:= 2 STEP 1 UNTIL R DO BEGIN AJR:= A[J,R]; ARJ:= A[R,J]; DJ:= D[J]; BBJ:= BB[J]; ELMROWVEC(J, RM1, J, A, D, - AJR); ELMROWVEC(J, RM1, J, A, BB, ARJ); ELMROWCOL(J, RM1, J, R, A, A, - DJ); ELMROW(J, RM1, J, R, A, A, BBJ); ELMCOLVEC(J1, RM1, J, A, D, - ARJ); ELMCOLVEC(J1, RM1, J, A, BB, - AJR); ELMCOL(J1, RM1, J, R, A, A, BBJ); ELMCOLROW(J1, RM1, J, R, A, A, DJ); J:= J1; END J1; BB[RM1]:= X; END; R:= RM1; END RM1; D[1]:= A[1,1]; END HSHHRMTRIVAL; EOP ########################################################################## ########################################################################## 1SECTION:3.2.1.2.2.2 (JUNE 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 THE PROCEDURES HSHCOMHES AND BAKCOMHES. HSHCOMHES TRANSFORMS A COMPLEX MATRIX BY MEANS OF HOUSEHOLDER'S TRANSFORMATION FOLLOWED BY A COMPLEX DIAGONAL TRANSFORMATION INTO A SIMILAR UNITARY UPPER-HESSENBERG MATRIX WITH A REAL NONNEGATIVE SUBDIAGONAL. BAKCOMHES PERFORMS THE CORRESPONDING BACK TRANSFORMATION. KEYWORDS: COMPLEX EIGENPROBLEM, REDUCTION HESSENBERG FORM, HOUSEHOLDER'S TRANSFORMATION. SUBSECTION: HSHCOMHES. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE HSHCOMHES(AR, AI, N, EM, B, TR, TI, DEL); VALUE N; INTEGER N; ARRAY AR, AI, EM, B, TR, TI, DEL; CODE 34366; THE MEANING OF THE FORMAL PARAMETERS IS: AR,AI: ; ARRAY AR,AI[1:N,1:N]; ENTRY: THE REAL PART AND THE IMAGINARY PART OF THE MATRIX TO BE TRANSFORMED MUST BE GIVEN IN THE ARRAYS AR AND AI, RESPECTIVELY; EXIT: THE REAL PART AND THE IMAGINARY PART OF THE UPPER TRIANGLE OF THE RESULTING UPPER-HESSENBERG MATRIX ARE DELIVERED IN THE CORRESPONDING PARTS OF THE ARRAYS AR AND AI, RESPECTIVELY; DATA FOR THE HOUSEHOLDER BACK- TRANSFORMATION ARE DELIVERED IN THE STRICT LOWER TRIANGLES OF THE ARRAYS AR AND AI; N: ; THE ORDER OF THE GIVEN MATRIX; EM: ; ARRAYEM[0:1]; ENTRY: EM[0]: THE MACHINE PRECISION; EM[1]: AN ESTIMATE OF THE NORM OF THE COMPLEX MATRIX; (OR, E.G. THE SUM OF THE INFINITY NORMS OF THE REAL (PART AND IMAGINARY PART OF THE MATRIX); B: ; ARRAYB[1:N-1]; EXIT: THE REAL NONNEGATIVE SUBDIAGONAL OF THE RESULTING UPPER-HESSENBERG MATRIX; TR,TI: ; ARRAY TR,TI[1:N]; EXIT: THE REAL PART AND THE IMAGINARY PART OF THE DIAGONAL ELEMENTS OF A DIAGONAL SIMILARITY TRANSFORMATION ARE DELIVERED IN THE ARRAYS TR AND TI, RESPECTIVELY; BY THIS INFORMATION THE COMPLEX UPPER-HESSENBERG MATRIX IS TRANSFORMED INTO A UPPER-HESSENBERG MATRIX WITH A REAL SUBDIAGONAL; DEL: ; ARRAYDEL[1:N-2]; EXIT: INFORMATION CONCERNING THE SEQUENCE OF HOUSEHOLDER MATRICES. PROCEDURES USED: HSHCOMCOL = CP34355, MATMAT = CP34013, ELMROWCOL = CP34028, HSHCOMPRD = CP34356, CARPOL = CP34344, COMMUL = CP34341, COMCOLCST = CP34352, COMROWCST = CP34353. RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED. LANGUAGE: ALGOL 60. METHOD AND PERFORMANCE: SEE BAKCOMHES (THIS SECTION). SUBSECTION: BAKCOMHES. CALLING SEQUENCE: THE HEADING OF THE PROCEDURE READS: PROCEDURE BAKCOMHES(AR, AI, TR, TI, DEL, VR, VI, N, N1, N2); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY AR, AI, TR, TI, DEL, VR, VI; CODE 34367; THE MEANING OF THE FORMAL PARAMETERS IS: AR,AI,TR,TI,DEL: ; ARRAY AR,AI[1:N,1:N]; ARRAY TR,TI[1:N]; ARRAYDEL[1:N-2]; ENTRY: THE DATA FOR THE BACKTRANSFORMATION AS PRODUCED BY HSHCOMHES; VR,VI: ; ARRAY VR,VI[1:N,N1:N2]; ENTRY: THE BACK TRANSFORMATION IS PERFORMED ON THE EIGENVECTORS WITH THE REAL PARTS GIVEN IN ARRAY VR AND THE IMAGINARY PARTS GIVEN IN ARRAY VI; EXIT: THE REAL PARTS AND IMAGINARY PARTS OF THE RESULTING EIGENVECTORS ARE DELIVERED IN THE COLUMNS OF THE ARRAYS VR AND VI, RESPECTIVELY; N: ; THE ORDER OF THE MATRIX OF WHICH THE EIGENVECTORS ARE CALCULATED; N1,N2: ; THE EIGENVECTORS CORRESPONDING TO THE EIGENVALUES WITH INDICES N1,...,N2 ARE TO BE TRANSFORMED; PROCEDURES USED: COMROWCST = CP34353, HSHCOMPRD = CP34356. RUNNING TIME: PROPORTIONAL TO (N2-N1) * N**2. LANGUAGE : ALGOL 60. THE FOLLOWING HOLDS FOR BOTH PROCEDURES: METHOD AND PERFORMANCE: HSHCOMHES: HOUSEHOLDER'S TRANSFORMATION (FOR COMPLEX MATRICES) IS A UNITARY SIMILARITY TRANSFORMATION, WHICH TRANSFORMS A COMPLEX MATRIX INTO A SIMILAR UPPER-HESSENBERG MATRIX (SEE WILKINSON, 1965, P. 347-349). LET M BE A GIVEN COMPLEX MATRIX OF ORDER N, P THE TRANSFORMING MATRIX AND H THE RESULTING UPPER-HESSENBERG MATRIX. SINCE P IS UNITARY, WE THEN HAVE H = P''MP, WHERE '' STANDS FOR CONJUGATING AND TRANSPOSING. THE MATRIX P IS THE PRODUCT OF N-2 HOUSEHOLDER MATRICES, THESE BEING UNITARY HERMITEAN MATRICES OF THE FORM I - UU''/T, WHERE T IS A SCALAR (>0), AND U A COMPLEX VECTOR. THE R-TH HOUSEHOLDER MATRIX, R=1,...,N-2, IS CHOSEN IN SUCH A WAY THAT THE FIRST R ELEMENTS OF U VANISH, AND THE DESIRED ZEROS ARE INTRODUCED IN THE LAST N-R-1 ELEMENTS OF THE R-TH COLUMN OF THE MATRIX M. HOWEVER, IF THE EUCLIDEAN NORM OF THE LAST N-R-1 ELEMENTS OF COLUMN R OF THE MATRIX M IS SMALLER THAN THE MACHINE PRECISION TIMES A NORM OF THE MATRIX THEN THE R-TH TRANSFORMATION IS SKIPPED (I.E. THE R-TH HOUSEHOLDER MATRIX IS REPLACED BY I). THE COMPLEX DIAGONAL SIMILARITY TRANSFORMATION D TRANSFORMS THE UPPER- HESSENBERG MATRIX H INTO AN UPPER-HESSENBERG MATRIX HR, WITH REAL NONNEGATIVE ELEMENTS. THE DIAGONAL OF D IS CHOSEN IN SUCH A WAY THAT SUBDIAGONAL ELEMENTS OF H ARE TRANSFORMED INTO THEIR ABSOLUTE VALUES (SEE MUELLER, 1966). BAKCOMHES: THE BACK TRANSFORMATION TRANSFORMS A COMPLEX VECTOR X INTO THE COMPLEX VECTOR PDX. IF X IS AN EIGENVECTOR OF H THEN PDX IS THE CORRESPONDING EIGENVECTOR OF M. STARTING FROM THE VECTOR V=DX, THE VECTOR PDX IS OBTAINED BY SUCCESSIVELY REPLACING V BY THE R-TH HOUSEHOLDER MATRIX TIMES V, FOR R=N-2,...,1. THE RESULTING VECTOR THEN EQUALS PDX. REFERENCES: MUELLER, D.J. (1966), HOUSEHOLDER'S METHOD FOR COMPLEX MATRICES AND EIGENSYSTEMS OF HERMITIAN MATRICES, NUMER.MATH., 8, P.72-92; WILKINSON, J.H. (1965), THE ALGEBRAIC EIGENVALUE PROBLEM, CLARENDON PRESS, OXFORD; EXAMPLE OF USE: HSHCOMHES IS USED IN THE PROCEDURES EIGVALCOM AND EIGCOM. BAKCOMHES IS USED IN THE PROCEDURE EIGCOM. (SEE SECTION 3.3.2.2.2.). SOURCE TEXT(S) : 0CODE 34366; PROCEDURE HSHCOMHES(AR, AI, N, EM, B, TR, TI, DEL); VALUE N; INTEGER N; ARRAY AR, AI, EM, B, TR, TI, DEL; BEGIN INTEGER R, RM1, I, J, NM1; REAL TOL, T, XR, XI; NM1:= N - 1; TOL:= (EM[0] * EM[1]) ** 2; RM1:= 1; FOR R:= 2 STEP 1 UNTIL NM1 DO BEGIN IF HSHCOMCOL(R, N, RM1, AR, AI, TOL, B[RM1], TR[R], TI[R], T) THEN BEGIN FOR I:= 1 STEP 1 UNTIL N DO BEGIN XR:= (MATMAT(R, N, I, RM1, AI, AI) - MATMAT(R, N, I, RM1, AR, AR)) / T; XI:= ( - MATMAT(R, N, I, RM1, AR, AI) - MATMAT(R, N, I, RM1, AI, AR)) / T; ELMROWCOL(R, N, I, RM1, AR, AR, XR); ELMROWCOL(R, N, I, RM1, AR, AI, XI); ELMROWCOL(R, N, I, RM1, AI, AR, XI); ELMROWCOL(R, N, I, RM1, AI, AI, - XR) END; HSHCOMPRD(R, N, R, N, RM1, AR, AI, AR, AI, T); END; DEL[RM1]:= T; RM1:= R END FORR; IF N > 1 THEN CARPOL(AR[N,NM1], AI[N,NM1], B[NM1], TR[N], TI[N]); RM1:= 1; TR[1]:= 1; TI[1]:= 0; FOR R:= 2 STEP 1 UNTIL N DO BEGIN COMMUL(TR[RM1], TI[RM1], TR[R], TI[R], TR[R], TI[R]); COMCOLCST(1, RM1, R, AR, AI, TR[R], TI[R]); COMROWCST(R + 1, N, R, AR, AI, TR[R], - TI[R]); RM1:= R END; END HSHCOMHES; EOP 0CODE 34367; PROCEDURE BAKCOMHES(AR, AI, TR, TI, DEL, VR, VI, N, N1, N2); VALUE N, N1, N2; INTEGER N, N1, N2; ARRAY AR, AI, TR, TI, DEL, VR, VI; BEGIN INTEGER I, R, RM1; REAL H; FOR I:= 2 STEP 1 UNTIL N DO COMROWCST(N1, N2, I, VR, VI, TR[I], TI[I]); R:= N - 1; FOR RM1:= N - 2 STEP - 1 UNTIL 1 DO BEGIN H:= DEL[RM1]; IF H > 0 THEN HSHCOMPRD(R, N, N1, N2, RM1, VR, VI, AR, AI, H); R:= RM1 END END BAKCOMHES; EOP ########################################################################## ########################################################################## 1SECTION:3.2.2.1.1 (DECEMBER 1975) AUTHOR : D.T.WINTER INSTITUTE : MATHEMATICAL CENTRE RECEIVED : 731217 BRIEF DESCRIPTION : THIS SECTION CONTAINS THREE PROCEDURES : 1. HSHREABID. THIS PROCEDURE TRANSFORMS A GIVEN MATRIX TO BIDIAGONAL FORM, BY PREMULTIPLYING AND POSTMULTIPLYING THE GIVEN MATRIX WITH ORTHOGONAL MATRICES. 2. PSTTFMMAT. THIS PROCEDURE CALCULATES THE POSTMULTIPLYING MATRIX FROM THE DATA GENERATED BY HSHREABID. 3. PRETFMMAT. THIS PROCEDURE CALCULATES THE PREMULTIPLYING MATRIX FROM THE DATA GENERATED BY HSHREABID. KEYWORDS : HOUSEHOLDER'S TRANSFORMATION BIDIAGONALISATION SUBSECTION : HSHREABID CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE HSHREABID(A, M, N, D, B, EM); VALUE M, N; INTEGER M, N; ARRAY A, D, B, EM; CODE 34260; THE MEANING OF THE FORMAL PARAMETERS IS : A: ; ARRAY A[1:M,1:N]; ENTRY: THE GIVEN MATRIX; EXIT: DATA CONCERNING THE PREMULTIPLYING AND POSTMULTIPLYING MATRICES; M: ; THE NUMBER OF ROWS OF THE GIVEN MATRIX; N: ; THE NUMBER OF COLUMNS OF THE GIVEN MATRIX, N SHOULD SATISFY N <= M; D: ; ARRAYD[1:N]; EXIT: THE DIAGONAL OF THE BIDIAGONAL MATRIX; B: ; ARRAYB[1:N]; EXIT: THE SUPERDIAGONAL OF THE BIDIAGONAL MATRIX IS DELIVERED IN B[1:N-1]; EM: ; ARRAYEM[0:1]; ENTRY: EM[0]: THE MACHINE-PRECISION; EXIT: EM[1]: THE INFINITY NORM OF THE GIVEN MATRIX. PROCEDURES USED : TAMMAT = CP34014 MATTAM = CP34015 ELMCOL = CP34023 ELMROW = CP34024 RUNNING TIME : RUNNING TIME IS ROUGHLY PROPORTIONAL TO (M + N) * N * N METHOD AND PERFORMANCE : LET US ASSUME A GIVEN MATRIX A[ 1:M , 1:N ], WITH M >= N. FIRSTLY WE PREMULTIPLY A WITH A HOUSEHOLDER MATRIX, CHOSEN IN SUCH A WAY THAT THE FIRST COLUMN OF THE RESULTING MATRIX A' IS ZERO WITH THE EXCEPTION OF THE FIRST ELEMENT. SECONDLY WE POSTMULTIPLY A' WITH A HOUSEHOLDER MATRIX SO THAT THE FIRST ROW OF THE RESULTING MATRIX IS ZERO WITH THE EXCEPTION OF THE FIRST TWO ELEMENTS. NOW WE REMOVE THE FIRST ROW AND COLUMN, AND REPEAT THIS PROCESS UNTIL THE MATRIX IS TOTALLY TRANSFORMED TO BIDIAGONAL FORM. THIS PROCEDURE IS A REWRITING OF A PART OF THE PROCEDURE SVD PUBLISHED BY G.H.GOLUB AND C.REINSCH[1]. HOWEVER IN CONTRAST TO THEIR PROCEDURE, HERE WE SKIP A TRANSFORMATION IF THE COLUMN OR ROW ON WHICH OUR ATTENTION IS FOCUSSED IS ALREADY (NEARLY) IN THE DESIRED FORM, I.E. IF THE SUM OF THE SQUARES OF THE ELEMENTS THAT OUGHT TO BE ZERO IS SMALLER THAN A CERTAIN CONSTANT, IN SVD THE TRANSFORMATION IS SKIPPED ONLY IF THE NORM OF THE FULL ROW OR COLUMN IS SMALL ENOUGH. OUR WAY SEEMS TO GIVE BETTER RESULTS, AS SOME ILL-DEFINED TRANSFORMATIONS ARE SKIPPED. MOREOVER, IF A TRANSFORMATION IS SKIPPED, WE DO NOT STORE A ZERO IN THE DIAGONAL OR SUPERDIAGONAL, BUT WE STORE THE VALUE THAT WOULD HAVE BEEN FOUND IF THE COLUMN OR ROW WAS IN THE DESIRED FORM ALREADY. LANGUAGE : ALGOL-60 SUBSECTION : PSTTFMMAT CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE PSTTFMMAT(A, N, V, B); VALUE N; INTEGER N; ARRAY A, V, B; CODE 34261; THE MEANING OF THE FORMAL PARAMETERS IS: A: ; ARRAYA[1:N,1:N]; THE DATA CONCERNING THE POSTMULTIPLYING MATRIX, AS GENERATED BY HSHREABID; N: ; THE NUMBER OF COLUMNS AND ROWS OF A; V: ; ARRAYV[1:N,1:N]; EXIT: THE POSTMULTIPLYING MATRIX; B: ; ARRAYB[1:N]; THE SUPERDIAGONAL AS GENERATED BY HSHREABID. PROCEDURES USED : MATMAT = CP34013 ELMCOL = CP34023 RUNNING TIME : THE RUNNING TIME IS ABOUT PROPORTIONAL TO N ** 3 LANGUAGE : ALGOL 60 SUBSECTION : PRETFMMAT CALLING SEQUENCE : THE HEADING OF THE PROCEDURE IS : PROCEDURE PRETFMMAT(A, M, N, D); VALUE M, N; INTEGER M, N; ARRAY A, D; CODE 34262; THE MEANING OF THE FORMAL PARAMETERS IS : A: ; ARRAYA[1:M,1:N]; ENTRY: THE DATA CONCERNING THE PREMULTIPLYING MATRIX AS GENERATED BY HSHREABID EXIT : THE PREMULTIPLYING MATRIX. M: ; THE NUMBER OF ROWS OF A. N: ; THE NUMBER OF COLUMNS OF A, N SHOULD SATISFY N <= M. D: ; ARRAYD[1:N]; THE DIAGONAL AS GENERATED BY HSHREABID. PROCEDURES USED : TAMMAT = CP34014 ELMCOL = CP34023 RUNNING TIME : THE RUNNING TIME IS ABOUT PROPORTIONAL TO M * N * N LANGUAGE : ALGOL-60 REFERENCES : [1] WILKINSON, J.H. AND C.REINSCH HANDBOOK FOR AUTOMATIC COMPUTATION, VOL. 2 LINEAR ALGEBRA HEIDELBERG (1971) EXAMPLE OF USE : FOR AN EXAMPLE OF USE ONE IS REFERRED TO SECTION 3.5.1.2 SOURCE TEXT(S) : 0CODE 34260; PROCEDURE HSHREABID(A, M, N, D, B, EM); VALUE M, N; INTEGER M, N; ARRAY A, D, B, EM; BEGIN INTEGER I, J, I1; REAL NORM, MACHTOL, W, S, F, G, H; NORM:= 0; FOR I:= 1 STEP 1 UNTIL M DO BEGIN W:= 0; FOR J:= 1 STEP 1 UNTIL N DO W:= ABS(A[I,J]) + W; IF W > NORM THEN NORM:= W END; MACHTOL:= EM[0] * NORM; EM[1]:= NORM; FOR I:= 1 STEP 1 UNTIL N DO BEGIN I1:= I + 1; S:= TAMMAT(I1, M, I, I, A, A); IF S < MACHTOL THEN D[I]:= A[I,I] ELSE BEGIN F:= A[I,I]; S:= F * F + S; D[I]:= G:= IF F < 0 THEN SQRT(S) ELSE - SQRT(S); H:= F * G - S; A[I,I]:= F - G; FOR J:= I1 STEP 1 UNTIL N DO ELMCOL(I, M, J, I, A, A, TAMMAT(I, M, I, J, A, A) / H) END; IF I < N THEN BEGIN S:= MATTAM(I1 + 1, N, I, I, A, A); IF S < MACHTOL THEN B[I]:= A[I,I1] ELSE BEGIN F:= A[I,I1]; S:= F * F + S; B[I]:= G:= IF F < 0 THEN SQRT(S) ELSE - SQRT(S); H:= F * G - S; A[I,I1]:= F - G; FOR J:= I1 STEP 1 UNTIL M DO ELMROW(I1, N, J, I, A, A, MATTAM(I1, N, I, J, A, A) / H) END END END END HSHREABID; EOP 0CODE 34261; PROCEDURE PSTTFMMAT(A, N, V, B); VALUE N; INTEGER N; ARRAY A, V, B; BEGIN INTEGER I, I1, J; REAL H; I1:= N; V[N,N]:= 1; FOR I:= N - 1 STEP - 1 UNTIL 1 DO BEGIN H:= B[I] * A[I,I1]; IF H < 0 THEN BEGIN FOR J:= I1 STEP 1 UNTIL N DO V[J,I]:= A[I,J] / H; FOR J:= I1 STEP 1 UNTIL N DO ELMCOL(I1, N, J, I, V, V, MATMAT(I1, N, I, J, A, V)) END; FOR J:= I1 STEP 1 UNTIL N DO V[I,J]:= V[J,I]:= 0; V[I,I]:= 1; I1:= I END END PSTTFMMAT; EOP 0CODE 34262; PROCEDURE PRETFMMAT(A, M, N, D); VALUE M, N; INTEGER M, N; ARRAY A, D; BEGIN INTEGER I, I1, J; REAL G, H; FOR I:= N STEP - 1 UNTIL 1 DO BEGIN I1:= I + 1; G:= D[I]; H:= G * A[I,I]; FOR J:= I1 STEP 1 UNTIL N DO A[I,J]:= 0; IF H < 0 THEN BEGIN FOR J:= I1 STEP 1 UNTIL N DO ELMCOL(I, M, J, I, A, A, TAMMAT(I1, M, I, J, A, A) / H); FOR J:= I STEP 1 UNTIL M DO A[J,I]:= A[J,I] / G END ELSE FOR J:= I STEP 1 UNTIL M DO A[J,I]:= 0; A[I,I]:= A[I,I] + 1 END END PRETFMMAT; EOP