j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 subrou'l'ine...

174
j j j j. "J ·' : . c ·- =l 1 L j j ...... ..... :1 . -. \ FLMXPK - A MATRIX PACKAGE by Sampath N.S. Iyengar Celal N. Kostem Fritz Engineering Laboratory Department of Civil Engineering Lehigh University Bethlehem, Pennsylvania September 1971 Fritz Engineering Laboratory Report No.400.4

Upload: doanmien

Post on 22-May-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

j

j

j

j.

"J ·' : . c

~j

~j ·-

=l

~1

~J

1 L

j

~J

j

~1 ......

~J ~1 .....

~...1

:1

. -.

\

FLMXPK - A MATRIX PACKAGE

by Sampath N.S. Iyengar

Celal N. Kostem

Fritz Engineering Laboratory Department of Civil Engineering

Lehigh University Bethlehem, Pennsylvania

September 1971

Fritz Engineering Laboratory Report No.400.4

Page 2: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

.1

:1

J

J

J ]

]

]

]

J

J

J

1

J ]

J ]

J ]

COPYRIGHT

© 1971

SAMPATH N. S. IYENGAR

CELAL N. KOSTEM

.. - ...

I

Page 3: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

' J

400.4

l . TABLE OF CONTENTS Page

] SYNOPSIS i

1. INTRODUCTION 1

] 1.1 A Brief History 1 ~

] 1.2 Divisions in the Text 2 .

2. ROUTINES 4

2.1 SUBROUTINE ADD(A,B,C,M,N) 4

2.2 SUBROUTINE DETMT(A,DA,N) 6

] 2.3 SUBROUTINE DIAG(A,DA,N) 13

2.4 SUBROUTINE EV(A,S,N) and ENTRY IEV 14

2.5 SUBROUTINE GEVP(A,B,S,T,N) 29

2.6 SUBROUTINE MINV(A,N,DET,NEXCH) 34

2.7 SUBROUTINE MOVE(A,B,M,N) 50

2.8 SUBROUTINE MULT(A,B,C,L,M,N) 51

2.9 SUBROUTINE OUTE(A,I,J,TITLE,TITEL) and ENTRY OUTF. and ENTRY OUTG ·s3

2.10 SUBROUTINE PMULT(A,B,K,L,X) 59

2.11 SUBROUTINE POSTM(A,B,K,L,X) 62

2.12 SUBROUTINE RDCBC(A,M,N) SUBROUTINE RDCOLG(A,M,N) SUBROUTINE RDRBR(A,M,N) SUBROUTINE RDROWG(A,M,N) 65

2.13 SUBROUTINE SCMUL(A,M,N,X) 67 .•

2.14 SUBROUTINE SINV(A,DA,N) 68

.. 2.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77

2.16 SUBROUTINE SQTR(A,N) 80

Page 4: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

J

:] ..

J J J J J J J J J

J :J

400.4

2.17 SUBROUTINE SUB(A,B,C,M,N)

2.18 SUBROUTINE THULT(A,B,C,L,M,N)

2.19 SUBROUTINE TRANS(A,B,I1,N)

2.20 SUBROUTINE XABATC(A,B,C,L,H,X) SUBROUTINE XABTA (A,B,L,N,X) SUBROUTINE XABTC (A,B,C,L,M,N) SUBROUTINE XATBAC(A,B,C,L,M,X) SUBROUTINE XATBB (A,B,L,N,X)

3.

3.1

3.2

3.3

3.4

3.5

3.6

3.7

4.

4.1

4.2

4.3

4.4

4.5

5.

GENERAL NOTES

CO!'-ftv10N Block Labelled IYENGAR

Use of Variable (Adjustable) Dimensions

Reserved Names

Subprogram Lengths

Temporary Vectors

Features of the CDC 6400

Use of Single Subscripts in Selected Routines

USER'S GUIDE

Introduction

General Limitations

Disclaimer

Deck Setup

Description of the Subprograms

READY REFERENCE SHEET

APPENDIX 1 (Proofs of Some Basic Theorems)

APPENDIX 2 (Listing of Subprograms)

ACKNOWLEDGMENTS

REFERENCES

82

83

84

85

88

88

92

98

100

102

103

104

105

105

106

107

107

108

138

140

150

169

170

'

Page 5: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J _] 400.4

1. INTRODUCTION

J 1.1 A Brief History

J The matrix package MXPAK was used in course work and

'-research by members of the Fritz Laboratory until the

]· GE 225 computer at Lehigh University was replaced· by the

·-] CDC 6400 in the Summer of 1968. MXPAK was written in

LEWIZ, a language developed at Lehigh, and was compatible

:.] for use with the GE 225 put not the CDC 6400.

To meet the immediate needs of the Laboratory,

] FCHXPK (FORTRAN Callable Matrix Package) was written by

J Mr. Edward T. Manning, Jr. and Mr. Iyengar in Fall 1968.

Later, a documentation of this package was considered

] worthwhile in view of its highly satisfactory performance.

At this stage, it became evident that many improvements .] -· and some additions were possible. The resu~t of all such

] modifications is the present version, FLMXPK (Fritz

Laboratory Matrix Package), which is described in the

"] -· succeeding pages.

:]

J r

"' ]

]

] -1-

1

Page 6: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

]

.]

]

J ]

.1

J

]

]

400.4

1.2 Divisions in the Text

FLMXPK contains 30 routines to perform matrix operations,

as summarized in the following table.

. Operation

Add matrices

Subprogram

ADD DETHT,MINV,SINV,SOLVE DIAG

Determinant of matrix Create diagonal matrix Eigenvalues of symmetric Invert matrix

matrices EV,IEV,GEVP

Copy matrix Multiply matrices

Print matrix Read matrix

Simultaneous equations Transpose matrix Subtract matrices

MINV,SINV MOVE MULT,PMULT,POSTH,SCHUL,

TMULT,XABATC,XABTA, XABTC,XATBAC,XATBB

OUTE,OUTF,OUTG RDCBC,RDCOLG,RDRBR,

RDROWG SOLVE SQTR ,·TRAi'lS SUB

Each of these routines has received individual treatment to

the extent considered necessary (Chapter 2). In general, the

discussion-is under the following headings:

1. Function 2. Development of the Subprogram

(including the mathematical background) 3. Special Features (if any) 4. Limitations (if any) 5. Additional Remarks (if any)

The limitations listed under each routine are in addition

to the general limitations which are discussed in Section 4.2

of the User's Guide (Chapter 4).

Chapter 3 - "General Notes" - contains remarks which

apply to the package as a whole.

The User's Guide (Chapter 4) explains briefly how each

routine may actually be used. The more important limitations

-2-

Page 7: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J j

J J -] .

1

J ]

J

]

J

J

J

j

] ~

]

]

1 1

400.4

of each routine are listed here also. The ready reference

sheet (Chapter 5) is hopefully all that a user needs in day­

to-day work after he has gained some experience in the use

of this package.

Proofs of certain theorems in matrix algebra and topics

related to the text are included in Appendix 1 to. make the

subject matter as complete in content as possible.

Finally, the subprograms the~selves are listed in

Appendix 2.

-3-

Page 8: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

2.1

l

l

2. ROUTINES

SUBROUTINE ADD (A,B,C,M,N)

2. 1. 1 Function

The sum of matrices A and B fs made available to

the calling program as matrix C. C = A + B.

Hatrices A,B, and C are each of size M r_ows by N

columns.

2.1.2 Development of the Subprogram

In algebraic terms, the addition of two matrices

may be expressed by CI J = AI J + BI J• From this de-, I I

fini tion, the following subprogram is e_asily written.

SUBROUTINE ADD(A,B,C,M,N) CO.tv' ... NON/IYBNGAR/I ,J, Y (12) REAL A(M,N) ,B(M,N) ,C(M,N) DO 1000 I = l,M DO 1000 J = l,N

1000 C(I,J)=A(I,J)+B(I,J) RETURN END

The use of the labeled COHHON block is discussed

under "General Notes" in Chapter 3.

In the above routine, the computations required for

locating the elements in the three double-subscripted

arrays are time-consuming. The matrices may, however,

be treated as single-subscripted arrays in the sub-

program to reduce the time required for address compu-

tations.

A further advantage of this procedure is that the

-4-

Page 9: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

1 ]

]

1 ]

J

1

']

]

J

1

.1

]

l 1

1

J

]

400.4

operations can now be performed using a single DO-loop

as indicated in the listing (Appendix 2).

The size of each matrix is M*N elements but a dec­

laration of the type REAL A(H*N) is invalid. This dif­

ficulty is easily overcome by dimensioning each array

as a vector consisting of one element only. · When the

subprogram is CALL-ed, the starting addresses of each

array are passed to the subprogram and hence, in the

subprogram, the arrays are spaced as required in spite

of the arbitrary dimensioning.

2.1.3 Additional Remarks

The resultant matrix C can be stored in either of

the original matrices (say A). In this case, the origi­

nal matrix (A) will be destroyed.

-5-

Page 10: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l J

] 1 ~

]

]

1 ]

1 J

:]

]

1 ]

1 1 l ]

400.4

2.2 SUBROU~INE DETMT(A,DA,N)

2.2.1 Function

The determinant of the given matrix A of size N rows

by N columns is made available to the calling program as

DA.

2.2.2 Development of the Subprogram

The basis of operations is to reduce the given mat-

rix to a lower or upper triangular matrix by elementary

transformations and form the product of the diagonal

elements of the reduced matrix to give the determinant.

In the process of such a reduction, whenever a submatrix

in the upper left of the original matrix is singular,

division by zero will be encountered. Row or column ex-

changes are necessary to overcome such a situation, if

it exists, before each step of the reduction process.

This subprogram utilizes column exchanges and re-

duces the original matrix in its own space to an upper

triangular matrix.

-6-

Page 11: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

I 400.4

I I

l 1 ]

1 J

I l

I J

J

]

1

1 ..

1 ]

l

Assume that the matrix has the following form at the

end of I-1 (I> 1) stages of the reduction process.

Al,l A1,2 . . . Al,N

0 A2 2 . . . A2,N 0 0 ' 0 0

0 0 AI,I AI,I+l AI,N

0 0 AI+l, I AI+l,I+l• AI+l,N

.

0 0

Except possibly for the elements in row 1, all the

elements are modified by the reduction process and, there-

fore, do not correspond, in general, to those of the ori-

ginal matrix. The part product of the diagonal elements

AK,K where K ranges from 1 through I-1 is assumed to have

been computed and stored in DA.

Further processing starts with row I. Since AI,I may

be zero, the immediate step is to search the Ith rmv for a

non-zero element in columns I through N. If AI,I itself

is non-zero, the process of reduction may be continued.

However, it is advantageous, in the interest of accuracy,

to choose AI,I such that it is as large as possible in

absolute value, since division by AI,I is later involved.

Hence, the Ith row is searched for the largest absolute

valued element in columns I through N.

-7-

Page 12: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

I

1

1

1

l ]

]

1

l 1 1

If all the elements searched are zero, the conclusion

is that the matrix is singular, and hence DA has the value

zero. Control is returned to the calling program in such

a. case.

Otherwise, the largest absolute valued element in row

I is located in, say, column N where N > M,;::: I. If H equals

I, the largest absolute valued element is AI,I itself and

no exchange of columns is involved. If M does not equal I,

columns M and I are exchanged, and the corresponding change

in the sign of the determinant is accounted for. It is

useful to note that such an exchange may be limited to

elements in rows I through N only, as elements in rows 1

through I - 1 do not affect the evaluation of the determinant.

For further discussion, the form of the matrix noted

above remains valid, although the values of some of the

elements may have changed because of column exchanges.

The part product of the diagonal elements is then

modified to include AI,I· In FORTP~N language,

DA = DA*A(I,I).

The next step is the process of reduction. To reduce

the elements in column I of rows I + 1 through N to zero, -A

it is necessary to add !1 ·I times the Ith row to row H, AI,I

where (I + 1) $.. H.:S N. After such additions, the modified

matrix has the following form.

-8-

Page 13: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

""' 0·

Al,l A1,2 • Al,N 0

"'"' 0 A2,2 • A2,N

0

0

0

• 0 AI,I (Elements in this row need not be modified)

0 0 0 0 0 0 AI+l,I+l-Ar+l,I

AI,I+l AI+l,N-AI+l,I

Ar,N Ar,I Ar,I

0

0

I • 0 \.0

Ar-1 I AM, I I

0 0 0 0 0 0 AH, I+l ' AI,I+l AM,N AI N Ar,I AI,I . I

0

0

0

0 0 0 0 0 0 ~,I+l AN,I

AI,I+l AN,N AN,I

AI,N A AI,I I,I

Page 14: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

j 400.4

j

.l

1

1 l

]

J

J

J J

J

I

I

Since the purpose here is to evaluate only the

determinant, better speed can be achieved by avoiding

generation in the machine of fresh values for some of

the elements. Some of these values are known (zeroes

below AI,I in column I) and others do not affect the

final product (elements to the right of AI, I- in row I).

The general formula, then, in the region of interest,

is -simply AH,I

AM,J = AH,J -AI,I

AI,J ,

where both !1 and J range in values from I + 1 through N,

and the prime* denotes the fresh values computed for

the corresponding elements.

AH I The elements are evaluated row by row and ---'- is

AI,I recognized as a constant \vhen elements in row M are

processed.

When the search and reduction process explained

above is repeated for a total of N-1 cycles, the matrix

is (upper) triangulated and all that remains is to mo-

dify the part product of the diagonal elements obtained

thus far by multiplying it by AN,N to give the final

value of the determinant DA.

*In the subprogram, it suffices to redefine AH J as the quantity on the right-hand side of the equati~n.

-10-

Page 15: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

j

]

] .

] .

.J

]

J

]

j

1 _]

J

J

.1

]

1

1

1

400.4

,.,

A special situation arises if N is 1. The normal

reduction process in this case would imply operations

in stages 1 through 0, which is meaningless. However,

. the determinant is simply A1 , 1 of the original matrix

(1 by 1). Hence, very soon after the subroutine is

entered, N is checked for equality with 1 and if the

test is true, the determinant is set to A1,1 and con-

·trol is returned to the calling program.

2.2.3 Features

The operations involved are carried out within the

space of the given matrix itself. Thos~ operations

which do not affect the final result are avoided

altogether to ensure better speed of performance.

2.2.4 ·Limitations

The original matrix A is destroyed in the process

of evaluating the determinant~

It is conceivable that the determinant of a matrix

which is singular may not be identically zero when this

subprogram is used, because of machine errors in using

floating-point arithmetic. A check of the diagonal

element AI,I for its absolute value at each stage of the

reduction process (after column exchanges, if any) with

a number like 1.0 x 10-6 could have been employed to

recognize the singularity of the matrix, but this has

-11-

Page 16: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

]

]

]

]

]

1 ]

]

]

]

'I

an obvious disadvantage. The determinant is a function

of the values of the elements in the original matrix as

well as their positions. Hence, a purely arbitrary num­

ber like 1.0 x 10-6 is inadequate for such a test. In

most engineering applications, the user has a feel for

the value of the determinant based on the trend of a

set of calculations and is normally able to recognize a

singular matrix when the determinant is "small".

2.2.5 Additional Remarks

If the value of DA is to be printed, it is better to

output this quantity in E-format (or G-format) than in

F-format since, generally, its magnitude is unknown.

This is the only subprogram (in this package) that

can also be written as a FUNC~ION subprogram [FUNCTION

DA (A,N)]. Were it so written, it would have to_be

"referenced" instead of being "CALL-ed" by a calling

program. In its present form, no exception is necessary

to the general rule of CALL-ing any of the subprograms.

-12-

..

Page 17: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

-1 _. 400.4

] 2. 3 SUBP.OU'r IL-!E D lAG (l\, DA, lJ)

2.3.1 Function

J. Ilatrix A of dimension N rm·1s by ;:~ columns is gene-

J rated as follows. All the diagonal elements have the

same value DA, and the off-diagonal elements are all

] zero (Diagonal matrix).

~1 .,

2._3.2 Development of the Subprogram

Treating the matrix as a vector of N*N elements in

"j the subprogram, a null array is created in the first

l DO-loop (Appendix 2). Next, the diagonal elements are

each assigned the value DA in the second DO-loop.

] 2.3.3 Additional Remarks

"] DA should be defined as a FOETl\.2\N real nu:nber in

the calling program.

]

'j .,

.J

.J

.1 ]

,.

J

J -13-

]

Page 18: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

]

]

]

. I

]

]

.1

2.4 SUBROUTINE EV(A,S,~) and E~TUY IEV

2. 4. 1 FuncJcion

Eigenvalues and eigenvectors of the symmetric matrix

A are computed.

2. 4. 2 Development of the S1..1.bprogram

A. Theory and a Practical Approach

The procedure presented here is based upon the

mathematical discussion of the problem outlined by

(1) Greenstadt .

If X is a scalar and X is a (non-zero) column vee-

tor such that AX = A. X, vector X is known as the eigen-

vector corresponding to the eigenvalue X • c. ; . -,)lnce ma-cr1.x

A is of size N (N rows by N columns), it ha~ N eigenvalues

and N eig~nvectors. Since matrix A :i.s also ~~ymmetric,

its eigenvalues are all real but not necessarily distinct.

However, N distinct eigenvectors can b~ found. In fact,

it can be shown that these eigenvectors are also orthogo-

nal; that is, mutually perpendicular to each other.

] If the eigenvalues represent the diagonal elements

]

.1

1

of a diagonal matrix D, and the corresponding eigenvec-

tors (normalized) represent the columns of a matrix S,

the equation AS = SD tepresents a generalization of

AX = XX. (Recall that postmultiplication of ~atrix S -(

by a diagonal matrix D is equivalent to multiplication

of each column of matrix S by the corresponding diagonal

-14-

Page 19: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

]

'1. .. .11

]

]

]

]

]

J ]

J J

400.4

. .element of matrix D). Since the X vectors are crtho-

normal 1 s iS an OrthOn0l"n1dl m.J.triX an<..t hence sri.' ::: s-·1,

The equation AS = SD can, therefore, also be written as

In mathematical terms, if S is an orthonormal matrix

such that the transform (sTAs) of matrix A is -a diagonal

matrix, the diagonal elements of the dia."gonal mu.trix are

the eigenvalues of matrix A and the columns of natrix S

are the corresponding eigenvectors. The requirement is,

therefore, to find tha matrix S. In the case of a 2 x 2

matri~, it can be found almost directly, as shown below.

A = t:·: L ,

Hatrix A is syfiu:tetric.

Assume S = [ co~ e sin e ]

--s ln e cos 6

Matrix S is orthonormal, and the value of e is to be

found. · The transform of h is given by s'l'As 'dhich is

symmetric.

= [A1 , 1 cos 2e + A 2 ,~sin2e..:. 2A1 , 2 cosesinG

(Al,l-A2 , 2 )cos8sin8 + A1 , 2 (cos2e-sin2e)

l ( ) . ( 2 . 2,\1 A1 , 1 -A2 , 2 cos9sln8 + A1 , 2 cos 8-sln 8,

1

A1 , 1sin 2e + A2 , 2cos 2e + 2A1 , 2sin9cos6 J

-15-

Page 20: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

]

]

]

J

l l l

1

1

l

Hence, A will be diagonalizcd if 8 satisfies the rcl2tion

(A1 , 1-A2 , 2 )sin 28 = -2A1 , 2cos 28

-2Al 2 I '

or tan 28 = ( 1)

A simple application in Civil Engineering is the eva-

luation of principal stresses in an element which is

ject to norr7lal and shearing stresses. I (5 = 6 l yy

_, ______ --- C5 = r3 ,--------, ~ 1/

1' I xy ' 1

~1-- : i --;-- C5 = 4

li I v XX L_ ____ __J

------;r

I t

Figure l(a)

sub-

The stress tensor for the loading shown in Figure l(a) is

From Equation (1), tan 28 -4-6

Hence, the principal stresses are given by the diagonal

elements of the follm1ing matrix:

[

3. 0

0.0

0. OJ 7.0

-16-

Page 21: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

]

]

]

]

.1

]

J

]

]

]

]

J

]

]

J ~·

:]

J

-1

The or-ientations of ti1e pr·incip2..l pl2..~1e s are c:cpi cted

in Figures l(b), l(c), and 1(d).

(0 '0)

Minor-

-~ (J

I YY = 6

I ~--- (J = ./3

\ II_:,_ y'/" \ /

,._- \ .:-;·~\ .

0

30

Fig. 1 (b)

(J

XX = 4

Fig. 1(d)

-17-

Fig.· 1 (c)

Prin.Pl.

Page 22: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

j

j

"•·j .. ~

. J

J

J

J

J

]

J

When matrix A is larger than 2 x 2 it is not possible

to findS directly, since there is more than one of£-

diagonal element to be annihilated. ['i"lhenever an off-

diagonal element is referred to below, it is assumed to

be in the upper half of the matrix (subscripts P,Q where

p < Q) ~ By symmetry, there is a corresponding- (Q,P)

element identical in value in the lower half. Both

elements are affected in the same way t:1roughout.]

However, it is possible to annihilate a selected off-

diagonal element Ap,Q if matrix A is transforoed by R,

where R is the Identity matrix modified with regard to

the following elements only.

RP,P = cos e

RQ,P =-sin 9

Rp,Q=' sin 8

RQ,Q= cos e

t•latrix R is orthonormal and tan 29

(See Appendix 1 for the values of sinS and cose from this

equation). In the transform RTAR represented by matrix

B, BP,Q (and BQ,P) will be zero. We now need to continue

this process to annihilate some other off-diagonal ele;nent

of matrix B by a transform using another orthonormal

matrix, say T. ,.,

( RT ) '-A ( ET ) .

Since R and 'l' are both orthonormal, R'r is orthonormal

(Appendix l) . In other words, Cis the transform. of A by

RT, although it was shown to be derived in two steps

using elementary orthonormal transformation matrices R

-18-

Page 23: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

).

]

]

]

l 1 J .l J

400.4 and T in turn.

With the transform of B to C, usually it happens

that BP,Q' whi~h was zero, will not retain that value.

The annihilation of AP,Q is therefore undone.

Naturally, therefore, the question arises whether a

process such as this is convergent. The answer in the

affirmative was first provided by Jacobi. (The ?roof

is not presented here.) To achieve rapid convergence,

he also proposed selection of that off-diagonal element

which has the largest absolute value, for annihilation

at the subsequent step of the process.

The selection of the off-diagonal element may be

modified slightly when using the high-speed electr.onic

computer(l). The procedure is as follows.

The square root of the sum of the squares of the off-

diagonal elements in the upper half of matrix A is calcu-

lated first. (Note that squaring each element emphasizes

the importance of the elements having larger absolute

values. The principle is analogous to that used in Least

Squares Method for Curve Fitting.) This is called the

initial threshold (TURI in the subprogram) . If diagonali-

zation of A can be continued indefinitely to the point

where all off-diagonal elements are zero, the final thres-

hold will be zero. For practical reasons, it is necessary

to terminate the program when the absolute value of each

-19-

Page 24: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

1 400.4

l 1

1

1

1

1

J

off-diagonal element is sr.taller thc:..n a specified valur.:;

(THRF in the subprogram) . Since the magnitudes of the

original off-diagonal elements will differ with each

problem, it is further necessary to relate THRF to these

elements in some way. This subprogram assumes that 'riiRF

is one-millionth of THRI. (Greater accuracy ~an be

achieved as discussed later under ENTRY IEV.)

Having set the value of THRF, the value of THRI 1s

reduced by dividing it by a number Hat least equal to N,

the size of the matrix. In this subprogram, N itself is

the nurilier chosen. 'l'hen, there is at least one off-

diagonal element which is larger in absolute value than

this new value of THRI{l).

Any off-diagonal eleffient which exceeds THRI in

absolute value is a "candidate" for annihilation. The

choice is made syste;:natically. If the first of£-diasonal

element (A1 ,2) is a candidate, it is annihilated.

Al,3 is considered.)

(Else,

Assuming A1 , 2 was annihilated in the previous step,

the next off-diagonal element considered is Bl,3· (Note

that A is transformed by now to B.) The next in order is

c2 , 3 , etc. (column by column).

At the conclusion of the first sweep, there is no

guarantee that every off-diagonal element \·!ill be less

than THRI in absolute value, since annihilation of an

-20-

Page 25: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l -400.4

l element in a particular step may have been undone by sue-

l ceeding transformations. This is no serious problem since

one or more repeat sweeps will assure that THRI is larger

l- than every off-diagonal element in absolute value, by

virtue of convergence of the process. The necessity or

)· otherwise of a repeat sweep is indicated by the value of

J the logical variable IND in the subprogram.

THRI is now further reduced by dividing it by N and

l the process repeated all over again. When THRI, so

modified successively, becomes less than THRF, the diagona-

l lization is terminated.

1 B. Programming De·tails

7he procedure calls for many matrix multiplications.

-~ -· Although several names have been used in the earlier dis-

J cussion for the sake of clarity, the subprogram actually

uses only matrices A and S. The original matrix A is con-

J tinuously modified so that on return to the calling program,

J it is diagonalized and has, for its diagonal elements, the

eigenvalues of the original matrix A.· Matrix S is ini-

j tially defined to be the Identity matrix and is also

modified at each step so that finally it will store, in

J . its columns, the eigenvectors of the original matrix A.

_ .. , -·"

Assuming calculatio~Bat stage J have been completed,

the modifications required for matrices A and S at stage

J J + 1 will now be noted. Let R be the elementary

J -21-

.-1

Page 26: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l 400.4

l orthonormal transfor::c1ation matrix during this stage. For

'l convenience, again, let B = RTAR and T = SR.

Since matrices A and B are synm1etric and R contains a

r nuwber of zero elements, it is reasonable to suspect that

regular matrix multiplication is not warranted. A long-

.1 hand matrix multiplication shows that the following equa-

., tions are true. These may, however, also be derived .

~ (AP,Q is the element to be annihilated.)

l BP,K = A cose - AQ -,. sine where K :j p or Q (2) P,K ,h

l BQ,K = Ap T' sine + AQ,K cose where K _J, p or Q ( 3) ,t>- I

BI1

P = AI P cose - AIIQ sine where I t- p or Q ( 4) I

1 BI,Q = AI P sine + AIIQ cose where I =J p or Q ( 5) I

']

l

B = AI,K vlhere I ancl. K are both different ( 6) I 1 K from p and Q

2 sin2e sinecose ( 7) Bp p = Ap p cos e + AQ,Q - 2Ap

1Q

I I

BQIQ = Ap p sin2e + AQ,Q cos2e + 2AP1Q sinecose ( 8)

'

.1 BPIQ = B = (Aplp - AQ,Q) cose sine + A0 Q(cos2e-Q,P .. '

sin2e) ( 9 )

.1 TI1K = SI K where K t- p or Q ( 10)

'

.1

TI,P = si,P cos8 SI Q sine ( ll) ' - .

TI,Q = si P sine + si,Q cose (12) I

l This list of equations enables us to recognize a few

l features which, when incorporated in the program, speed up

operations considerably.

l :l

-22-

l

Page 27: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4 The matrix B is the s.:rrne as matrix A, except fer ro'.-:s

P and Q and colunms P and Q. Further, by virtue of s :;·m;~>e try,

.] rows P and Q are the same as colunms P and Q, respectively.

]. The following scheme to generate m~trix B (the new A) can

therefore be adopted.

. . -]- l. Calculate a new value for each element- of column P .

f-lodify the corresponding element in row P to have

the same value.

Do the same for column Q and row Q in the same DO-

loop. Equations 4 and 5 are to be used.

-·]. -·

2. As a consequence of step l, we have some fictitious

values for (the pivotal) elements Bp1

p 1 Bp,Q, BQ,P

and BQ,Q as these elements also have been conputed

using either Equation 4 or Equation 5 .

. this ">vasteful" set of calculations (the values \

] will be discarded) has saved any checking of S'lJb-

scripts that would otherwise be involved in Step l.

J The elen-:ents of the pivotal set are nm-1 evaluated

according to the Equation~ 7, 8, and 9. The

"mistake" is thus corrected.

] Turning next to matrix T, it is seen that, again, only

columns P and Q of matrix T are different from those of

matrix S. The calculations needed can be easily cornbined

1 with those in Step l above.

1 -23-

l

l

Page 28: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l 400.4

1 C. ENTRY IEV

It was remarked under Part A in the above discussion

1 that the accuracy of calculations need not be confined to

the degree where THRF equals one-millionth of the initial

l threshold value. The following explains this feature.

1 The diagonalization of matrix A was shown to be an

iterative process. Since a limit to this process was re-

quired to be set for practical reasons, THRF was set ·to the

value stated. The fraction, one-millionth, was arbitrarily

chosen assu:raing that the requirements of the user are there-

l by met. (Reference 1 uses one-billionth in a numerical

example.) If, however, a user is interested in greater

l accuracy, all that is necessary is to return to the sub-

l program from the calling program and thus continue the

process which is iterative. In other words, the subprogram

:I should be CALL-ed again. However, one snag of this pro-

cedure must be avoided .

. I If the subprogram is CALL-'ed again in the fo1.·m CALL

'1

EV(A,S,N), the S-matrix will get reinitialized to the

Identity matrix. So, although the eigenvalues will be

. l improved, the eigenvectors wi 11 all have wrong. valu.es .

The ENTRY statement is useful to avoid this difficulty. 1

.j The statement ENTRY IEV in the subprogram allows an

1 alternate point of entry (the next executable statement

I after the ENTRY statement). Hence, if the CALL statement

l l

-24-

Page 29: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

-··j j

:J ,

j

l

.1

l j

400.4

is CALL IEV(A,S,N), the initializa~ion of the matrix S

will be bypassed. Thus, matrix S also will be improved.

In the subprogram, the positioning of the ENTRY state-

ment is such that calculations for THRI are also bypassed.

This was deliberately done for the following reasons.

With the first use of the subprogram, the ~alculations

for the initial threshold will be made and the diagonaliza-

tion procedure assures us that every off-diagonal element

is less than one-millionth of this quantity in absolute

value. The variables THRI and THRF in the subprogram,

defined prior to the ENTRY statement, represent these quan-

tities. The variable THRI changes in value during the

execution of the subprogram a~d when the diagonalization

is terminated, it is less than THRF. If now, THRF is re-

duced to one-millionth of its mm value, we will have set

the final threshold for a subsequent use .of this subprogram

and be ready for the improvement procedure, without having

to calculate a new initial threshold. (See the redefini-

tion of THRF just prior ·to the RE'l'URN Statement.) The accu-

racy prescribed for the second ruri would, therefore, be

lo- 12 times the initial threshold value calculated for the

original matrix A. This process is also iterative and

-6n hence in general terms, the accuracy is 10 times the

initial threshold value, where n is the number of times

this subprogram is CALL-ed.

-25-

Page 30: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

1 ]

l

1 ]

1 1

1

l

]

1

]

400.4

The advantages are these: 1. The user has a measure

of the accuracy based on the nurrtber of CALL s ta ternents.

2. The calculat~ons for initial threshold are limited to

the first set. 3. These calculations can be combined

with the initialization of the S matrix (to the Identity

matrix) in the same DO-loop nest.

D. CALL-ing Procedure

The following rules apply to the CALL st~tements for

the reasons stated.

1. CALL EV(A,S,N) must be used the first time around.

This permits matrix S to be initialized and the initial

threshold to be evaluated.

If the accuracy prescribed is considered good

enough, the problem is solved on return to the calling

program.

2. CALL IEV(A,S,N) must not be used the first time

around, since matrix S and the initial threshold will not

be properly initialized.

3. CALL IEV(A,S,N) may be used as often as necessary

subsequent to CALL EV(A,S,N).

Trail runs have shown that the eigenvalues '.vill not

differ appreciably when improvement is attempted. This

is because the eigenvalues found in the initial run are

already very close to the exact values.

-26-

Page 31: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

l j

]

]

1 ]

l .]

1 _]

]

J

J

J

l .]

.l

1

400.4

The eigenvectors shm: some improverr:ent \·lith eac:1 sub-

sequent CALL IEV(A,S,N). In engineering problems, one

improvement cycle may be considered the maxir.mm necessary.

(A good check on the final resul~s is to form the

matrix product SAST, where s is the matrix of eigenvectors

and A is the matrix of eigenvalues, and compare this Hith

the original matrix A. Since the original matrix A is

destroyed when this subprogram is used, it needs to be

saved or printed earlier for comparison if this check is

deemed necessary.)

A repeated number of improvement cycles indicates

fastidiousness with respect to accuracy uncalled for in

engineering applications. Further, there is a good chance

of creating an underflow in the machine (extremely small

quantities in absolute value other than zero itself can­

not be handled by the machine).

For obvious reasons, matrices A and S should not be

affected in any Hay in the calling prog-ram betv1een t>.-10

successiva CALL-s·to this subprogram.

4. CALL EV(A,S,N) must not be used except for the first

time. The reason, as already stated, is that such a CALL

would destroy the S-matrix previously found by reinitial­

lZlng it to the Identity matrix.

-27-

Page 32: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4 E. Special Case of l x l Natrix

If N equals l, there are no off-diagonal elements.

For this case, the eigenvalue is the element itself and

the eigenvector is just 1.0. In the subprogram, therefore,

N is checked for equality with 1. If N = 1, the relations

mentioned are established directly.

2.4.3 Features

Memory requirements are minimal, and speed is ensured

by avoiding full-scale matrix multiplications.

An improvement of the eigenvalues and eigenvectors is

easily possible, at the user's option, by one or more

additional CALL statements.

2.4.4 Limitations

The matrix whose eigenvalues and eigenvectors are to

be found must be syrnmetric. It will be destroyed in the

subprogram.

l J

-28-

Page 33: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

'l -~

J .

l

.. J

..)

,.,] ·-

.]

~]

400.4

2.5 SUBROUTINE GEVP(~,B,S,T,N)

2.5.1 Function

Eigenvalues and eigenvectors of the syn:ur.etric

matrix A where AX = A.BX are computed (General Eigenvalue

Problem) . In this equation, X is the eigenvector cor-

responding to the eigenvalue A. \·lhich is a scalar quanti-

ty. B is a synune·tric matrix which is also positive

definite.

2. 5. 2 Development of the Subprogram

Iri tetms of matrices, the above equation may be

rewritten in the form

A·~= B~L

where ~ represents the matrix of eigenvectors; that is,

q? = [xl x2 X l • • • :;rj and

xl' X2' ••• 'XN are the N colunm vectors corresponding to

A. 1 1 'A 21 ••• , A.N Hhich are the N eigenvalues. L is the

matrix of eigenvalues and is a diagonal matrix.

At first sight, it would appear that the solution

may be obtained directly by writing

or C Q = qj L

and finding the eigenvalues and eigenvectors of the

matrix C, by the use of another subprogram. This would

be in order provided the subprogram· used can handle non-

synunetric matrices. This package does not contain such

-29-

Page 34: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

I

I

''l

., '1

'1 I

400.4 a subprogram.

Since B is symmetric, B-l is also symrr:etric U\ppen­

-1 dix l). The product C = B A is, however, not neces-

. sarily syr.unetric, although both B-l and A are syrmnetric

(Appendix l) .

The problem needs therefore a modification of the

matrices such that a symmetric matrix will result and

SUBROUTINE EV(A,S,N) may be used.

The matrix B can be expressed in the form B = SDST

where D and S are the matrices of eigenvalues and eigen-

vectors respectively of matrix B (Section 2.4.2 D).

Hence, A ~ = B ~ L = SDST ip L or

Since matrix B is positive-definite, its matrix of

eigenvalues (diagonal matrix) will have, for its diago-

nal elements, only positive terms and hence it is pos-

sible to express matrix D as the product of two (diago-

nal) matrices G and G, where

GI,I =ID1 , 1 and GI,J = 0.0 for I 1 J,

without the necessity of dealing ,,vi th imaginary nurrcbers.

Hence I sTA ip = DST <.P L = GGST .p L

or

which can be written as

= GST <.P L

Using the notations, ~ = GST~ -1 , F = SG and hence

-30-

Page 35: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

--1 .: ......

400.4

M1 ~-\

~--1 ~--

~-l .' --\.:

~-l n~. :~ w •

r·1 , __

~-] ~~

, .. ] ~-·

J ... 1 ·-] -·

. J ]

_]

] .

·-] -·

J .]

']

rr F AF'l:' = '±' L

Since (FTAF)T = F1,AF by virtue of syrmnetry of A,

FTAF is symmetric. Letting FT AF = C, C '±' = '±' L, Hhere

C is synunetric.

This equation is hence in a form suitabl~ for the

use of SUBROUTINE EV(A,S,H).

The matrix of eigenvalues, L, obtained in such a

manner needs no modification as it is the same L in the

original equation A Q = B .P L.

From \J/ = GST~ the matrix of eigenvec-tors Q is J.

given by iQ = SG-l '±'

The procedure, in brief, is to modify matrix A and

obtain matrix C first. The eigenvalues of matrix C are

the required eigenvalues. The eigenvectors of matrix C

(matrix '±' ) are to be modified by premultiplic2tion by

. -1 the matr1.x SG .

-1 The importance of generating SG and saving it for

all modifications at further stages should be noted.

'i'he product SG-l is simple to obtain. -1 Denoting G as

H, and SG-l = SH as T, the elements of T are

N TI,J = E si,KHK,J

K=l -1

Since G or H is a diagonal matrix and hence

HK,J = 0 if K f J,

-31-

Page 36: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

-..,1 ~ ... J

, .. , ,.-.]

-.~.,

..... ]

... J ... J

J

]

]

1

1

1 l

1

400.4

The columns of matrix T are thus the columns of

matrix S, each multiplied by a different scalar quantity.

-1 The product SG (=T) can be stored in matrix S itself.

The required modifications may be outlined in the

following manner, from the programining viewpoint .

Step 1. Obtain the eigei1values and eigenvectors of

matrix B by using SUBROUTINE EV(B,S,N). Matrix B now

stores the eigenvalues of the original matrix B and S

is its matrix of eigenvectors. (These correspond to

matrices D and Sin the derivation.)

Step 2. Obtain the product SG-l and store it in matrix

S. Note that each diagonal element of G-l (off-diagonal

elements are zero) is merely the reciprocal of the

square root of the corresponding diagonal element of

matrix B.

Step 3. Obtain the product AS and store it in matrix

Busing SUBROUTINE MULT(A,S,B,N,N,N).

Step 4. Obtain.the product STB using the property of sym­

metry of the resulting matrix and store it in matrix A.

The product corresponds to matrix C in the derivation.

Step 5. Obtain the eigenvalues and eigenvectors of

matrix A using SUBROUTINE EV(A,B,N). Matrix A now cor-

responds to matrix L, the matrix of eigenvalues in the

derivation (no further modification required for matrix

-32-

Page 37: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

r1 LJ

'111 !:,

'·~

J ]

"''] --

]

]

]

]

_]

400.4 L). r·latrix B corresponds to matrix ·y ln the derivatio!1.

Step 6. Obtain the product SB by using SUBF<.OUTDJE POSTt-1

(S,B,N,N,T) where T is a vector required in that sub-

. program for computations. £·latrix B now stores the re-

quired eigenvectors (corresponding to matrix ~ in the

derivation).

2.5.3 Features

This subprogram uses other subprograms developed in

this pc>.ckag·e, and coding is mainly a set of CALL s·tate-

ments. Additional storage spaces in the form of an

extra matrix and a vector, which are required to carry

out the computations, are believed to be the minimrn1

necessary.

2.5.4 · Limitations

Original matrices A and B must be symmetric. Matrix

B must also be positive definite. The original matrices

are destroyed when this subprogram is used. Other sub-

programs of this package as detailed in the User's Guide

(Chapter 4) must be available and loaded v-1hen this sub-

program is used.

-33-

Page 38: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J l .

~ ii;J

, ;.,:,3

1 . , -~~

]

l ]

]

]

l

400.4

2.6 SUBROUTINE MINV (A,N,DET,NEXCH)

2.6.1 Function

The matrix A of size N rmvs by N columns is inverted

and the inverse returned to the calling program in A it-

self. Also, the determinant of the original matrix is

computed and returned in DET.

2.6.2 Development of the Subprogram

A. The Core of the Subprogram

By a process of elementary transformations (on

rows) of A, it is possible to reduce matrix A to the

Identity Matrix, referred to as matrix B below.

Hence,

'I'ln.1s, the same elementary transformations (on rm1s) of

B will generate A- 1 .

In the discussion, the elementary transformations

will initially be limited to (i) division of a row by a

scalar and (ii) addition of a multiple of a row to

another row. Later, they will also include row exchanges.

In general, there is no need to follow any definite

pattern in the reduction of matrix A to matrix B. The

rules below, however, provide a systematic method of

ach~ving the reduction, with a view to easy programming

on a computer.

-34-

Page 39: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

~

l l ~·, ~~· ~ -

I1 ~1 -~1

~l .. , ··-4

-~,

"~

400.4

Step 0. Create the Identity Matrix

Step 1. Let K = 1

Step 2. The pivot element is the diagonal element in

row K of matrix A. Divide the Kth row of both

matrices A and B by the pivot element. The

element A(K,K) will then be reduced to 1.0.

Step 3. Add suitable multiples of the (modified) Kth

row of matrices A and B to all other rows of the

respective Qatrices to generate 0.0 in the Kth

colurrm of matrix A. If the rm·l number is I,

-A(I,K) is the suitable multiple.

Step 4. Increment K by 1.

Step 5. If K exceeds N, stop. Otherwise, return to

Step 2.

'l'he numerical example below illustrates this proce-

dure and provides as well some useful material for later

discussion. 'I'he matrix on the left is A and that on the

right is B.

Step 1. K = 1

4.0 1.0 0.0

4.0 3.0 1.0

1.0 1.0 1.0

1.0 . 0.0 0.0

0.0 1.0 0.0

0.0 0.0 1.0

(The significance of the pair of dashed lines

will be explained later.)

-35-

Page 40: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l

l

1

1

}

]

l J

1

1 1 1 1 l 1 l

400.4

Step 2 .

l..

(

Step 3.

Step 4.

Step 5.

Step 2 .

Step 3 .

Step 4.

Step 5.

Pivot element has the value 4. 0 . Divide

rmv l by 4 . 0 . l....

..... o. ?5·> 1.0"> 0.25 0.0 0.0 0.0 ..-...-__ .....

4.0 3.0 1.0 I 0.0 1.0 0.0 I I

1.0 1.0 1.0 i I 0.0 0.0 1.0

Add -4.0 times row l to row 2' -1.0 tir.1es row

l to row 3.

ILO i 0 25 I • 0.0 0 25 I • I 0.0 0.0

I 1.0

I 1.0 0.0 0.0 I 2. 0 -1.0 I

I I 1. o I I 0. 0 l 0. 7 5 1.0 1-0.25 I 0.0

I I

K = l + l = 2

2 *' 3' Return to Step 2.

Pivot element has the value 2 . 0 . Divide ro'd

2 by 2. 0.

11.0 ! 0 25 0.0, r 0.25 I

0.0 " . t__O.O ......

1-o.s ......

.... ' I o. o 1.0> 0. 51 0.5> 0.0 / " /

_, I r I r 0.0 10.75 1. 01 t-0.25 I 0. 0 1. 0 I

I

Add -0.25 times rov1 2 to rmv l,-0.75 tur,es

row 2 to row 3.

11.0 0.0 -0.125 0.375 I -0 .125 I 0.0

I ·o. o 10.0 1.0 0.5 -0.5 0.5

lo.o 0.6251 I

0.0 0.125 -0.375 I 1.0 I

K = 2 + l = 3.

3 } 3. Return to Step 2.

-36-

Page 41: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

I 1

l

.l

.. 1

l

1 ]

J

]

] .

]

]

]

1

400.4

Step 2. Pivot element has the value 0.625. Divide

row 3 by 0.625. ·

1.0 0.0 I 1-0.125 0.375 I -0.125 I 0.0 I I

0.0 1.0 I

-0.5 0.5 ~ 0. 0 l.. 0. 5 ..... ...

' ... 0.0 0.0 1.0> 0.2 -0.6 1. 6>

/ / /

_, .-· /

/ ,.... Step 3. Add -(..:..0.125) tirr,es row 3 to row 1, _-0.5 times

row 3 to row 2.

1.0 0.0 0.0, 1 o. 4 -0.2 0.2

i 0.0 1.0 0.01 :-0. 6 0. 8 -0.8

I I 0.0 0.0 1.0 I ! 0.2 -0.6 1.6 I

Step 4 . K = 3 + 1 = 4

Step 5. 4 > 3. Stop.

Evidently, the process has to be repeated N times.

The procedure is surnrnarized in the program section

belov7.

CALL DIAG(B,l.O,N)

DO 1000 K = l,N

TEMP = 1.0/A(K,K)

DO 2000 J = l,N

A(K,J) = A(K,J)*TEMP

2000 B(K,J) = B(K,J)*TEMP

DO 3000 I = l,N

IF(I ·EQ· K) GO TO 3000

1'El'1P = -A (I I K)

DO 4000 J = l,H

A(I,J) = A(I,J) + TEMP*A(K,J)

-37-

Page 42: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

1

1

1 ]

l l 'J

l ]

1

l ]

1 1

1 ]

1 ']

'1

400.4 4 0 0 0 D (I I J) = 13 (I I J) + TEr1P * B ( K I J)

3000 CONTINUE

1000 CONTINUE

The program requires that i) separate memory space

for the matrix B be provided and ii) matrix B be defined

initially as the Identity Matrix. The ensuin·g discussion

aims at proving that these requirements need not be met.

Note that, in any problem, the elements that do not

lie between the dashed lines will renain the same. These

invariant elements need not be stored, if the program can

account for them suitably when required. Consequently,

only matrix A is assumed to be available. The rules

earlier stated need to be modified to suit the new

situation.

Step 0. Let K = 1

Step 1. Assume that a column vector corresponding to

column K of the Identity matrix is attached to

Step 2.

the right of the matrix.

The pivot elernent is the first element in rmv K.

Divide the I\th rmv by the pivot element and

store each element in the column to the left of

its original position. This column "shift" has

the effect of "pushing" out the element referred

to as the pivot elem.ent (to the left) and "bor­

rowing" an element from the Identity Matrix

-38-

Page 43: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l '1 -~

: .. !

.. )

..

.]

J ]

_]

]

l ]

l

400.4

(from the right). It is helpful to visualize

that the kinks in the dashed lines have been

straightened out by pulling the row K to the

left in Step 2 of the numerical example above

at each of the N stages.

Step 3. Add -A(I,l) times the Kth row to row I (where

I =} K), starting with the element in column 2 of

row I. Again, store each elerr.ent in the colurrm

to the left of its original position. Steps 2

and 3 together have the effect of advancing the

dashed lines, one column to the right.

Step 4. Increment K by 1.

Step 5. If K exceeds N, stop. Otherwise, return to

s·tep 1 .

To illustrate, consider the previous example again.

Step 0. K = 1

Step 1. 4.0 1.0 0.0 1.0

4.0 3.0 1.0 0.0

1.0 1.0 1.0 0.0

Note that the Kth column of the Identity matrix

is available by implication only and is not

stored in any vector or matrix.

-39-

Page 44: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l

1

]

]

]

]

]

]

.]

]

400.4 Step ') Pivot element has the value 4. 0. Divide row '- .

1 by 4. 0.

0.25 0.0 0.25

4.0 3.0 1.0 0.0

1.0 1.0 1.0 0.0

Step 3. Add -4.0 tines row 1 to rO\·T 2 1 -1.0 times r0\·1

1 to rO\·J 3 .

I 0, 25 0.0 0.25

2.0 1.0 -1.0

0.75 1.0 -0.25

Step 4. K = 1 + 1 = 2

Step 5. 2 t 3; Return to Step l.

Step l. 0.25 0.0 0.25 0.0

2.0 1.0 -1.0 1.0

0.75 1.0 -0.25 0.0

Step 2. Pivot element has the value 2 . 0 . Divide

row 2 by 2. 0.

0.25 0.0 0.25 0.0

0.5 -0.5 0.5

0.75 1.0 -0.25 0.0

Step 3. Add -0 . 2 5 times row 2 to rO\v 1, -0. 7 5 times

row 2 to rovT 3 .

-0.125 0.375

0.5 -'0.5

0.625 0.125

-40-

-0.125

0. 5·

-0.375

Page 45: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

1 400.4

] Step 4 . K = 2 + 1 = 3

1 Step 5. 3 :}- 3. Return to Step 1.

Step 1. -0.125 0.375 -0. '125 0.0

1 0.5 -0.5 0.5 0.0

1· 0.625 0.125 -0.375 1.0

Step 2. Pivot element has the value 0.625. Divide

.1 rmv 3 by 0. 6 25.

-0.125 0.375 -0.1251 0.0

"1 0.5 -0.5 0.5 0.0

l 0.2 -0.6 1.6

Step 3. Add -(-0.125) times row 3 to row 1, -0.5 times

l row 3 to rovl 2

0.4 -0.2 0. 2

l -0.6 0.8 -0.8

) I 0.2 -0.6 1.6

Step 4. K = 3 + 1 = 4

") .. · Step 5. 4 > 3. Stop .

l In the program section th~t follows, note especially

the manner in which the elements of the Kth column of

J the Identity matrix are assumed to be available. Further,

] note also the necessity of generating the elements of the

Nth column outside the DO-loops.

]

] -41-

]

]

Page 46: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

] NNl = N-1

:l DO 4000 K = l,N

T = 1.0/A(K,l)

1 DO 8000 J = l,NMl

8000 A(K,J) = A(K,J+l)*T

j A(K,N) = T

1 DO 9000 I = l,N

IF (I.EQ.K) GO TO 9000

j . BIG= -A(I,l)

DO 8888 J = l,NMl

:j "

8888 A(I,J) = A(I,J+l) + BIG*A(K,J)

'•j ·~

A(I,N) = BIG*T

9000 CONTINUE

'1 "'

4000 CONTINUE

I B. The Problem of Vanishing Pivot Element

An important tacit assumption in the above develop-

.1 ment is that the pivot element never has the value zero

~1 and hence,division by the value of that element is legal.

This is equivalent to the assumption that no submatrix of

<j A in the upper left is singular. (If matrix A is itself

singular, there is obviously no solution to the problem.)

] If the assumption does not hold, as in SUBROUTINE

J DETMT (A,DA,N), here also row interchanges need to be

performed to overcome the difficulty. If the Identity

J -42-

J ]

Page 47: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

1· ]

J ]

.. ] ..

]

J ]

]

]

.]

]

1

400.4

matrix is assumed to be available, the following is a

simple exa111ple for illustration of the procedure.

0.0 2.0 1.0 0.0

3.0 4.0

Pivot element has the value of 0.0.

Interchange rows as division by zero is i10t per-

mitted. Note tha~ the rows of the Identity matrix are

also to be interchanged.

!3.0

[o.o Step 1. K = 1

4. 0 f

2. 0 l 0. 0 1.0

1.0 0.0

Step 2. Pivot element has the value 3.0. Divide

Step 3 .

Step 4 .

Step 5.

Step 2.

row 1 by 3.0

Add

jl.O 1.33 I 10.0 2.0

-(0.0) times row

0.0 0.33

1.0 0.0

1 to rmv 2 ..

leaves the matrices unaffected.

K = 1 + 1 = 2

2 .} 2. Return to Step 2.

Pivot element has the value 2 . 0 .

row 2 by 2.0.

1.0 1.33 0.0 0.33

0.0 1.0 0.5 0.0

Step 3. Add -1.33 times row 2 to roH. 1.

1

1.0

0.0

0.0

1.0

-0.67 0.33

o.5 o~o

-43-

This

Divide

Page 48: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

I 1

J ., 4

J j

400.4

Step 4. K = 2 + l = 3

Step 5. 3 > 2. Stop.

Next, attempt the solution without the availability

of the Identity matrix.

Step 0. K = l

Step l. 0.0 2.0 1.0

3.0 4.0 0.0

Rows of A will be interchanged, but sine~ the Kth

column of the Identity matrix is available only by

implication, the elements here cannot be interchanged.

Hence

Step 2 •

Step 3 .

Step 4.

Step 5.

Step l.

r 3. o [o.o

4.0

2.0

Pivot element has

l by 3. 0.

l. 33 0. 331 I

0.0 2.0 l Add -(0.0) times

l. 33 0.33

2.0 0.0

K = l + l = 2

2 } 2. Return to

11.33 0.33

I l 2. 0 0.0

1.0

0.0

the value 3 . 0 .

0.0

row l to row 2.

Step l

0.0

1.0

-44-

Divide row

Page 49: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

]

l .

1 l

l

J

l

l ]

]

.]

J

J

Step 2. Pivot element has the value 2.0. Divide row

2 by 2.0.

1.33 0.33 0.0

0.0 0.5

Step 3. Add -1.33 times row 2 to row 1.

0.33 -0.67

0.0 0.5

Step 4. K = 2 + l = 3

Step 5. 3 > 2. Stop.

The answer here differs from the previous (correct)

answer in that the colunms have been interchanged. This

is a direct consequence of our failure to interchange

rows of the Identity matrix in the modified method. The

remedy is simple. Merely interchange the columns.

The numerical example above provides the necessary

background for the development of the generalized ap­

proach which follows.

C. Row Interchanges and Corrective I1odifications

Assume that the rows of matrix A are interchanged.

Rovl interchange is one of the elementary tran-sformations

and is equivalent to premultiplying a matrix by the cor­

responding elementary transformation matrix. Briefly,

TA = C where C is the resulting matrix after the inter­

change. Hence C-l = A-lT-l and c-lT = A-l.

-45-

Page 50: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

]

]

]

]

]

]

]

]

]

J

J

]

]

]

]

]

The product c- 1T implies that the same elementary

• . -1 • transformatlon T operates on C ~ but this tlme post-

multiplication by T is involved. The conclusion is that,

to get A-l fro~ C-l, the colu~~s of C-l have to be inter-

changed to match the interchange of rows of A.

Applying t1"1e principles to the 2 x 2 exarr,ple, '"'e see

that, in effect, given A, a matrix C was generated by

interchange of rows of A, and C-l was found. The answer

thus obtained needs, therefore, further modification

(interchange of columns of c- 1).

v.Ji th a 2 x 2 matrix, the number of interchanges is

limited to 1. Also, if the interchange is necessary, it

will be at stage K = 1. In the case of larger matrices,

the number may be as high as N-1 and the necessity may

arise at some or all stages from K = l to K = N-1.

In general, v.1e may assume that the original matrix

after the required number of row interchanges has been

modified during the process itself to a new ma·trix C

1 -1 and A- = C T T l1 H-1

T T 2 1

The last and first row interchanges are represented

by TM and T1

respectively. In the modification, however,

the first and last colunm interchanges are represented

-46-

Page 51: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

.,..]

.. '

J ].

J

.J

]

"1 ..J

J

J

J

J

J

400.4

by T and T1

respectively . Iv1

So, if a number of row interchanges was involved,

the corresponding column interchanges must be performed

in reverse order. Appendix 1 contains a more formal proof.

D. The Best Pivotal Element

In the discussion so far, row interchange was sug-

gested only if the pivotal element was identically zero.

The pivot element could be small in absolute value and

hence division by that element and later modifications

of other elements may lead to inaccuracies.

On the one hand, there is the need to check whether

the pivot element is zero. If so, on the other hand,

there is the need to search other rows (limited to rows

K through N of colunm K so as to preserve the action of

the previous modifications of the reduction process) for

a non-zero element.

Combining all of these, as in SUBROUTINE DE':L'HT (l-.,DA,

N), assume that a search will be made for the largest

absolute valued element in the column containing the

pivot element. Three possibilities arise as a result of

the search.

l. Every element in the column is zero. The matrix is

then singular and A-l does not exist. (Note that the sub-

program does not produce an error message in this in-

stance. A message will result from the system when the

-47-

Page 52: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

J

'-1 "

J

J

J

]

]

J

J ]

J

J

J

J

J ]

J

machine attempts later to handle infinity and the pro-

gram will be aborted.)

2. The pivot element itself is the largest in absolute

value and hence, no exchange is necessary.

3. An exchange is necessary.

Vector NEXCH is a bookkeeping vector which takes

into account items 2 and 3 above. The elements of this

-1 vector get defined during the reduction process as C

is generated and are used later to perform the correspon-

ding column exchanges (in reverse order) .

E. The Determinant of the Original Matrix A as a By-

Product

A comparison of the procedures involved 1n this sub-

program and SUBROUTINE DETMT (A,DA,N) shows that the re-

duction processes in the two cases have much in common.

In the latter case, the process was limited to reducing

the given matrix to an upper triangular matrix. In this

subprogram (see the reduction process assuming the exis-

tence of the Identity matrix), this process has been ex-

tended so that the given matrix is diagonalized. This

extension which merely includes more elementary transfor-

mations does not alter the value of the determinant. The

determinant is hence the product of the pivotal elements

(before their reduction to 1.0).

-48-

..

Page 53: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

]

]

]

l

l

l

l ]

]

l

J ]

J

J ]

J _]

400.4 F. ~he Special Case of a 1 x 1 Matrix

An inspection of the DO-loop parameters in the final

version of the subprogram indicates that, if N = 1, the

ra~ges of some DO-loops would be from 1 to zero. This

difficulty is avoided by branching out control early in

the subprogram.

2.6.3 Features

It has been shown that (even) in the case of a general

square matrix (unsymmetric) , the inversion process can be

carried out within the-space of the original matrix itself,

provided no submatrix in the upper left o£ the original

matrix is singular. To handle matrices of a general nature,

only an additional vector of N elements is required. Speed

is considerably enhanced as constants are not generated

during execution.

2.6.4 Limitations

Original matrix A is destroyed.

2.6.5 Additional Remarks

It is not essential that NEXCH be a vector of integer

elements in the calling program. The use of that vector

is local to the subprogram and the user needs only to be

aware that any such vector, if defined prior to the CALL

statement in the calling program, may be destroyed when

this subprogram is used.

-49-

Page 54: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

j

J

J _j

J j

J

J

J

.J

2.7 SUBROUTINE MOVE (A,B,M,N)

2.7.1 Function

The matrix B is defined to be the same as the given

matrix A. Both the matrices are of the same size :H rO\vs

by N columns.

2.7.2 Development of the Suborogram

The subprogram listed in Appendix 2 follows directly

from the relationship BI ,J = AI ,J· 'l'he matrices are

treated as single-subscripted arrays in the subprogram.

2.7.3 Features

In some cases, a matrix referenced in the CALL state-

ment of a calling program gets destroyed in the subpro-

gram when using the routines of this package.

Assume that the original matrix is needed later in

the calling program. In such situations, the use of

this subprogram, prior to a CALL to the routine where

the matrix gets destroyed, assures the availability of

the original matrix by a different name. The example

below illustrates this procedure.

CALL MOVE(A,B,N,N) CALL DETHT(A,DA,N)

The original matrix A is destroyed by the second

CALL statement. However, by virtue of the first CALL

statement, matrix B is the same as the original matrix A

and can be operated on as if it were matrix A itself.

-so-

Page 55: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

~7)

_j

j

j

J j

J

400.4

In the example, if the second CALL statement is CALL

DETNT(B,DA 1 N) 1 matrix B gets destroyed and the original

matrix A is available for further operations by its mvn

name.

2.8 SUBROUTINE MULT (A,B,C,L,M,N)

2.8.1 Function

The product of matrix A (size L rows by M columns)

and matrix B (size M rows by N columns) is made available

to the calling program as matrix C (size L rows by N

colunms) . C = AB

2.8.2 Development of the Subprogram

In algebraic terms, the elements of matrix Care

given by !-1

C = I: A I,J K=l I,K

and the following subprogram may, therefore, be written.

SUBaOUTINE MULT (A,B,C,L,M,N)

CO~WON/IYENGAR/ I,J,K 1 Y (11)

REAL A ( L , 111) , B (I•'l , N ) , C ( L , N )

DO 1000 I = l 1 L

DO 1000 J = l,N

C(I,J) = 0.0

GO 10 0 0 K = 1 I f>'l

1000 C(I,J) = C(I,J) + A(I,K)*B(K,J)

RETURN

END

-51-

Page 56: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

] It is worth noting here that for a specific set of

values of I and J, C(I,J) is completely defined only

] after the innermost loop is satisfied. Hence, instead

1 9f referring to C(I,J) which is a dotilile-subscripted

variable, it is advantageous to refer to a scalar quan-

] tity, say, SUM when this loop is being executed. This

modification saves time of execution.

To illustrate, assume two matrices each of size

] 100 x 100 are multiplied. The modified version listed

in Appendix 2 saves two million address computations.

] The saving in time in a trial run was approximately 6

] seconds (23.262 seconds vs. 17.148 seconds).

2.8.3 Limitations

J In general, each of the matrices A, B and C will dif-

J fer in size. Hence, no attempt is made in this sub-

program to store the product matrix C in either matrix A

or matrix B.

The size of matrix C will match the size of either

matrix A or matrix B or both, if matrix B or matrix A or

j both are square. The use of SUBROUTINE PMULT(A,B,K,L,X)

or SUBROUTINE POSTM(A,B,K,L,X) should be considered under

j these conditions.

In any case, when SUBROUTINE r-mLT(A,B,C,L,H,N) is

J used, the product matrix C should be distinct from both

j the matrices A and B, although matrices A and B may

·] -52-

J

Page 57: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

]

2.9

]

]

]

1

1

l ]

]

]

J

J

J

J ., I

themselves be identical.

SUBROUTINE OUTE (A,I,J,TITLE,TITEL) and ENTRY OUTF and

ENTRY OUTG

2.9.1 Function

Matrix A of size I rows by J columns is printed.

Printing begins on a new page. Rows and columns are

numbered. Labels (up to 20 characters) provided by the

user appear at the top of each page.

If J ~ 10, and at the same time, I< 25, the matrix

is printed on one page. If J > 10, the first 10 columns

of matrix A are printed until all the rows (25 or less

to a page) are exhausted. Then the second 10 columns

Cor less) of matrix A are printed until all the rows

(25 or less to a page) are exhausted. And so on.

The user has the choice of printing the elements in

E-, F- or G-FORMAT.

2.9.2 Development of the Subprogram

A. Matrix Partitioning

The limits of 10 columns to a page and 25· rmvs

(double-spaced) to a page have been chosen taking into

consideration the number of characters that can be

printed per line (135 excluding the carriage control

character in column 1), the number of lines (about 63)

-53-

Page 58: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

] per page, and ease of readability.

Since J colu~1s are to be printed, the nurr~er of ver-

tical partitions of the matrix is given by JHAX belmv.

The use of integer arithmetic (FORTPJill} should be noted

here. Jj\iAX = ( J + 9 } I 10

If 1 :5. J :5. 10, Jf.·IAX = 1

If 11 :::_ J < 20, Jt-lAX = 2, and so on.

In a similar way, t~1e number of horizontal partitions

] of the matrix is given by

IHl\X = (I + 24) /25

Schematically, the partitions are as in Figure 2.

j (I and J are assumed to be 58 and 45 respectively.

Hence, IMAX and Jt-iAX have the values 3 and 5 respectively.}

---~· J Columns ------

1,1 1,2 1,3 1,4 {. 1,5

I l~ows ·--i -

2,1 2,2 2,3 2,4 '!,' 2,5

j ---·

J 3,1 3,2 3,3 3,4 ?! I 3,5

Figure 2

j The required nunilier of pages for the printout is

. given by the product of JMAX and I.Lv1AX.

-54-

J j

Page 59: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

]

1

] )

]

]

]

]

.1

]

]

]

.l

J

J j

j

J

J

The choice is made to print the matrix in vertical

partitions. Hence, for the example in Figure 2, the sub­

matrix marked 1,1 will be printed on the first page. This

is followed by printing of submatrix marked 2,1 and then

by the one marked 3,1.

The process is next repeated for submatrices marked

1,2 and 2,2 and 3,2 in that order. And so on.

The outermost DO loop hence ranges . from 1 to Jiv1AX.

This is followed by the next DO loop whose range is 1 to

IMAX.

Consider next the items on a specific page. Let the

submatrix being printed on the page have indices IRm'iT

and JtOL.

The table below gives the first and the last row and

colunm ·numbers (of matrix A) printed on the page.

First row

Last row

First column

Last column

B. FORHAT Control

2 5 ( IROvV) - 2 4

25 (IRm'l) or I, whichever is less

10 (JCOL) - 9

10 (JCOL) or J, whichever is less

'l'he form of output (E- ,F- or G-FORHAT) is controlled

as follows. The FO&~T for printing elements of the

matrix is generated in an integer array IV. If the CALL

statement is CALL OUTE (A,I,J,TITLE,TITEL) 1 the character

-55-

Page 60: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

"]

]

J ]

J

.1

1

1

J

j

J

j

J

j

J

400.4

stored in IV (2) is E in a suitable part of that (com­

puter) word, and hence the output is in E-FORM1Vr. Simi­

larly, CALL OUTF( ... ) and CALL OUTG( ... ) produce output

in F- and G-FORMAT respectively.

The X preceding Fl2.5 in IV (2) is deliberately built

in to ensure at least one blank space between two nuwbers

in a row, when printing in F-FOR1'1AT. This limits the

number of characters (digits plus the negative sign, if

any) to the left of the decimal point to 6. If an ele­

ment has 7 or more characters to the left of the decimal

point, an asterisk will be printed by the machine

(CDC 6400) at the beginning of the field, warning the

user that the most significant digit/s and/or the nega­

tive sign, if any, are not printed. Briefly, the number

is too "large" for a suitable printout under this FORNAT

control. On the other hand, if the number is too small,

only zeroes may appear on the printout. Under these con­

ditions, as well as under conditions where the magnitudes

of the elements being output are unknown or unpredictable,

the E-FORMAT should be preferred.

The E-FO~ffiT output is not as easily readable as the

F-FORMAT output but this is a minor inconvenience, parti­

cularly after experience is gained in reading the nillliDers.

(~hen G-FORMAT is specified, five significant digits

appear on output in F-FORJ.~ffiT if the number lies in the

-56-

Page 61: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J j

]

1-] -_

]

j

j

]

j

l ]

j

j

j

j

j

J J

400.4

range 100000.0 > absolute value ;:::: 0.1. Otherwise, the

number is output in E-FORl·1AT. That is, the machine makes

the choice between F-FOP11AT and E-FORHAT, depending on

the magnitude of the nu!T'ber to be output. The decimal

points in G-FORMi\.T output may not line up vertically and~

in general, the output will be a mixture of E- and F­

FO&~ffiT outputs. Some elegance is thereby lost. On the

other hand, once G-FOID1AT output is specified, concern

need not be wasted on losing the most significant digits

(5 digits in this subprogram).

C. Labels

The user may label the matrix being output by using

appropriate 11 Values 11 for the arguments TITLE and TITEL.

These 11 Values 11 are Hollerith character strings up to a

maximum of 10 each.

The labels will ~ppear at the top of each page. Further,

these labels are followed by the word CONTINUED in paren­

theses on the second and succeeding pages of output to

indicate that parts of the matrix have already been output

in previous pages.

The size of the matrix also is indicated by a printout

directly after labelling. If no labels are to be used,

TITLE and TITEL must be matched with lH~ and lH~ respec­

tively (~ denotes blank). Examples on the use of labels

-57-

Page 62: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

I J

400.4

J are given in the User's Guide (Chapter 4).

j 2.9.3. Limitations

A matrix with a large number of columns and only a few

j rows (say less than 10), when output using this subprogram,

will use several sheets of paper. Consider, for example,

a matrix 8 rows by 25 columns. The output, in this case,

j is on 3 sheets. If, however, the transpose of the matrix

is printed, the output is on one sheet. Apart from

j economy of paper, a further advantage of the latter pro-

j cedure is that an overall view of the matrix is available

without having to turn pages.

j The user should weigh these advantages against the in-

convenience of having to transpose the matrix and reading

j the transposed matrix.

1

j

j

j

j

.1 -58-

1

Page 63: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

1

1

1

j

j

j

j

j

J

j

j

J

2.10 SUBROUTINE PMULT(A,B,K,L,X)

2.10.1 Function

The square ma,trix B of size L rows by L columns is pre-

multiplied by a rectangular matrix A of size K rows by L

columns and the product is returned to the calling pro-

gram in the rectangular matrix A. A = AB

2.10.2. Development of the Subprogram

In SUBROUTINE f·1UL'l' (A,B,C,L,N,N) 1 it was remarked that

the three matrices A, B, and C are of different sizes

when dealing with general rectangular matrices and hence,

matrix C could not be stored in either matrix A or matrix

B. If, however, matrix B is square, it follows from

[A] • [B] = [C] K X L L X L K X L

that the product matrix C is of the saw~ size as the rec-

tangular matrix A, which premultiplies the square matrix

B. Advantage is taken of this feature to save memory

space by storing matrix C in matrix A.

Schematically, the order in which the elements of the

product matrix are generated (row by row) is shown in

Figure 3.

A D Product r ;;-

Figure 3

-59-

Page 64: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4 Consider row 1 of matrix A. This row is used in con-

junction with each column of matrix B to generate elements

] in row 1 of the product matrix. After this is done, row

1 of matrix A is never referenced again. It is for this

reason that row 1 of the product matrix may be stored in

row 1 of matrix A. (The argument is valid for -all the rows

in turn.)

However, throughout the process of generating the

elements in row 1 of the product matrix, the elements 1n

row 1 of the original matrix A must be available. Hence

the necessity of a vector X of size L elements for inter-

mediate storage of the generated product elements.

The procedure involves, therefore, the following steps

j '

for all I from 1 to K.

1. Generate elements in row I of the product matrix

l and store these in vector X.

2. Transfer the contents of vector X to row I of

matrix A.

2.10.3 Features

:1 Nemory requirements are less when this subprogram is

used. A vector X of L elements will suffice to perform

j the operations, whereas, previously a matrix of size K

rmvs by L columns was required (SUBROUTINE MULT

J (A,B,C,K,L,L)).

j See also Section 2~11.5.

-60-

j

J

Page 65: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

j_

j-

j

j

j

~.-)

.J

j

J

J

J J

400.4 2.10.4 Limitations

Matrix B must be square.

The advantage of saving of memory space is partly off-

set by a loss in speed of execution, as additional opera-

tions (transfer of vector X to a row of matrix A for each

I, I = 1 to K) are necessary.

Original matrix A is destroyed.

2.10.5 Additional Remarks

Matrix A may be rectangular or square.

If matrix A is square, it should differ from matrix B

at least by name. 'l'hat is, the product of a square matrix

and itself (say, matrix A times matrix A) cannot be ob-

tained with the use of this subprogram. SUBROUTINE I·lULT

(A,A,PROD,K,K,K) of this package is to be used to obtain

such a product in matrix PROD which is distinct from

matrix A.

-61-

Page 66: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

"j. ,.

~ i . 1

'j

~·1 .. ..

'1 ] •.··· ., '

~~··

.. J ., .

.. ;..

t)J~

400.4

2.11 SUBROUTINE POSTM(A,B,K,L,X)

2 .11. 1 Function

The square matrix A of size K rmvs by K columns is

P?Stmultiplied by the rectangular matrix B of size K rows

by L colu~1s and the product is returned to the calling

program in the rectangular matrix B. B = AB

2.11.2 Development of the Subprogram

The logic here is essentially the same as in SUBROUTINE

PNULT(A,B,K,L,X). The elements of the product matrix are

generated column by colunm.

is represented by Figure 4.

------'~

_____ ,..,.. -

A B

Schematically, this process

r =~

Product

Figure 4

The process involves the follmving steps for all J

from 1 to L.

1. Generate elements in column J of the product matrix

and store these in vector X which is of size K

elements.

2. Transfer the contents of vector X to column J of

matrix B.

-62-

Page 67: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

]

]

1-]-_

J

J

J

J

J

J

J

J

J

J

J

J

J

]

400.4

2 .11. 3 Features

Hemory requirements are less when this subprogram is

used. A vector X of K elements will suffice to perform

the operations, whereas, previously a matrix of size K

rows by L columns v1as required. (SUBROUTINE HULT

(A,B,C,K,K,L).)

2.11.4 Limitations

Matrix A must be square.

Original matrix B is destroyed.

The advantage of saving of memory space is partly off­

set by a loss in speed of execution, as additional opera­

tions (transfer of vector X to a column of matrix B for

each J, J = 1 to L) are necessary.

2.11.5 Additional Remarks

Matrix B may be rectangular or square.

If matrix B is square, it should differ from matrix A

at least by name. That is, the product of a square matrix

and itself (say, matrix B times matrix B) cannot be ob­

tained with the use of this subprogram. SUBROUTINE MULT

(B,B,PROD,K,K,K) of this package is to be used· to obtain

such a product in matrix PROD which is distinct from

matrix B.

In the following discussion concerning the three multi­

plication routines described so far, assume that matrices

-6 3-

Page 68: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

1 ]

j

J j

J

J

,J

j

j

t

J

1 j

J _j

J

400.4

A and B are square and differ at least by name. For com-

patibility in matrix multiplication, they are necessarily

of the same size, say K rmvs by K columns.

The user, in this case, has a choice of subprograms as

indicated in the table below, the choice being governed

by the criterion of saving one, none, or both the matrices.

To Save

Matrix A Matrix B Neither matrix Both matrices

Use CALL Statement

CALL POSTH(A,B,K,K,X) CALL PMULT(A,B,K,K,X) Either of the above tv;o CALL HULT(A,B,C,K,K,K)

-64-

Page 69: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

~ J.

J

j

.l

j

J

J

J

400.4

2.12 SUBROUTINE RDCBC(A,M,N) SUBROUTINE riDCOLG(A,M,N) SUBROUTINE RDRBR(A,M,N) SUBROUTINE RDROWG(A,M,N)

2.12.1 Function·

Values are read in from data cards for the elements of

matrix A which is of size M rows by N columns.

2.12.2 Development of the Subprogram

A." The FORMAT Declaration

For convenience in punching values, a field width of

10 columns for each piece of data is prescribed. Thus, 8

values can be punched per card. In brief, the FORMAT

used is (8Fl0.0).

This choice of FOR..."-iAT requires that the deci!llal point

be punched in the field unless it is to be assumed (by

the machine) to be at the end of the field.

On the CDC6400 it is permissible to punch data in E-

FORMAT also under the same FORHAT control. Care must,

however, be exercised to see that the exponent is placed

at the end of a field.

B. Order in Assigning Values

The order in which the values are assigned to the

elements depends on the user's choice of one of the four

routines. The details are given in the User's Guide

(Chapter 4).

-65-

Page 70: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

2.12.3 Limitations

The decimal point must be punched in the field, unless

it is to be assumed to be at the end of the field. The

maximum number of characters (digits plus the negative

sign, if any) in any data piece is limited to 10 if the

decimal point is not punched and to 9, otherwi-se.

J 2.12.4 Additional Remarks

If an element is to be assigned the value zero, the

corresponding data field may, at user's option, be left

blank. In this case, the machine actually assigns the

value -0.0 to the element.

SUBROUTINE RDCOLG(A,N,N) is the fastest of the four

routines since the transfer of data occurs, with its use,

J in the natural order of storage of array elements (in the

1 machine) without any interruptions. It is also the most

economical one in terms of field length requirements (see

J Section 3.4).

J

J

-66-

1

Page 71: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

]

]

J

J

]

]

J

]

J ]

J

J

J

J

J

J

J

J

400.4

2.13 SUBROUTINE SC1'1UL(A,H,N,X)

2.13.1 Function

Elements of the given matrix A of size M rows by N

columns are modified so that the fr'esh elements are X

times the original ones.

2.13.2 Development of the Subprogram

Each element of th3original matrix is multiplied by

the scalar X and the result stored back in the element

itself. The matrix is treated as a single-subscripted

array in the subprogram.

2.13.3 Limitations

The original matrix A is destroyed.

-67-

Page 72: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

] 2.14 SUBROUTINE SINV(A,DA,N)

2'.14. 1 Function

] The matrix A, which is symmetric (size N rows by N

J columns) and positive-definite, is inverted and the in-

verse returned to the calling program in matrix A itself.

] The determinant of the original matrix A is computed and

returned in DA.

] 2.14.2 Development of the Subprogram

A. Introduction

] In civil engineering applications, the matrices that

need to be inverted are, in general, symmetric or can be

J rendered symmetric; e.g., stiffness matrix, flexibility

matrix. These matrices are also positive-definite.

If the features of symrnetry and posi 'ci ve-de finite

J nature are utilized in a program, the inversion process

can be speeded up, the comparison being with SUBROUTINE

l j MINV(A,N,DET,NEXCH) which can invert matrices that may be

symmetric or unsymmetric.

J B. Procedure

J The symmetric matrix A can be expressed in the form

A = A.A. T where A. is a lower triangular matrix.

J 1

_..!

J -68-

J ]

Page 73: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

]

]

J.

.l

.J

J

]

]

j

J

]

]

]

J

J

J

J

J

The elements of A are given by {i\ppendix 1)

A I IJ

AI ,J

From A

J-1 = (AJIJ - 2::

K=l

2 ~ A ) 2

JIK

J-1 1

= CZ\I IJ - 2:: A I I K "A J ,J K=l

= 0

AA T -1 ( A T) -1

= A = I

.AJIK) for

for

( A -1) = (A-l)T(

I> J

I< J

A -1)

The inverse of a lower-triangular matrix is also lower­

triangular. If ~ = /, -l, the elements of ~ are

(Appendix 1)

~I ,J = 0 for I< J

~I I I 1 =

TI,I I-1

~I ,J = - 1 2:: A I ,K AI

1I K=J ~ K,J for I> J

Briefly, then, the procedure involves 1) factorization

of A into A and AT 1 2) obtaining A -l and 3) forming the

-1 T -1 -1 product (A ) ( A ) to give A .

The algorithm below shows that these operations can be

accomplished within the space of the original·matrix it-

self.

By symmetry, matrix A can be considered fully defined

if all the elements on and above the diagonal are known.

The space below the diagonal is hence available to store

-69-

. . ' : .... ·-· .... _···.

Page 74: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

]

)

]

]

]

]

]

J

J

]

]

]

]

J

J

]

J

elements of matrix A. . Since A. is a lower triangular

matrix, all its elements above the diagonal have the

value 0.0 and these elements will therefore neither be

generated or stored.

Regarding the diagonal elements of matrix A. , it is

fortunate that, once A.I,I is generated, AI,I is no longer

required and hence, it is possible to store A.I I in place . I

of AI I for all I. I

In fact, it is advantageous to store the reciprocal of

A.I,I in place of AI,I' since the diagonal elements will

then be elements of matrix (t..-1) or of matrix (A.-l)T.

Refer to the schematic representation of this process in

Figure 5.

The order of generating elements of matrix A. is as

follows. A. ~ First, l,l is computed as A l,l" Next, the

other elements of column 1 are computed from

1 = A. (A1 I) us.:j_ng the symrnetry of matrix A 1,1 I

(Al,I = A1 , 1 ). For all J in the range (N-1).2 J> 2, the

diagonal element is computed first, and the other elements

of column J next. When J = N, only the diagonal element

needs to be computed. -1

The next step is to generate matrix A. . The diagonal

elements of matrix (A. -l) T, _which are the same as those of

matrix A.- 1 , are already available. A.-l is a lower trian-

gular matrix. Since matrix A. occupies the lower half of

the matrix space at this stage and matrix A is no longer

-70-

Page 75: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400~4

J

]

]

]

J

J

]

]

J

]

J

J

J

]

required; matrix (A-l)T instead of matrix A-l is stored

in the upper half of the matrix space. Refer again to

the schematic representation. If now ~ = ( A-l) T, the

elements of matrix ~' which is upper-triangular, are

~ J I I = 0

1 ~I I I = AI I

I

1 ~ = -

J ,I AI I I .

for J >I

I-1

(K~J A I I K ~ J I K) for I> J

T The off-diagonal elements of matrix (A-l) are generated

in the subprogram, column by column.

The product (A-l)T(A-l) is next required. The result-

ing matrix is A- 1 , and the matrix A is no longer required.

Matrix A-l can hence be stored in the lower half of the

matrix space.

For clarity, assume X = (A-l)T, y = (A-1) = xT

and Z = A-l = (A-l)T(A~l) = XY .

Then ~ rJ

zi,J = ~ XI KYK J = ~ XI KXJ K since Y = K=l , I K=l I ,

Expansion of z I, J yields (for .I .2: J)

+ ... + X X I,I J,I

X x· + ... +X X . I,I+l J,I+l I,~ J,~

-71-

+

Page 76: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

]

]

]

]

]

]

]

.J

J

J

J

]

]

J

J

J

J

J

For L>H 1 XL1H is zero, since X is an upper-triangular

matrix. Hence 1 for I> J 1 .

N

= L: XI KXJ K K=I I I

Assume that the elements Z (elements of matrix A-1

) I,J

are generated rov; by rmv. The index I therefore varies

from 1 to N, while index J varies from 1 to I for each I.

A study of the following three expressions shows that, in

this scheme, once zi,J is generated, XJ,I is no longer

required.

ZI J = XI X + X X + I ,I J,I I,I+l J,I+l

Hence, xJ,I may be overwritten by the generated value

of zi,J each time. The result is matrix A- 1 .

·Elements

of A

Elements T

of (A. - 1)

Figure 5·

-72-

Elements T

of (A. - 1)

-1 A

Elements

Page 77: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

) 400.4

]

]

]-

] ·_

]

]

J

]

J

]

J

]

J

J

J

J

J ]

C. Built-in Subprogram

The computations require summations of the form IFIN

L: AI, KAJ, K on four different occasions. K=INIT

It is well-

known that subprograms are used in such situations to save

coding and reduce the number of machine instructions.

Since, however, such a subprogram may not have the same

degree of usefulness in other programs or subprograms, a

compromise is struck by incorporating this feature in the

subprogram itself in an indirect manner.

This specific area of calculations in ·the subprogram

is referenced whenever the required summations are to be

computed, through the use of unconditional GO TO state-

ments (analagous to CALL statements). 'l'he RETURN state-

ment of a regular subprogram is simulated by an assigned

GO TO statement, of which the control variable is INDEX.

This variable is assigned the suitable statement label

prior to each occasion when the area of the "built-in"

subprogram is referenced. The four variables I, J, INIT,

IFIN also need definition. The DO-loop indices themselves

are generally used to account for this feature.

D. The Determinant of the Original Matrix as a By-Product

Since A= ~~T, det(A) = det(~).det(~T). Noting that

a matrix and its transpose have the same determinant,

det(A) = det(~).det(~). Since~ is a lower-triangular

-73-

Page 78: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

]

]

]

~j

]

J

]

]

J ,-]

] .

J

j

J

J

]

J

J

matrix, its determinant is merely the product of its dia-

gonal elements. The computation of det(A) is thus inci-

dental to the inversion process.

E. The Case of a 1 x 1 Matrix

If N = 1, many DO-loops in the routine would have their

ranges such as 2 to 1. The difficulty is avo{ded by test-

ing whether N equals 1 early in the routine and if so,

calculating det(A) and A-l directly.

2.14.3 Features

Although the inverse of a sy~~etric matrix is symmetric,

it is conceivable that a symmetric matrix inverted by the

use of SUBROUTINE MINV(A,N,DET,NEXCH) does not result in

a perfectly sy1nrnetric matrix due to machine round-off

errors.

This subprogram, however, utilizes the property of sym-

metry of matrix A and hence, guarantees the symmetric

nature of its inverse.

The algorithm of this subprogram utilizes only the

elements on and above the diagonal of the original matrix

A. Hence , only these need be defined when using this

subprogram. The inverse \vill be fully defined in any case.

-74-

Page 79: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

2.14.4 Limitations

Matrix A must be symmetric and also positive-definite.

It is destroyed.in the subprogram. The necessity of

matrix A being positive-definite requires some elabora­

tion. If det( A) = x , det(A) = x 2 • If det(A) and hence

x 2 are negative, xis imaginary. Since det(A)- = x is the

product of the diagonal elements of matrix A, this imp­

lies that the number of imaginary diagonal elements of

matrix A is odd.

If det(A) is positive, but a submatrix of A has a

negative determinant, there will be an even number of

imaginary diagonal elements in matrix A .

If det(A) is zero, matrix A is singular and its

inverse has no definition.

All of which leads to the conclusion that, if matrix A

is positive-definite, there will be no need to deal with

imaginary numbers. This restriction has, therefore, been

imposed in developing this subprogram and, in view of the

introductory remarks, is a justifiable one.

However, if matrix A is not positive-definite (and non­

singular), its inverse does exist and the additional prob-

lem is that of handling imaginary numbers. It is possible

to modify this subprogram without actually using complex

number routines. This has been done .in another version

of this subprogram. An even more general subprogram

-75-

Page 80: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

J

J

J

]

]

J

J

]

J

J

J

J ]

J

J

J

J

l

400.4

employing pivoting during factorization of matrix A has

also been attempted. Hmvever, these are obviously longer

and slower in execution. They are not included in this

package.

2.14.5 Additional Remarks

In solving civil engineering problems, where the inver­

sion of either the flexibility matrix or the stiffness

matrix is involved, it is recommended that this subprogram

be used in preference to SUBROUTinE MINV(A,N,DET,NEXCH),

at least during the development stage of a program.

For, the use of this subprogram will prevent full exe­

cution if the matrix is not positive-definite. Logical

errors (or punching errors) in the generation of the

matrix are thereby indicated.

It is possible to rewrite this subprogram using only

about half the matrix space (upper or lower triangle plus

the diagonal). In such a case, it is suspected that the

maximum use of the built-in subprogram may not be feasible.

Further, a partial definition of the inverse is of

questionable benefit.

-76-

Page 81: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

I

1

J: ]_

] ..

]

]

]

]

]

]

]

]

]

]

]

]

J

]

400.4

2.15 SUBROUTINE SOLVE(A,B,N,L,DET)

2.15.1 Function

,

A system of linear simultaneous equations is solved.

2.15.2 Development of the Subprogram

A. Procedure

The system solved is AX = B. The dimensions of the

matrices are as under.

r•latrix

Coefficient Matrix A

Right-Hand Side B

Size

N rows by N columns

N rows by L col unms

Only tie spaces of matrices A and B are used and the

solution matrix X is returned in matrix B.

Matrix A is reduced to an upper-triangular matrix in

essentially the same manner as in SUBROUTINE DET:t•IT (A, DA, N) .

The only major difference is that, instead of column ex­

changes, row exchanges are made, if necessary, in this

subprogram. This variation is required in order to pre-

serve the correct order of the elements in the columns of

the solution matrix X.

The reduction process is equivalent to forming suitable

linear combinations of the original set of equations.

Representing these operations as a set of elementary row

transformations given by T, we have, TAX= 'rB. Hence,

matrix B also needs modification in the same manner.

-77-

Page 82: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

]

]

]

]

]

]

1

]

j

J

l ]

1

J

j

j

J

At the conclusion of the reduction process,

simultaneous

Al,l Al,2

A2,2

(Zeroes)

equations have the form

Al,N ·

A2,N

A A • I,I I,N

A A N-l,N-1 N-l,N

X ••• N-l,K

B_ .L,K

B ••• N-l,K

BN, K ' ''

the

Starting with the last rmv and assuming that a typical

column K of matrix X is being generated,

A X = B . Hence X = B /A N,N N,K N,K N,K N,K N,N

AN-l,N-lXN-l,K + AN-l,NXN,K = BN-l,K

-78-

Page 83: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

1

1

J ·J· ' .

J ]

J ]

J

J

J

J

J

For 1 S. I ~ N-1,

Hence, N

X = (B - L: A X ) I A I,K I,K J=I+l I,J J,K I,I

It is interesting to note the order in which the

elements of a column of the solution matrix X are

generated. The last element is generated first and the

first generated last. The process is hence generally

referred to as back-substitution.

Since BI,K is not required after XI,K is generated, it

is possible to store matrix X in matrix B.

B. The Determinant of the Coefficient Matrix as a

By-Product

The generation of this quantity is incidental to the

reduction process. Since the original matrix A has been

(upper) triangulated, the determinant is given by the·

product of the diagonal elements of the reduced matrix A.

c. The Special Case of N = 1

In this case, some DO-loops would have the range 1 to

0. The difficulty is avoided by branching out early in the

subprogram to make the evident direct calculations to get

final results.

-79-

Page 84: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l ~ , at

l

1 tJ

"J· .. .;.:

J

1 --J

400.4

2.15.3 Limitations

The original matrices A and B are destroyed.

2.16 SUBROUTINE SQTR(A,N)

2.16.1 Function

The transpose of the square matrix A of size N rows by

N columns is returned to the calling program in matrix A

itself.

2.16.2 Development of the Subprogram

A general rectangular matrix A of size M rows by N col-

umns and its transpose, matrix B of size N rows by H

columns differ in dimensions. If, however, matrix A is

square, its transpose also has the same dimensions. It

is, therefore, possible to transpose a square matrix in

its own space.

If N = 1, the matrix and its transpose are identical

and control is merely returned to the calling program in

this case.

The transpose operation does not affect the values of

the diagonal elements. These are, therefore, never re-

ferenced in the subprogram.

-80-

Page 85: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

]

1

]_

] --

]

]

]

J

J

J

J

J

J

J

J

J

J ]

1

f, . ~.-l K Q. " K\. r~----- L+ INCR

N

~~~~~' :,~ t-~---SG-­

\\_ \ -

Figure 6.

The matrix is treated as a single-subscripted array.

In Figure 6, consider the element in row K of column 1.

Proceeding parallel to the main diagonal from this element,

the subsequent elements (of the matrix when treated as a

single-subscripted array) have subscripts in increraents

of N+l and the last element has the subscript N2-N*(K-l).

The elements of the lower triangle can thus be referenced

using two DO-loops, one with index K for elements in

column 1, and the other with index L (for a specific K)

for elements parallel to the main diagonal.

For a typical element with subscript L in the lower

triangle, the matching element in the upper triangle has

the subscript L+INCR, where INCR = (K-l)*(N-1). These

elements are exchanged.

2.16.3 Features

The matrix is transposed in its own space.

-81-

Page 86: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

1

]

]

i]• !•' I

I I

]

]

]

]

]

]

]

J ·~ j

J

J

400.4

2.16.4 Limitations

The matrix must be square. The original matrix is

destroyed.

2.17 SUBROUTINE SUB(A,B,C,M,N)

2.17.1 Function

Matrix B is subtracted from matrix A and the result

returned to the calling program in matrix C. C = A-B.

Each matrix is of size H rows by N columns.

2.17.2 Development of the Subprogram

In algebraic terms, ci,J = AI,J-BI,J" This subprogram

is hence the same as SUBROUTINE ADD(A,B,C,~1,N), except for

the sign. The matrices are treated as single-stiliscripted

arrays in the subprogram.

2.17.3 Additional Remarks

The resultant matrix C can be stored in either of the

original matrices (say B). In this case, the original

matrix (matrix B) will be destroyed.

-82-

Page 87: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

]

']

1 -

]

J

]

J

]

]

]

]

]

J

J

J

2.18 SUBROUTINE TrlULT(A,B,C,L,rvl,N)

2.18.1 Function

The transpose of matrix A (A is of size L rows by M

columns) is post-multiplied by matrix B (size L ro':ls by

N colurrms) to give matrix C (size M ro1:1s by N columns).

2.18.2 Development of the Subprogram

In civil engineering applications, products of the

type ATB are required in computations quite often. Using

two of the subprograms in this package, the product may

be obtained as follows.

CALL TRANS(A,TEMP,L,M)

CALL MULT(TEMP,B,C,M,L,N)

Such an approach requires a temporary matrix TEMP of size

N rov1s by L colurrms. The transpose operation, as \vell as

the storage required for TEMP, may be sa~ed by a slight

modification of the multiplication routine.

Assume that AT= TEMP and [TEMP]· [B] =C. An element

of C is then defined by

L

CI J = ~ TEMP • BK,J I K=l I,K

= by virtue of AT = TEMP.

This formulation shows that matrix TEMP does not need

either generation or storage.

-83-

Page 88: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

,] I

]

]

J IJ J .1

400.4

2.18.3 Limitations

The product matrix C should be distinct from matrices

A and B. However, matrices A and B may be identical.

2.19 SUBROUTINE TRANS(A,B,H,N)

2.19.1 Function

The transpose of matrix A (size N rm·1s by N columns)

is made available to the calling program as matrix B

(size N rows by M columns).

2.19.2 Development of the Subprogram

The subprogram utilizes the property BJ,I = AI,J"

2.19.3 Limitations

If matrix A is square, its transpose (matrix B) is also

square. However, if they do not differ by name, the re-

sulting matrix will· always be symmetric. Hence, the

matrices should be distinct from each other in every case.

2.19.4 Additional Remarks

SUBROUTINE SQTR(A,N) is more efficient than this sub-

program in terms of memory space if a square matrix is to

be transposed and the original matrix may be destroyed.

-84-

Page 89: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J ]

J ] .

] -.

]

J

J

J

J

J

J

]

J J

J

]

]

l

400.4

2.20 SUBROUTINE XABATC(A,B,C,L,M,X)

SUBROUTINE XABTA (A,B,L,N,X)

SUBROUTINE XABTC (A,B,C,L,M,N)

SUBROUTINE XATBAC(A,B,C,L,M,X)

SUBROUTINE XATBB (A,B,L,N,X)

2.20.1 Function

Products of matrices i) C = ABAT, ii) A= ABT,

iii) C = ABT, iv) C = ATBA and v) B = ATB are obtained.

2.20.2 Development of the Subprograms

The concepts used in the earlier multiplication rou-

tines from the bases for the development of this set also.

The dimensions of the matrices are as noted in the User's

Guide (Chapter 4) for the several routines.

2.20.3 Additional Remarks

i) The multiplication routines of this package [barring

SUBROUTHJE SCIYIUL (A,M,N ,X)] may be classified into three

groups as under:

Grou2 1

HULT (C =

THULT (C = XABTC (C =

Group

AB) Pl:·1ULT POSTf-1

ATB) XATBB ABT) XABTA

Group. 3

XABATC (C = ABAT) XATBAC (C = ATBA)

-85-

(A (B (B (A

2

= AB) = AB) = ATB) = ABT)

Page 90: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J: '·

-..,~

.. .J

-.,] . . ~~ ,,

J

j

1

J

J

J

J

400.4

a. Grouos 1 and 2 have the following features:

Product Ivlatrix

Dimen­sions

Matrix Dest­royed

Vector X

Speed of Exe­cution

Hemory Require­ment (Arrays}

Group 1

Storage is in a matrix C which is distinct from both the original matri­ces A and B in every case (that is, even if one or both the original matrices match the pro­duct matrix in size) .

All the matrices are as­sumed to be rectangular

(some or all of them may, however, be square).

None

Vector X is not required.

Faster

More

Group 2

Storage is in one of the ma~rices A or B, as indi­cated in the above nota­tions.

Matrix A must be square, if the product is stored in matrix B, and vice ver­sa (both the matrices may, however, be square).

The original matrix that bears the name of the pro­duct matrix finally (or, in other words, the matrix that is not assumed to be square) is destroyed.

Vector X is of size NS elements if the square matrix is of size NS rows by NS columns.

Slower, because of the ad­ditional operation of re­placement of a column or a row by vector X.

Less, since vector X will suffice instead of a matrix.

b. Group 3 has the following features.

Hatrix B must be square as well as symmetric. A vector X

of size NS elements, if matrix B is of size NS rows by NS

columns, is required. £-latrix A may be rectangular or square.

The product matrix C is distinct from both the matrices A

-86-

Page 91: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

J and B (even if matrix A is square). Matrix C is square as

well as symmetric. The original matrices A and B are not

J destroyed in the subprograms.

] ii) Other Products. Products as indicated on the left Of

J the following table may be obtained by the set of CALL

statements on the right, provided both the matrices A and

] B are square (the original matrix B need not be symmetric

1n any of these cases). All the matrices are assumed to

] be of size N rows by N columns. Vector X is of size N

elements. ]

Product CALL Statements

] A = ATB CALL s QTR ("-I i'J) CALL Pf-1ULT (A I BIN IN I X)

a.

] B = ABT CALL SQTR(B,N)

CALL POSTM(A,B,N,N,X) b.

l A = ATBA CALL XATBB(A,B,N,N,X)

CALL POSTM(B,A,N,N,X) c.

d. B = ATBA CALL XATBB(A,B,N,N,X)

] CALL H1ULT(B,A,N,N,X)

e. A = ABAT CALL XABTA(B,A,N,N,X)

] f.

CALL PMULT(A,B,N,N,X)

B = ABAT CALL POSTM(A,B,N,N,X)

] CALL XABTA(B,A,N,N,X)

In items c and e above, the original matrix B is des-

] troyed, even though the final product is formed in matrix

] A. The original matrix A is not destroyed when the final

product is in matrix B.

] -87-

]

]

Page 92: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

3. GENERAL HOTES

3.1 COMMON Block Labelled IYENGAR

~ A. Purpose

In normal usage, a COlvJ.HON block establishes the required '] ·.

correspondence amongst the variables in the routines sharing

the block. Values of the variables are thus tran.smi tted

from one routine to another.

The purpose of the block in this package is totally dif-

;] ferent. It merely serves as a means to economize on the

memory space requirements for the temporary variables used

in the several subprograms.

SUBROUTINE OUTE(A,I,J,TITLE,TI'rEL) with ENTRY OUTF and

ENTRY OUTG uses 14 temporary variables, and this is the maxi-

mum number required in any routine [1vi th the exception of

SUBROUTINE EV (A, S, N) 'ivhich 'dill be treated as a special case

later in this discussion]. Consider, next, SUBROUTINE SINV

(A,DA,N) which requires 9 temporary variables. Together,

these two routines would need 23 locations in memory for

these variables. .

Assume, now, the existence of a COH!"l0N block 14 words long,

the length corresponding to the maximum number of temporary

variables in any routine. Let each set of temporary vari-

ables in the two routines belong to this block. Then, 14

locations will suffice for the variables, whereas previously

23 were required. The advantage is even more pronounced

] -88-

J

Page 93: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

""]'-' .,

+l ~

].

~-1·· -'\.. .

y]' ...

]

J

J _j

J

400.4

if the principle is extended by specifying that the temporary

variables of each routine in the entire package belong to the

same COHHON block. The same 14 locations still suffice for

all the temporary variables, as against 131 which would have

been required without the use of the COHNON block. (To main-

tain the length of the block at 14 in each subprogram, a

filler array Y of variable size is used wherever necessary.)

Regarding the values associated with the variables, it is

inuuaterial whether these variables belong to the CO.HHON

block or not. This is because of the nature of the variables

themselves. They get defined in a subprogram before actual

use in the subprogram. The values they finally attain, at

the tirr.e of exit from the ·subprogram, are inconsequential to

any other subprogram since they get redefined before use in

that subprogram.

SUBROUTINE EV(A,S,N) actually uses more than 18 temporary

variables by name. The number is reduced to 18 through the

use of an EQUIVALENCE declaration. Of these, 14 are inc-

luded in the COJ>lHON block. The other four variables FN, nm,

THRI and THRF are not. Recall that ·this subprogram has an

ENTRY IEV staternent for improvement of eigenvalues and eigen-

vectors. Assume that SUBaOUTINE EV(A,S,N) has. been CALL-ed

in the calling program. Then, the four variables listed

have some values in the subprogram at the time of exit from

the subprogram. These values need to be preserved for a sub-

-89-

Page 94: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l

.l

J

J ]

400.4

sequent improvement procedure, if any. The calling program

may use the improvement procedure immediately (that is,

before CALL-ing other subprograms). There is no special

prob~em if it does. If not, assume that other subprograms

in this package will be used by the calling program before

the improvement procedure. In such a situation, these vari-

ables (\vhose values are not regenerated during the improve-

ment phase) will be.affected in values if they are included

in the COHHON block. Their values are preserved by excluding

them from the block.

Finally, therefore, 18 memory locations are required for

the temporary variables in the entire package.

B. COHHON Block Label

cor-li•ION blocks may or may not have labels (or numbers).

The name blank COI1MON applies if the block has no label (or

number) . Else, the block is a labelled (or numbered) COf.lMON

block.

If blank C0~~10N were used in this package, the user would

be unable to specify another independent blank COMMON block

of variables of his own choice in the main program and other

(user's) subprograms, since there can exist only one blank

CO~~ON block in a program.

Labelled (or numbered) COM1-10N blocks can be numerous, the

maximum number depending on the r:tachine used. (In CDC 6400 at

-90-

Page 95: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

~.

4'

~:

l .. ~ ..

~

J

l. l

~.

~

.4

~

4 .l ·~

.~

~ ]

400.4

Lehigh, the number of labelled and numbered C01·IHON blocks is

limited to 61). One requirement of these blocks is that each

label (or number) used in a program must be unique.

The originator of this package has chosen his last name

for the label in the justifiable hope that a general user

will not dream up this identical label for any of his label­

led COMMON blocks. All the same, it is necessary to emphasize

that the label IYENGAR should be considered taboo by the user

for any of his labelled cm,'lNON blocks when using this package.

If the label is used, the variables listed by the user in the

block may get redefined with each CALL to a subprogram of

this package.

-91-

Page 96: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

.1

]

]

]

]

J

]

]

J

J

.l

J

.l

J

J

J

J ]

400.4 3.2 USE OF VARIABLE (ADJUSTABLE) DIMENSIONS

3.2.1 Adopted Procedure

In this packa.ge, the dimensions of all arrays used in

the subprogra~sare adjustable dimensions. The motivation

for this approach is explained in what follows.

A primary rule in communication between the· calling

program and the called subprogram is that the row dimen­

sions of all double-subscripted arrays which are arguments

must match exactly in both routines. This follows from

the fact that double-subscripted arrays are stored column

by column in the machine.

Consider SUBROUTINE MULT(li.,B,C,L,H,N) as an example for

discussion in the rest of this section, Sec. 3.2.

The dimensions of arrays A, B and C are specified in

the subprogram by the declaration

REAL A(L,M) ,B(M,N) ,C(L,N)

If, in the calling program, a matrix A (of size 10 rows

by 15 columns) is to be postmultiplied by a matrix B (of

size 15 rows by 20 columns) to give the product matrix C

(of size 10 rows by 20 columns), the proper declaration

in the calling program is

REAL A ( 1 0 I 15 ) I B ( 15 I 2 0 ) I c ( 10 I 2 0 )

and the corresponding CALL statement is

CALL MULT(A,B,C,l0,15,20)

In this case, the dimensions match automatically. Note

-92-

Page 97: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

l

3

J ]·

J ]

]

]

]

l ]

]

J

J

J -]

"]

J

400.4

that the array sizes chosen are exact. Under-dimensioning

will not work in any scheme, and over-dimensioning does not

permit suitable matching since double-subscripted arrays

are involved.

3.2.2 A Limitation of the Adopted Procedure

Occasionally, a matrix with the same name but of dif­

ferent sizes needs to be used in a calling program. The

dimension declaration in such a case must obviously account

for at least the maximum size of the matrix. (Note that a

subscripted variable can be dimensioned only once in a

program.)

As an example, matrix A may vary in size, say, from 2

rows by 3 columns to 10 rows by 15 columns. Then the di­

mension declaration is

REAL A(l0,15)

Assuming that there are other similar matrices, the dec­

laration may be

REAL A ( 10 , 15 ) , B ( 15 , 2 0 ) , C ( 10 , 2 0 )

No difficulty is experienced if the problem to be solved

involves the maximum dimensions; e.g., CALL HULT(A,B,C,lO,

15,20). However, when solving problems using dimensions

less than the prescribed maximum dimensions, the sizes will

not match. For example,

CALL MULT(A,B,C,6,9,12)

implies that, in the subprogram, matrix A has dimensions

-93-

Page 98: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

1 ]

J ]

l ]

]

]

]

j

J

J

]

]

J

J

J

J

400.4

6 rows by 9 columns, whereas in the calling program it has

been dimensioned for size 10 rows by 15 columns.

To rectify the situation, the subprograms themselves

need to be modified slightly as suggested in the following

subsection.

3.2.3 Suggestion for Mod~fication by the User

If array sizes are variable in the calling program, the

required subprograms may be modified on the following lines.

The dimension declaration for the arrays in the calling

program should correspond to (at least) the maximum size

of each array in the program.

As an example,

REAL A ( 10 , 15 ) , B ( 15 , 2 0 ) , C ( 1 0 , 2 0 )

For matching the arrays in the subprograms and specifying

the particular sizes to be operated on, the folloltling is a

suitable set of statements.

In the calling program,

CALL .i:1IULT (A,lO,B,l5,C,l0,6,9,12)

In the subprogram,

SUBROUTINE HULT (A,NRA,B,NRB,C,NRC,L,H,N)

REAL A (NRA,l),B (NRB I 1) I c (NRC I 1)

Recall that whenever variable dimensioning is used in

subprograms, the array names as well as the variables

which represent the dimensions must be formal parameters.

The last three parameters in the argument lists represent

-94-

Page 99: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

.• ]

"1

-] .

] ..

"J

J

]

]

]

J

J ]

..]

J

J

J

]

400.4

the sizes ·of the matrices to be operated on. The rest pre­

scribe the array names and maximum row dimensions.

The modified form is obviously suitable even if the

sizes are not variable in the calling program. Hence, an

additional advantage of this procedure is that the user

may choose suitable maximum dimensions for matr·ices in a

program for solving problems of a particular type. The di­

mension declaration, in such a case, needs no further at­

tention from problem to problem. However, it is worthwhile

to remember that memory space is wasted when problems that

do not involve maximum dimensions are solved.

The disadvantages of this procedure, attributable to

the longer argument list, are these:

1. Mistakes in matching arguments ln CALL sta~ements

are more likely.

2. There is a loss of efficiency since addresses of

a larger number of arguments need to be passed

back and forth by the system.

In the authors' opinion, thedisadvantages outweigh the

advantages. Also, the additional ·type of problem covered

by the modified procedure is of infrequent occurrence.

3.2.4 A Special Procedure

A few users have violated the rule of matching dimen­

sions and used the earlier version (FC~~PK) of this package

successfully without any modifications.

-95-

Page 100: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

]

]

]

]

]

]

J

]

]

]

'•

]

]

]

J

J

]

400.4

The procedure is stated here only for the sake of comp-

leteness of this discussion on variable dimensions. It is

not recommended for general use as special care needs to

be exercised in programming.

Assuming that the required matrices are overdimensioned,

the matrices in this procedure are defined thrqugh the use

of relevant subprograms only. As an example,

REAL A ( 1 0 ' 15 ) I B ( 15 I 2 0 ) I c ( 10 ' 2 0 )

CALL RDRm'1G (A, 6, 9)

CALL RDROWG (B,9,12)

Here, 54 elements of matrix A and 108 elements of matrix

B get defined. The sequence of storage of the elements in

this case, although not unpredictable, is dependent on the

extent of over-dimensioning and will hence change \vi th each

problem .. For the sake of brevity, the elements may be said

to be in "wrong" locations. If, now, CALL HULT (A,B,C,6,

9,12) is used, the machine again refers to the same wrong

locations of elements in matrices A and B. Since this is,

however, a consistent process in the machine, matrix C will

have proper values but its elements are again stored in

some other wrong locations.

The importance of printing each array through the use

of other subprograms is, by now, evident. In these sub­

programs, the machine again refers to the same \vrong loca­

tions and the printed values will therefore be right.

-96-

Page 101: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

]

]

]

]

]

]

]

]

]

]

]

]

]

J

J

J

J

400.4

In short, this procedure will be successful if the main

program always CALL-s the relevant subprograms whenever

arrays are to be defined through reading in data from cards,

operated on, or printed.

Wastage of memory space can be considerable if the

special procedure is adopted in solving problems where the

sizes of the matrices in the calling program remain statio­

nary.

-97-

Page 102: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

3. 3 RESERVED NAlvlES

When executing a FORTRAN main program with several sub-

programs, it is essential that each of these bear a unique

j name so that the machine does not get "confused". The rules

of operation vary with each (machine) system when this re-

j quirement is violated. In the following, the discussion

applies to the CDC 6400 installation at the Lehigh University

Computing Center.

] If more than one routine by the same name is loaded in

the machine, the one that was loaded first is recognized by

] the machine as the one meant for use~ Assume that this pack-

age is loaded first in the machine and the user's subprogram

] SUBROUTINE SOLVE (X,Y,Z) is loaded subsequently. Since the

] matrix package was loaded first and contains a subprogram

SUBROUTINE ·SOLVE (A,B,N,L,DET), the user's subprogram

] SUBROUTINE SOLVE (X,Y,Z) will be ignored during execution.

If this is the intention, there is no problem.

] The converse is equally true. If the user's subprogram

] is loaded first, the subprogram SUBROUTINE SOLVE (A,B,N,L,DET)

of the matrix package will be ignored.

] Hence, it is best to treat all the 30 names used for the

routines in this package as reserved names, and choose other

l names for the user's program and subprograms.

*For loading sequence, see User's Guide (Section 4.4).

l -98-

]

]

Page 103: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

l Further, it is obligatory that the name of every variable

j used in a routine differ from the name of any subprogram

CALL-ed by the routine. ,

]. (A renunder -- the name IYENGAR lS a reserved name when

labelling CO~L.'-'iON blocks.)

] ..

]

]

]

]

]

]

]

l -99-

]

]

Page 104: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

-, a

-]

1

J

l

l l 1 1

400.4

3.4 SUBPROGRAH LENGTHS

The length of each subprogram in octal numbers, using the

RUN and FTN compil~rs of the CDC 6400 installation at Lehigh,

is indicated belmv. Small variations in these numbers are

likely with periodic revisions to the compilers. The length

of the COM£.10N block is 16 8 •

Sl. No.

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Subprogram

ADD DETMT DIAG EV (IEV) GEVP MINV HOVE MULT OUTE (OUTF,OUTG) P~1ULT

POSTM RDCBC RDCOLG RDRBR RDROWG SCMUL SINV SOLVE SQTR SUB TMULT TRANS XABATC XABTA XABTC XATBAC XA'rBB

RUN

31 141

33 405 146 230

26 53

233 63 62 46 27 46 50 24

217 265

50 31 53 36

105 64 54.

102 62

CO~ll-'ION block 16 ---TOTAL 3555

Length (octal) FTN (OPT=2)

42 221

43 364 215 254

37 77

224 105 101

52 34 52 52 40

255 362

65 42

103 57

130 102

74 131 104

16

4436

[The earlier version (FCHXPK) required 4265 8 words (RUN)

and had fewer routines.]

-100-

Page 105: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

J

J

].

] ·.

]

]

]

]

]

]

]

]

J

]

J

.J

J

]

The package uses two routines, SQRT and ABS, available in

the machine.

The following notes are especially ,for users of the

CDC 6400 at Lehigh.

Although this package may be catalogued as one unit on a

permanent file, it is not necessary to load the entire pack-

age each time the file is attached. Selection of routines

is possible through the use of control cards (COPY routines)

such as COPYN, to minimize field length requirements for the

. b ( 2) JO • Note, however, that if SUBROUTINE GEVP (A,B,S,T,N)

is selected, other routines as mentioned in .the User's Guide

(Chapter 4) must also be selected.

SUBROUTINE OUTE (A,I,J,TITLE, TITEL) must be selected if

any of the three print routines (OUTE,OUTF,OUTG) is required

by a calling program.

Selection of SUBROUTINE EV (A,S,N) assures the avail-

ability of the associated ENTRY IEV.

Finally, such selection by the.user may become unnecessary

in due course, because it is anticipated that the loader it-

self will be modified to select routines, as required, for

each job. (J)

-101-

Page 106: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

~~,

;J

·1. .,

•.

1 -J

J

. 400 .4

3.5 TEMPORARY VECTORS

A few subprograms of this.package require the use of tern-

porary vectors to store intermediate values in computations.

The rnatching vectors in the calling program must obviously

be dimensioned. Such vectors, if they have been defined in

the calling program, will be destroyed in the subprograms.

It is sufficient to provide for only one temporary vector

in the calling program, even if it uses more than one sub-

program of the above type. The vector should be dimensioned

for the maximum size required in the use of all such subpro-

. grams. It may then be used repeatedly in all the correspond-

ing CALL statements. (Alternately, the several vectors that

result may be EQUIVALENCE-d at their starting addresses to

save memory space.)

SUBROUTINE GEVP(A,B,S,T,N), in this regard, is a special

case. It requires the use of a temporary matrix S in addi-

tion to that of a temporary vector T. In the calling program,

matrix S may be matched either by a matrix or by a vector of -

N*N elements. Assuming matrix S is matched by a vector, the

b1o vectors corresponding to S and T must be independent of

each other in the calling program. In other words, they do

not share the same memory locations.

-102-

Page 107: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

] 3.6 Featur~s of th~ CDC ·6400

The routines in this package were developed using the

] CDC 6400 computer at Lehigh. Some of the features of this

machine are noted below, since minor modifications may be

necessary when this package is used in other machines.

] 1. The name of a variable, routine, label etc.·, is

limited to 7 characters. ]

In this package, only the C0Mi"10N block label (IYENGAR)

] is 7 characters long. All other names used are shorter.

2. On the line printer, a maximum of 135 characters (not

] counting the carriage control character in column 1) can be

] printed on a line.

Practically full advantage of this feature is taken

] in the output routines of this package.

3. An ENTRY statement has no associated argument list.

However, in the CALL statement corresponding to the ENTRY

] statement, the argument list (if any) of the routine in which

the ENTRY statement appears must be matched.

] Example: CALL IEV(A,S,N)

4. Conversion of an integer to its real form may be done

] by an assignment statement across the equality slgn.

.l See line 34 of the coding in SUBROUTINE EV(A,S,N)

5. The .length of each computer word is 60 bits. Hence,

J it is possible to store 10 alphanumeric .characters in each

word.

] -103-

1 l

Page 108: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J :~ j

]

]

]

]

]

]

]

]

J ]

]

J

400.4

A maximum of 20 characters may thus be used to match the

bw variables TITLE and TITEL in the output routines of this

package. The other entities in these routines using the same

featt;tre are arrays Y and IV, and the A-field in the FOFJ-'lAT

statement.

3.7 Use of Single Subscripts in Selected Routines

In only a few routines, the (double-subscripted) matrices

are treated as single-subscripted arrays. These are some of

the simpler routines which could be so written with the ad-

vantages of saving memory space and execution time. Trials

with a few other routines showed that such modifications lead

to one of the advantages at the expense of the other, the

execution time being more generally the item hurt. Further

probing in ·this area seems warranted.

-104-

Page 109: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

....,1' .. _

l

_]

J

l l l

4. USER'S GUIDE

4.1 INTRODUCTION

The subprograms in this package were developed by Hr .

Sampath Iyengar of the Computer Systems Group in Fritz Engi-

neering Laboratory, for use by members of the Laboratory.

Dr. C. N. Kostem is the Chairman of the Computer Systems

Group.

This version supersedes the earlier one (FCMXPK - fortran

Callable Matrix Package) which will be wi thdra1'.·m by a date to

be specified. Mr. Edward T. Manning, Jr. was associated

with Hr. Iyengar in the development of FCMXPK.

In this Guide, only a brief description of the function,

limitations and requirements of each subprogram is included.

Nore detailed information on how the subprograms were de-

veloped are available in Chapters 2 and 3.

The package includes routines for matrix manipulation as

under:

OPERATION

Add matrices Determinant of matrix Create Diagonal matrix Eigenvalues of symmetric Invert matrix Copy matrix Hultiply matrices

Print matrix Read matrix

Simultaneous equations Transpose matrix Subtract matrices

SUBPROGRA.H

ADD DETHT~ HINV, SINV, SOLVE DIAG

matrices EV, IEV 1 GEVP MINV 1 SINV MOVE

-105-

HULrr, PNULT 1 POSTl'-1 1 SCHUL 1

THULT, XABATC, XABTA 1

XABTC, XATBAC, XATBB OUTE 1 OUTF, OUTG RDCBC 1 RDCOLG 1 RDRBR 1

RDROh1G SOLVE SQTR 1 TRANS SUB

Page 110: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

.1

l 1 l 1

400.4

4.2 GENERAL LIMITATIONS

The subprograms do not provide any diagnostics if opera-

tions which are not possible mathematically, such as inver­

sion of a singular matrix, are attempted. The requirements

of the subprograms are not tested prior to or during execu-

tion and hence, when the requirements are violated, the

answers obtained are, in general, unpredictable and wrong.

Only ·the following subprograms provide printouts:

i) SUBROUTINE OUTE (A,I,J,TITLE,TITEL)

ii} SUBROUTINE OUTF (A,I,J,TITLE,TITEL)

iii} SUBROUTINE OUTG (A,I,J,TITLE,TITEL)

SUBROUTINE RDCBC (A,M,N), SUBROUTINE RDCOLG (A,M,N), SUB-

ROUTINE RDRBR (A,M,N) and SUBROUTINE RDROWG (A,M,N) enable

reading in values from data cards for the matrix A. All

others are "calculation" subprograms.

In all the subprograms, "variable" or "ad)ustable" dimen­

sions are used for the several arrays. The user must, there-

fore, prescribe exact dimensions for all his arrays to be

handled by this package. Overdimensioning, except under

special circumstances of usage (Chapter 3), may lead to wrong

results. Underdimensioning invariably produces wrong results

or aborts the execution of the program.

For Input-Output operations, card input and printer output

are assumed.

The limitations on the sizes of the matrices that can be

-106-

Page 111: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

1

J_

.. ~] ..

l 1 -·~j

.. j

J

J ' ]

:.]

.-1 •·

.1

400.4

handled are not due to any feature in programming involved in

this package but due to the capacity of the machine used.

The label IYEI:JGAR may not be used in the user's program

for c;my of his labelled CO.N.HON blocks. Similarly, the names

of routines in this package may not be used in the user's pro-

gram for his program or any of the subprograms.

4.3 DISCLAIMER

The burden of proof on the validity and applicability of

this package to a particular problem rests with the user, and

not the authors. No guarantee is stated or implied that the

package will give correct results, or that the mathematical

relations and assumptions used are proper and applicable to

the problem under consideration by the user. The authors

cannot be held responsible for incorrect results or damages

resulting from the use of the package, although it is be­

lieved that the package is correctly formulated.

The authors welcome suggestions for improvements and

notice of any errors. If a correction is possible and imp­

lemented, proper pUblicity will be given to the revised

status of the package. Else, the concerned subprogram will

be withdrawn.

4.4 DECK SETUP

This package is expected to be available as a permanent

file at Lehigh University Computing Center, in due course.

-107-

Page 112: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

~1 -'J -J

.]

1 :J

1 .J

1 1 j

1

400.4

At the present tine, a prospective user who belongs to Fritz

Laboratory may borrow a binary deck and make his own copy.

Interested users will please contact the authors.

A sample deck setup, using the binary deck, is as follmvs:

Job Card ... RUN(S) LOAD(INPUT) LGO. 7/8/9 User's FORTRAN Program with Subprograms, if any 7/8/9 Binary Deck (FLMXPK) 7/8/9 Data, if any 6/7/8/9

The matrix package will be loaded first and the user's

program next. To reverse the order, replace thecontrol cards

LOAD(INPUT) and LGO. by LOAD(LGO) and INPUT., respectively.

4.5 DESCRIPTION OF THE SUBPROGRAMS

From the user's viewpoint, there are, in all, 30 routines

in this package. These will be described in alphabetical

order under the following headings:

a. Function:

b. Calling Program:

i) Dimensions: Those that are required in the calling

program.

If the calling program is the main program, the di-

mensions must be stated in terms of absolute nu~bers,

such as

-108-

Page 113: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

~1 400.4 , REAL A (10, 15). If it is a subprogram, the dimension

statement is either of the same form or of the form

l - REAL A (H,N) v1here H and N have been defined through

:). .

operations prior to the use of the subprogram. (The

user is obliged, in the latter instance, to include

~-. A, M and N in the argument list of his su?program.)

All the subscripted variables handled by this

l .package are "real" variables. [The solitary excep-

l tion, vector NEXCH in SUBROUTINE MINV (A,N,DET,NEXCH) 1

needs no special consideration by the user.] Mistakes

~ often occur when this fact is overlooked and the user

prescribes an "integer" name for what is clearly an

l array of "real" variables. An example from civil

l engineering is to refer to the stiffness matrix as K

without a corresponding TYPE statement. An easy solu-

1 tion is to dimension the arrays in a TYPE statement

such as REAL K (20,20), TEMP (20). An advantage here

J is that the user has a free choice of names. Further,

J ..

~

a separate DIMENSION statement need not be (in fact,

should not be) provided. Inclusion in the TYPE

.J statement of names of arrays which are "real" even

without a TYPE statement, like TEMP in the example,

_] does not hurt in any way.

~ ii) Definitions: Arrays and variables that must be

defined prior to or in the CALL statement.

"l -- -109-

~

.l

Page 114: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

l ~]

]

-j

']

]

J

l ']

]

]

j

1 ]

]

]

]

l

400.4

iii) Values Returned to the Calling Program:

c. Limitations (if any) :

The general limitations mentioned in Section 4.2 will

not be repeated.

c. or d. Additional Notes (if any):

c. or d. or e. Examples of CALL Statement:

4.5.1 SUBROUTINE ADD (A,B,C,M,N)

a. Function:

Add matrices A and B and store the sum in matrix c.

(C = A + B) •

b. Calling Program:

i) Each matrix is of size M rov1s by N columns.

ii) Matrices A and B, as well as integers M and N, must

be defined.

iii) Hatrix C is defined in the subprogram.

c. Additional Notes:

The resultant matrix may be stored in one of the

original matrices. Only in such a case, the specific

original matrix will be destroyed.

d. Examples:

i) CALL ADD (A,B,C,M,N)

ii) CALL ADD (A,B,C,l5,20)

iii) CALL ADD (A,B,A,l0,15)

-110-

Page 115: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

].

] -

]

J ' '

]

]

1 .J

J 1 J

400.2

.

4.5.2 SUBROUTINE DETMT (A,DA,N)

a. Function:

The determinant of the given (square) matrix A is made

available to the calling program as DA. DA = det(A).

b. Calling Program:

i) Matrix A is of size N rows by N columns. -

ii) Matrix A and integer N should be defined.

iii) DA is defined in the subprogram.

c. Limitations:

The original matrix A is destroyed.

d. Examples :

i) CALL DETI•IT (A, DA, N)

ii) CALL DETHT (ARRAY,DET,20)

4.5.3 SUBROUTINE DIAG (A,DA,N)

a. Function:

A diagonal matrix A is generated as follows:

Each diagonal element has the value DA, and each off-

diagonal element has the value zero.

b. Calling Program:

i) Hatrix A is of size N rows by N columns.

ii) The value of the diagonal element DA and integer N

must be defined.

iii) Matrix A is defined in the subprogram.

' I . ...

-111-

Page 116: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

'j·· ::

l: . .

sj,

·~ rj

·. 3

1 ' .

] .

J ]

400.4

c. Exarnoles:

i) CALL DIAG (A, DA, N)

ii) CALL DIAG (,A 1 1. 0 1 15)

iii) CALL DIAG (ARRAY,DE,NSIZE)

4.5.4 SUBROUTINE EV (A,S,N)

a. Function:

Eigenvalues and eigenvectors of the symmetric matrix A

are computed.

b. Calling Program:

i) Hatrices A and S are of size N rows by N columns.

ii) Matrix A and integer N must be defined.

iii) On return to the calling program, matrix A has, for

its diagonal elements, the eigenvalues of the origi-

nal matrix A and matrix S has, for its columns, the

corresponding eigenvectors.·

c. Limitations:

The original rna trix A rnus t be symmetric. It ~.vi 11 be

destroyed in the subprogram, as the eigenvalues are re-

turned in the same matrix .

d. Additional Notes:

The eigenvalues and eigenvectors may be improved

further, if so desired, by using SUBROUTINE IEV (A,S,N).

e. Examples:

i) CALL EV (A,S,N)

ii) CALL EV (ARRAY,EVEC,lO)

-112-

Page 117: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

"1 ijJ

..

] ..

]

, .jJ.

]-

]

J

]

J "1 .J

]

]

]

J

J

J

J

400.4

4.5.5 SUBROUTINE GEVP (A,B,S,T,N)

a. Function:

Eigenvalues and eigenvectors of the given matrix A

where [A] (X} =\[B] (X} are compu~ed. Both the matrices

A and B are symmetric, and further matrix B is also

positive-definite.

b. Calling Program:

i) Natrices A, B and S are of size N rows by N columns.

T is a vector of size N elements.

ii) Matrices A and B, as well as integer N, should be

defined.

iii) The eigenvalues are returned as the diagonal elements

of matrix A and the corresponding eigenvectors as the

colunms of matrix B. Hatrix S and vector T are used

fo~ storing some intermediate values in computations.

c. Limitations:

Matrices A and B must be symmetric. Matrix B must also

be positive-definite. Both the original matrices A and B

are destroyed in the subprogra~.

The following subprograms of this package must be

available and loaded when this subprogram is used:

i) SUBROUTINE EV (A,S,N)

ii) SUBROUTINE NULT (A,B,C,L,M,N)

iii) SUBROUTINE POSTM (A,B,K,L,X)

-113-

Page 118: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

1 ~]

]

1

]

]

]

]

J

]

J

J

J

J

J

]

J

1

400.4

d. Examples:

i) CALL GEVP (A,B,S,T,N)

ii) CALL GEVP (EVAL,EVEC,S,TEMP,lO)

4.5.6 SUBROUTINE IEV (A,S,N)

a. Function:

Eigenvalues and eigenvectors of the symmetric matrix A

computed by the use of SUBROUTINE EV (A,S,N) are improved.

b. Call~ng Program:

Same as in SUBROUTINE EV (A,S,N).

c. Lim~tations:

Same as in SUBROUTINE EV (A,S,N).

d. Additional Notes:

The accuracy of calculations in SUBROUTINE EV (A,S,N)

is prescribed according to the following scheme. The

square root of the sum of the squares of the elements

above the major diagonal (of the original matrix A) is

computed first. This is called the initial threshold. A

final threshold value of one-millionth of such sum is then

established. The diagonalization, which is an iterative

process, proceeds up to the stage when the absolute value

of every off-diagonal element is less than or equal to

the final threshold value.

Since the process is iterative, the user has the option

to improve the accuracy of the results by successive CALL-s

to the subprogram. For reasons explained in the

-114-

Page 119: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

]

]·~ . '

·~]. . . ' .

J

J

J ]

]

J .

J

J

J

J

J

J ]

documentation (Chapter 2), these successive CALL-s must be

to SUBROUTINE IEV (A,S,N). The following rules apply.

i) SUBROUTINE EV (A,S,N) must be CALL-ed once only and

before the SUBROUTINE IEV (A,S,N) is CALL-ed.

ii) SUBROUTINE IEV (A,S,N) may be CALL-ed subsequently the

required number of times to achieve the desired accu-

racy. If a total number of n CALL-s are made to (both)

the subprograms, each off-diagonal element will be

reduced in absolute value to (at least) 10- 6n times

the initial threshold.

iii) Neither matrix A nor matrix S may be altered in the

calling program between any tv10 of the above CALL-s

to the subprogram.

Trial runs have indicated that the improvement proce-

dure causes small but significant changes in the

eigenvectors, and practically no cha~ges in the eigen-

values (apparently because these are already very

close to the exact values). An excessive number of

improvement cycles may result in an underflmv in the

machine.

e. Example:

CALL EV (A,S,N)

CALL IEV (A,S,N)

CALL IEV (A,S,N)

-115-

Page 120: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

1

]

1 .J

]

]

]

]

J

J

]

J

J

J

400.4

4.5.7 SUBROUTINE HINV (A,N,DET,NEXCH)

a. Function:

The matrix A is inverted in its 0\'m space and its

determinant is computed.

b. Calling Program:

i) Matrix A is of size N rows by N columns. Vector NEXCH

is of size N elements (see item d below).

ii) Matrix A and integer N should be defined.

iii) The inverse of the original matrix A is returned in A

itself. The value of the determinant of the original

matrix A is returned in DET.

c. Limitations:

The original matrix A is destroyed in the subprogram.

See also "Additional Notes" under SUBROUTINE SINV (A,DA,N).

d. Additional Notes:

The vector NEXCH is used for computations only in the

subprogram and the values of its elements are of no con-

sequence to the calling program. Hence , the matching

vector in the calling program need-not necessarily be a

vector of integer elements.

3. Examples:

i) CALL MINV (A,N,DET,NEXCH)

ii) CALL HINV (ARRAY,lO,DET,TEMP) ..

Page 121: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l

j.

~'J. ~J .

]

J ]

]

J ]

]

J

J

J

400.4

4.5.8 SUBROUTINE MOVE (A,B,M,N)

a. Function:

Matrix A is copied as matrix B. (B = A)

b. Calling Program:

i) Matrices A and B are of size H rows by N columns.

ii) Hatrix A and integers M and N should be defined.

iii) Matrix B is defined in the subprogram.

c. Additional Notes:

When certain subprograms such as SUBROUTINE DETMT

(A,DA,N) of this package are CALL-ed, the original matrices

get destroyed in the subprograms. The user may have a need

to store the original matrices for further use at a later

time. This subprogram meets such a need.

d. Examples:

i) CALL MOVE (A,B,H,N)

ii) CALL NOVE (ARRAY,SAME,l0,15)

4.5.9 SUBROUTINE 11ULT (A,B,C,L,M,N)

a. Function:

Matrix A is post-multiplied by matrix B to yield matrix

C. (C = AB)

b. Calling Program:

i) Matrices A, Band C have the following dimensions:

Matrix Size --A L rows by M columns B M rov1s by N columns c L rows by N columns

-117-

Page 122: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

] ii) Matrices A, B and integers L, M and N should be

defined.

iii) The product matrix C is defined in the subprogram.

J c .. Limitations:

Matrix C should be distinct from matrices A and B.

] However, matrices A and B may be identical. See also

SUBROUTINE PHULT (A,B,K,L,X) and SUBROUTINE POST11

(A I B 1 K 1 L 1 X) •

] d. Examples:

i) CALL MULT (A,B,C,L,M,N}

] ii) CALL MULT (A,A,C,N,N,N)

"]'· ..

The examples beloH yield \vrong results:

iii} CALL MULT (A,B,A,L,H,M}

J iv) CALL HULT (A,B,B,L,L,N)

v} CALL MULT (A,A,A,N,N,N)

] 4.5.10 SUBROUTINE OUTE (A,I,J,TITLE,TITEL}

J a. Function:

l'iatrix A of size I rows by J columns is printed. Print-

ing begins on a new page. The matrix is labelled at the

J top of each page with the labels provided by the user. The

word CONTINUED in parantheses appears against the label if

.J printing is on more than one page. The size of the matrix

is indicated below the label.

J Rows and columns are numbered. On any one page, the

] -118-

J

J

Page 123: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

-J

l -j .

-J .

]

]

J

J

J

J

J J

1 ]

l ]

]

400.4

maximum number of rows printed is 25, and the maximum

number of columns is 10. Hence, if J ~ 10 and I~ 25,

printing is completed on one page. If J > 10, the first

10 columns are printed, until all the rov1s (25 or less to

a page) are exhuasted. Then the second 10 columns (or less)

are printed, until all rows are exhuasted, and so on. The

elements of matrix A are output in E-FOm,mT. Five digits

appear to the right of the decimal point (El2.5).

b. Calling Program:

i) Matrix A is of size I rows by J columns.

ii) Matrix A and integers I and J should be defined. Also,

the user's label must be provided as a Hollerith

string of characters (maximum 20) through alphanumeric

variables or "values" corresponding to the arguments

TITLE and TITEL. See examples of CALL statement.

iii} No formal "values" are returned by this subprogram.

c. Additional Notes:

This subprogram is recommended for use in preference to

SUBROUTINE OUTF (A,I,J,TITLE,TITEL) whenever the magnitudes

of the elements of the matrix to be printed are unknown,

unpredictable, or exceed the field Fl2.5. A slight

sacrifice of easy readability is implicit.

d. Examples:

i) CALL OUTE(A,I,J,TITLE,TITEL)

-119-

Page 124: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l 400.4

l -r l' '

~l

~l

l ~.

]

.] .

~1

] J

~l

] ..

.. 1

l J

·'

--1

1 ·I

'

ii} VAR = 10 Hi\IATRIX OF TITLE = lOHREDUNDANTS. CALL OUTE(A,I,J,VAR,TITLE}

iii} CALL OUTE(A,I,J,lOHORIGINAL M,5BATRIX)

4.5.11 SUBROUTINE OUTF(A,I,J,TITLE,TITEL)

a. Function:

All. the details are the same as in SUBROUTINE OUTE(A,I,

J,TITLE,TITEL) except that the elements are output in F-

FORl.'1AT. Five digits appear to the right of the decimal

point, and a maximum of six digits (five, if the value is

negative} appear to its left. (Fl2.5}

b. Calling Program:

Same as in SUBROUTINE OUTE(A,I,J,TITLE,TITEL}

c. Limitations:

The "largest" numbers that can be printed are of the

form abcdef. ghijk or -bcdef. ghijk. If a number "larger"

than these is attempted to be printed, an asterisk (*) will

appear at the beginning of the corresponding field.

c. Examples:

i) CALL OUTF(A,I,J,TITLE,TITEL)

ii) CALL OUTF (A, I I J I 8Hr--<;.]J..TRIX AllH

4.5.12 SUBROUTINE OUTG(A 1 I,J,TITLE,TITEL}

a. Function:

All the details are the same as in SUBROUTINE OUTE(A 1 I,

J 1 TITLE,TITEL) 1 except that the elements are output in G­

FORMAT.

-120-

Page 125: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

~1 .. J

J.

:l

J

J j

J

J

J

400.4 b. Calling Program:

Same as in SUBROUTINE OUTE(A,I,J,TITLE,TITEL)

c. Additional Notes:

Five significant digits appear on output, if the abso-

lute value x of the element being printed is in the range

0.1 ~ X < 10 5 (G 12.5}

Otherwise, the output is in E-FORMAT for the element.

d. Examples:

i} CALL OUTG(A,I,J,TITLE,TITEL}

ii) CALL OUTG(A,I,J,lH ,lH)

4.5.13 SUBROUTINE PMULT(A,B,K,L,X}

a. Function:

The square matrix B is premultiplied by a rectangular

(or square) matrix A and the product matrix is stored in A.

A = AB.

b. Calling Program:

i} Matrices A and B, and vector X, have the following

dimensions:

Hatrix Size

A K rows by L columns (may be square, K = L)

B L rows by L columns

X (Vector) L elements

ii} Matrices A, B and integers K, L should be defined.

-121-

Page 126: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l . '

J

' ..1

j

]

J

j

]

J

J

J

J

400.4

iii) The product matrix is returned in matrix A. Vector

X is required in the subprogram for computations only.

c. Limitations:

Matrix B must be square. The ori·ginal matrix A is

destroyed. If matrix A is square, it should differ from

matrix B at least by name.

d. Examples_:

i) CALL P.iYlULT (A,B,K,L,X)

ii) CALL PI>1ULT (A,B,K,K,X)

The example below yields wrong results:

iii) CALL PMULT(A,A,L,L,X)

4.5.14 SUBROUTINE POSrrr-I(A,B,K,L,X)

a. Function:

The square matrix A is postmultiplied by a rectangular

(or square) matrix B and the product matrix is stored in B.

B = AB.

b. Calling Program:

i) r1atrices A and B, and vector X, have the following

dimensions:

Matrix

A

B

X (Vector)

Size

K rows by K columns

K rows by L columns (may be square, K = L)

K elements

ii) Matrices A, B and integers K, L should be defined.

-122-

Page 127: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

··~~"!'

l· 400.4 ~;

--r . : •J:

--:.f1

l

1-J'·. --J ..

'J -r -·'

...;] j

J.

J J ']

]

J .

1 l 1 1 ~

iii) The product matrix is returned in matrix B. Vector

X is required in the subprogram for computations

only.

c. Limitations:

Matrix A must be square. The original matrix B is

destroyed. If matrix B is square, it should differ from

matrix A at least by name.

d. Examples:

i) CALL POSTH(A,B,K,L,X}

ii} CALL POSTM(A,B,L,L,X}

The example belmv yields wrong results:

iii} CALL POSTM(A,A,K,K,X}

4.5.15 SUBROUTINE RDCBC(A,H,N}

a. Function:

Elements of matrix A are defined (column by column} by

reading in values from data cards.

b. Calling Program:

i} Matrix A is of size H rows by N columns.

ii} Integers M and N should be defined.

The number of data cards required per column of

matrix A is (M+7}/8. (Integer division}

iii) Matrix A is defined in the subprogram .

c. Additional Notes:

i} FORHAT Control:

The FOR}ffiT is (8Fl0.0} and the decimal point should

-123-

Page 128: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

~~ l

400.4 .I ~

·-1

l -l

J , 4

]

]

J

.]

.l

1 .l

l ]

.l

l l l I

preferably be punched in each data field. If it is

not punched, it will be assumed to be at the end of

the field. The non-punch positions in the field are

assumed to be filled with zeroes.

For example, if 23.5 is punched beginning in column

21, the value assigned to the corresponding element

is the same. If the decimal point is not punched,

the value assigned is 2305000000.0.

ii) Order in Assigning Values:

Assume matrix A is of size 14 rows by 6 columns.

Two data cards are required per column. Hence, the

total number of data cards required is 12. The

eight values on the first data card will be assigned

in order to Al,l' A2 , 1 , .•. ,A8 , 1 • The six values on

the second data card to A9 , 1 , AlO,l''''' Al4,1"

And so on.

d. Examples:

i) CAI.L RDCBC (A, M, N)

ii) CALL RDCBC(A,l4,6)

4.5.16 SUBROUTINE RDCOLG(A,H,N)

a. Function:

Elements of matrix A are defined by reading in values

from data cards. The elements are assumed to be in a con-

tinuous string of columns of matrix A.

-124-

Page 129: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

J

J.

].

]

J

J

J

J ]

J

J

J

J

J

1

400.4

b. Calling Program:

i) Hatrix A is of size H rows by N columns.

ii) Integers M and N should be defined.

The number of data cards required is (M*N+7)/8.

(Integer division}

iii) Matrix A is defined in the subprogram.

c. Additional Notes:

i) Same as in SUBROUTINE RDCBC(A,M,N}.

ii) Order in Assigning Values:

Assume matrix A is of size 14 rows by 6 colunms.

Eleven data cards are required. The eight values

on the first data card will be assigned in order to

Al,l' A2 , 1 , ... ,A8 , 1 . The first six values on the

second card to A9 , 1 ,A10 , 1 , ... , A14 , 1 . The last two

values on the second card to A1

,2

, A2

,2

. The eight

values on the third card to A3 , 2 , A4 , 2 , ... , A10 , 2 .

And so on.

iii) Of the four READ subprograms in this package, this

one requires minimum exe~ution time.

d. Examples:

i) CALL RDCOLG(A,H,N)

ii) CALL RDCOLG(A,l4,6)

4.5.17 SUBROUTINE RDRBR(A,M,N)

a. Function:

Elements of matrix A are defined (rmv by row) by

-125-

Page 130: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

1 "~]~

~ ~

J

]

J

J ]

]

J

]

1 J

J

400.4

reading in values from data cards.

b. Calling Program:

i) lv:latrix A is of size H rows by N columns.

ii) Integers M and N should be defined.

The number of data cards required per row of matrix

A is (N+7)/8. (Integer division}

iii) Matrix A is defined in the subprogram.

c. Additional Notes:

i) Same as in SUBROUTINE RDCBC(A,M,N)

ii} Order in Assigning Values:

Assume matrix A is of size 14 rows by 6 columns. One

data card is required per row. Hence, the total num-

ber of data cards required is 14. The six values on

card number I (I ranges in value from 1 to 14) are

assigned in order to AI,l' AI, 2 , ... , AI,6"

d. Examples:

i) CALL RDRBR(A,M,N)

ii) CALL RDRBR(A,l4,6)

4.5.18 SUBROUTINE RDROWG(A,M,N)

a. Function:

Elements of matrix A are defined by reading in values

from data cards. The elements are assumed to be in a con-

tinuous string of rows of matrix A.

b. Calling Program:

Same as in SUBROUTINE RDCOLG(A,M,N)

-126-

Page 131: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

]

] .

J ..

]

J

]

]

. j

J

]

J

J

J

J ]

400.4 c. Additional Notes:

i) Same as in SUBROUTINE P~CBC(A,M,N) •

ii) Order in Assignina Values:

Assume matrix A is of size 14 rm·1s by 6 columns.

Eleven data cards are required. The first six values

on the first data card will be assigned in order to

Al,l' A1 , 2 , ... , A1 , 6 . The last two values on the

·first card to A2 , 1 , A2 , 2 . The first four values on

the second card to A2 , 3 , A2 , 4 , A2 , 5 , A2 , 6 . The last

four values on the second card to A3 , 1 , A3, 2 , A3,3'

And so on.

d. Examples:

i) CALL RDROWG(A,M,N)

ii) CALL RDROHG(A,l4,6)

4.5.19 SUBROUTINE SCMUL(A,M,N,X)

a. Function:

Elements of matrix A are multiplied by the scalar

quantity X.

b. Calling Program:

i) Hatrix A is of size H rows by N columns.

ii) Matrix A and the scalar multiplier X as well as

integers M and N should be defined.

iii) The modified matrix is returned in A itself.

c. Limitations:

The original matrix is destroyed.

-127-

Page 132: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

d. Examples:

i) CALL SCMUL(A,M,N,X)_

ii) REI = 1. 0/EI

CALL SCMUL(A,H,N,REI)

iii) CALL SCMUL(A,M,N,l.0/30000.0) '

J 4.5.20 SUBROUTINE SINV(A,DA,N)

a. Function:

The symmetric matrix A (also positive-definite) is in-

l verted in its mvn space and its determinant is computed.

b. Calling Program:

i) Hatrix A is of size N rows by N columns.

ii) Matrix A and integer N should be defined. The sub-

program utilizes only the elements on and above the

l diagonal of the original matrix A. Hence, if so

desired, only these elements of matrix A may be

defined.

1 iii} The inverse is returned in matrix A itself. DA

stores the value of the determinant of the original

matrix A.

c. Limitations:

The original matrix A must be symmetric as well as

] positive-definite. The original matrix is destroyed.

d. Additional Notes:

The inverse of a syiTmetric matrix is also symmetric.

This property has been utilized in this subprogram, and

-128-

J

Page 133: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

J ..

J ]

l

]

1

J

J

J

J

400.4

hence the resulting inverse of a symmetric matrix will be

symmetric when this subprogram is used.

It is possible that the inverse of a symmetric matrix ob-

tained by the use of SUBROUTINE MINV(A,N,DET,NEXCH) is

not ideally symmetric because of round-off errors in the

machine.

e. Examples:

i) CALL SINV(A,DA,N)

ii) CALL SINV(K,DETK,20)

4.5.21 SUBROUTINE SOLVE(A,B,N,L,DET)

a. Function:

A system of linear simultaneous equations &~ = B is

solved.

b. Calling Program:

i) Matrices A and B have the following dimensions:

Hatrix

Coefficient Matrix A Right-Hand Side Matrix B

Size

N rows by N columns N rows by L columns

ii) Matrices A and B as well as integers N and L should

be defined.

iii) The solution matrix is returned in B. The value of

the determinant of the coefficient matrix A is

returned in DET.

c. Limitations:

The original matrices A and B are destroyed.

-129-

Page 134: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

']-. •.'

L

]

] I

'1 ~

]

d. Examples:

i) CALL SOLVE(A,B,N,L,DET)

ii) CALL SOLVE(COEFF,RHS,N,1,DA)

4.5.22 SUBROUTINE SQTR(A,N)

a. Function:

The transpose of the square matrix A is returned to the

calling program in A itself.

b. Calling Program:

i) Matrix A is of size N rows by N columns.

ii) Matrix A and integer N should be defined.

iii) The transposed matrix is returned in_ A itself.

c. Limitations:

Matrix A must be square. The original matrix is

destroyed.

d. Examples:

i) CALL SQTR(A,N) ·

ii) CALL SQTR(ASQ,lO)

4.5.23 SUBROUTINE SUB(A,B,C,M,N)

a. Function:

Subtract matrix B from matrix A and store the result

in matrix c. (C = A -B)

b. Calling Program:

i) Matrices A, B and C are each of size M rows by N

columns.

-130-

Page 135: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

·-1 . ,~·.' 400.4

... 1 ~l

=I .

:l "'-

~~

'=1

~

~

~

~

~

~1

:~

'l . ~-

-·l

:~

l -~

ii) Matrices A and B, as well as integers M and N should

be defined.

iii) Matrix C is defined in the subprogram.

c. Additional Notes:

The resultant matrix may be stored in one of the ori-

ginal matrices. Only in such a case, the spe_cific origi-

nal matrix will be destroyed.

d. Examples:

i) CALL SUB(A,B,C,M,N)

ii) CALL SUB(A,B,C,lO,lS)

iii) CALL SUB(A,B,B,25,30)

4.5.24 SUBROUTINE TMULT{A,B,C,L,M,N)

a. Function:

The transpose of matrix A is postmultiplied by matrix

B to give matrix C.

b. Calling Program:

i) Matrices A, Band C have the following dimensions:

Matrix

A B c

Size

L rmvs by H columns L rows by N columns N rows by N columns

ii) Matrices A and B, as well as integers L, .H and N,

should be defined.

iii) The product matrix is returned in matrix c.

c. Limitations:

Matrix C should be distinct from matrices A and B.

-131-

Page 136: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

However, matrices A and B may be identical.

d. Examples:

i) CALL TNULT(A,B,C,L,H,N)

ii) CALL TMULT(A,A,B,L,M,M)

iii) CALL TMULT(A,A,B,N,N,N)

The examples below yield wrong results-:

iv) CALL TMULT(A,B,A,L,L,L)

v) CALL TMULT(A,B,B,M,M,H)

j vi) CALL TMULT(A,A,A,N,N,N)

4.5.25 SUBROUTINE TRA.J.~S(A,B,H,N)

a. Function:

j Matrix A is transposed to give matrix B. (B -- AT)

b. Calling Program:

J i) Matrix A is of size ry1 rows by N columns. Matrix B is of size N rows by H columns.

.I ii) Matrix A and integers M and N should be defined.

iii) Matrix B is defined in the subprogram.

c. Limitations:

Even if matrix A is square-, it should be dis tinct

from the (square) matrix B.

J d. Additional Notes:

....

J If matrix A is square and the original matrix may be

destroyed, SUBaOUTINE SQTR(A,N) should preferably be used.

] e. Examples:

i) CALL TRP~S(A,B,M,N)

J -132-

1

Page 137: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J 400.4

] . ii) CALL TRANS(A,B,l0,15)

iii) CALL TRANS(A,B,N,N)

] The example belmv yields wrong results:

J .. iv) CALL TRANS(A,A,N,N)

4.5.26 SUBROUTINE XABATC(A,B,C,L,M,X)

] . . .

a. Function:

] The matrix product ABAT is formed in matrix C.

Matrix B is symmetric. C = ABAT

] b. Calling Program:

J i) .Hatrices A, B, C and vector X have the following

dimensions:

] Matrix Size --A L rows by M columns

J B M rows by H columns c L rows by L columns

X(vector) H elements

ii) Matrices A, B and integers L, M should be defined.

iii) The product matrix (symmetric) is returned in matrix

] C. Vector X is required in the subprogram for com-

] putations only.

c. Limitations:

] Matrix B must be symmetric.

Matrix C should be distinct from matrices A and B.

] d. Examples:

J i) CALL XABATC(A,B,C,L,M,X)

ii) CALL XABATC(A,B,C,L,L,X)

1 -133-

J

Page 138: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

]

]

]

J

J 1 ,;1

]

1

l ]

]

1

400.4

The examples below yield wrong results:

iii) CALL XABATC(A,B,B,L,L,X)

iv) CALL XABATC(A,B,A,L,L,X)

v) CALL XABATC(A,A,A,L,L,X)

4.5.27 SUBROUTIHE XABTA(A,B,L,N,X)

a. Function:

The matrix product ABT 1s formed in matrix A. Natrix

B is square. A= ABT.

b. Calling Program:

~Matrices A, Band vector X have the following dimensions:

Matrix:

A B

X(Vector)

Size

L rows by N columns N rmvs by N columns N elements

ii) Matrices A, B and integers L, N should be defined.

iii) The product matrix is returned in matrix A. Vector X

is required in the subprogram for computations only.

c. Limitations:

.Hatrix B must be square. The original matrices A and B

should be distinct from each other even if matrix A is

square. The original matrix A is destroyed.

d. Examples:

i) CALL XABTA(A,B,L,N,X)

ii) CALL XABTA(A,B,N,N,X)

The example belov1 yields wrong results:

iii) CALL XABTA(A,A,N,N,X)

-134-

Page 139: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

]

]

]. ,.,., J

]

]

j

J

]

]

J

400.4

4. 5. 28 SUBROUTINE XABTC (A ,B, C, L·,M, N)

a. Function:

The matrix product ABT is formed in matrix C. C = ABT

b. Calling Program:

i) Matrices A, B and C have the following dimensions:

!-latrix

A B c

Size

L rows by M columns N rov1s by .r-1 columns L rows by N columns

ii) Matrices A, B and integers L, M and N should be

defined.

iii) The product matrix C is defined in the subprogram.

c. Limitations:

Matrix C should be distinct from matrices A and B.

d. Examples:

'i) CALL XABTC(A,B,C,L,M,N)

ii) CALL XABTC(A,A,C,L,M,L)

iii) CALL XABTC(A,A,C,L,L,L)

The examples below yield wrong results:

iv) CALL XABTC(A,B,A,L,M,M)

v) CALL XABTC(A,B,B,L,L,L)

vi) CALL XABTC(A,A,A,L,L,L)

4.5.29 SUBROUTINE XATBAC(A,B,C,L,M,X)

a. Function:

The matrix product ATBA is formed in matrix C. Matrix

B is symmetric. C = ATBA

-135-

Page 140: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

.,

.1 400.4

j

]

]

]

]

]

1 ]

]

]

]

]

]

)

]

]

b. Calling Program:

i) Hatrices A, B and C and vector X have the following

dimensions:

Matrix

A B c

X(Vector)

Size

L rows by L rows by M rows by L elements

H columns L columns H columns

ii) Matrices A, B and integers L, M should be defined.

iii) The product matrix C (symmetric) is defined in the

subprogram. Vector X is required in the subprogram

for computations only.

c. Limitations:

!•latrix B must be symmetric. Matrix C should be distinct

from matrices A and B.

d. Examples:

i) CALL XATBAC(A,B,C,L,M,X)

ii) CALL XATBAC(A,B,C,L,L,X)

The examples below yield wrong results:

iii) CALL XATBAC(A,B,B,L,L,X)

iv) CALL XATBAC(A,B,A,L,L,X)

v) CALL XATBAC(A,A,A,L,L,X)

4.5.30 SUBROUTINE XATBB(A,B,L,N,X)

a. Function:

The matrix product ATB is formed in matrix B. Matrix

A is square. B = ATB.

-136-

Page 141: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4 b. ~allihg Program:

i) Hatrices A, B and vector X have the follmving

dimensions:

Matrix Size

A L rows by L columns

-,.. j .

B L rows by N columns X(Vector) L elements

~' . ii) Matrices A, B and integers L, N should be defined.

iii) The product matrix is returned in matrix B. Vector

X is required in the subprogram for computations

only.

c. Limitations:

Matrix A must be square. The original matrix B is

destroyed. The original matrices A and B should be

] distinct from each other even if matrix B is square.

d. Examples:

i) CALL XATBB(A,B,L,N,X)

ii) CALL XATBB(A,B,N,N,X)

The example below yields 1.vrong results:

iii) CALL XATBB(A,A,N,N,X)

... :4.

-137-

Page 142: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] ! '·

] J

1

]

]

]

]

]

400.4

5. READY REFERENCE SHEET

After a few problems have been solved with the use

of this package, the user will have gained enough

experience to operate within its requirements and

limitations, and frequent references to the text

become unnecessary in day-to-day usage. All the.

same, matching the argument list of each subprogram

and dimensioning arrays suitably are problems which

may require some memory aid. A ready reference

sheet has, therefore, been provided. The sub-

programs are listed alphabetically.

-138-

Page 143: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

\ -

.~ .~

NO. SUBPROGRAM 1. ADD(A,B,C,M,N) 2. DETHT(A,DA,N) 3. DIAG(A,DA,N)

4. EV(A,S,N) 5. GEVP(A,B,S,T,N) 6. IEV(A,S,N)

7. MINV(A,N,DET,NEXCH) 8. MOVE(A,B,M,N) 9. MULT(A,B,C,L,M,N)

10. OUTE(A,I,J,TITLE,TITEL) 11. OUTF(A,I,J,TITLE,TITEL) 12. OUTG(A,I,J,TITLE,TITEL)

13. PMULT(A,B,K,L,X) 14. POSTM(A,B,K,L,X)

I 15. RDCBC(A,M,N)

....... w 16. RDCOLG(A,M,N) 1..0 I 17. RDRBR(A,M,N)

18. RDROWG(A,M,N)

19. SCMUL(A,M,N,X) 20. SINV(A,DA,N) 21. SOLVE(A,B,N,L,DET)

22. SQTR(A,N) 23. SUB(A,B,C,M,N) 24. THULT(A,B,C,L,M,N)

25. TRANS(A,B,M,N) 26. XABATC(A,B,C,L,M,X) 27. XABTA(A,B,L,N,X)

28. XABTC(A,B,C,L,M,N) 29. XATBAC(A,B,C,L,M,X) 30. XA'l'BB (A I B' LIN, X)

.~ .L....... .~ .W .L-J

READY REFERENCE SHEET (FLMXPK)

BRIEF DESCRIPTION DIMENSIONS C = A + B A(H,N) ,B (M,N) ,C(M,N) Determinant A(N,N) Diagonal matrix 1\(N,N)

E-values,E-vectors A(N,N) ,S (N,N) Solve AX = A.BX A(N,N) ,B(N,N) ,S(N,N) ,T(N) Improve on EV A(N,N) ,S(N,N)

Invert A A(N,N) ,NEXCH(N) B = A A(M,N) ,B(M,N) C = AB A (L,M) ,B (M,N) ,C (L,N)

Print A A(I,J) Print A A(I,J) Print A A(I,J)

A = AB A (K,L) ,B (L,L) ,X (L) B = AB A(K,K) ,B (K,L) ,X (K) Read col. by col. A(M,N)

Read columns (grouped) A(M,N) Read row by row A(M,N) Read rows (grouped) A(M,N)

A = xA A(M,N) Syrn. inversion A(N,N) Sim. Eqs. (AX = B) A(N,N) ,B(N,L)

Transpose in place A(N,N) c = A. - B A(M,N) ,B (M,N) ,C (H,N) c = ATB A(L,M) ,B(L,N) ,C(H,N)

B = AT A(H,N) ,B(N,M) c = ABAT A(L,H) ,B(M,M) ,C(L,L) ,X(M) A = AB'l' A(L,N) ,B(N,N) ,X(N)

c = ABT A(L,M) ,B(N,M) ,C(L,N) c = ATBA A (L,M) ,B (L,L) ,C (M,M) ,X (L) B = ATB A (L,L) ,B (L,N) ,X (L)

. f

.~ ! _.._._.. _;:___J

NOTES

-.:--of:>. 0 0

Page 144: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

1

APPENDIX 1

Proofs of Some Basic Theorems

1

-140-

Page 145: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l J.

] -.

]

]

]

l

]

]

J

J J J

400.4 'APPENDIX 1

In support of the relations which were used earlier in

the mathematical derivations, proof of some basic theorems

in matrix algebra have been included in this Appendix for

ready reference. For the sake of brevity, the proofs are

. given in only a few lines. A standard text, such as Refe-

renee 4, may be consulted for more detailed information.

The algebraic derivation of sin 9 and cos 9 from tan 29 is

also included.

1. The transp6se of a product is the product of the

transposes in reverse order.

Extending the proof,

2. The inverse of A exists iff (if and only if) the de-

terminant of A is non-zero.

Some authors define and others show that A-l =

1 det(A) [co-factor] where det(A) = determinant of A.

If det(A) ~ 0, the Right-Hand Side of this equation exists.

Hence, A- 1 exists.

-141-

Page 146: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

'·1 J

J

1

]

1

"! ,;)

]

]

]

.]

400.4

If A-l exists, the Left-Hand Side exists and, hence,

det(A) =I 0.

3. A-1 is unique.

If B and C are both inverses of A,

AB(=BA)=I and AC(=CA)=I,

and hence A(B-C) = 0, the null matrix.

Premultiply by B or c.

B - C = 0

Hence, B = C.

4. The determinant of the product is the product of the

determinants.

Consider 2 x 2 matrices.

I Al·l B I = Al,l AlI 2

A2,1 A2,2

This is the same as A A 1,1 1,2

0 0

A2,1 A2,2 0 0

-1 0 Bl,l B 1,2

0 -1 B . 2,1 B2,2

since, by Laplace expansion, using the first and second

rows, the result is

Add B times first column to the third, B2

,2

times 1,1

second column to the fourth, and then add B1 , 2 times

-142-

Page 147: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

"1 400.4

1

~ "I

~ "]

]

J

]

J

J

J

1

]

l

]

J

]

]

first column to the fourth, B2

,1

times second column to

the third. The result is

Al,l Al,2 Al,1Bl,l+Al,2B2,1 Al,1Bl,2+Al,2B2,2

A2,1 A2 2 '

A2,1B1,1+A2,2B2,1 A2,1B1,2+A2,2B2,2

-1 0 0 0

0 -1 0 0

Again, by Laplace expansion, using the third and the

fourth rows, this is equal to IABj.

The proof may intuitively be extended to matrices

larger than 2 x 2.

5. The determinant of the inverse is the· reciprocal of

the determinant of the original matrix.

-1 1 AA =I, hence det(A)·det(A-) = det(I) = 1. This

also s~ows that, if det(A) = 0, det(A-1) = w, or the

elements of A- 1 are undefined.

6. The inverse of a product is the product of the

inverses in reverse order.

By definition, (AB) (AB)-l = I

Premultiply by A-l, B(AB)-1 = A- 1

Premultiply by B-1 , (AB)- 1 = B-1A-1

Extending the proof,

-143-

Page 148: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

] 400.4

]

1

1

J

]

]

]

]

7. The in:ve·rse ·of the transpose· is the transpose of the

inverse.

By definition, AA-l = I

By transpose, (A-l)TAT = IT = I

Hence, (A-l)T = (AT)-1

8. The inverse of a symmetric matrix is symmetric

(A-l)T = (AT)-1

Since AT = A, (A-l)T = A-1

9. The product of symmetric matrices is symmetric iff the

matrices commute with each other.

By definition, A and B commute if AB = BA.

(AB) T = BTAT

By symmetry of A and B, (AB)T = BA

If A and B commute, (AB)T = AB

Also (only if part),

if AB =(AB)T, AB = BTAT = BA or A and B commute

10. The product of a matrix and its transpose is

symmetric.

Note that A need not be square, and in general,

11. The product RT is orthonormal, if R and T are

othonormal.

-144-I

Page 149: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

·~ 00. 4

i

Since T is orthonormal, RT (RT) T = RRT

Since R is orthonormal, RT (RT) T = I

Hence, (RT)T = (RT) -l

12. A symmetric matrix A may be expressed in the form

A =

AIIJ

A.A.T where A is lower triangular.

For I < J, AI,J = 0

For I 2:. J,

N

= L: A I KAJ K = K=l I I

Find elereents of A •

+ AI,JAJ,J + AI1J+l AJ,J+l +.·.+A I,N AJ,N

Since A. = 0 if L< M, L,M

J-1 A = L: AI K A +/.. A I,J K=l I J,K IIJ J,J

I-1 2 % If I = J, A = (A L:

·AI,K ) .

I,I I,I K=l

1 J-1 If I> J I AI,J = A . - L: AI, K A. J,K)

AJ,J I,J K=l

13. -1

A is lower-triangular if A is lower-triangular. Find

eiements of A- 1 .

By definition, AB = I vlhere B = A-1 . N

L: A B = 8I,J K=l I,K K,J (Kronecker Delta)

•.• +

-145-

Page 150: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

1 J 400.4

]

]

]

j

1

1

l

]

]

]

J

Since

If I

lL = 0 for L < M, --L,M

I

5I,J = K~lAI,KBK,J

= 1 , and J > I , 6 · = 0 I,J

0 = A1 , 1B1 ,J , hence, Bl,J = 0

If I = 2 , and J > I , 6 I , J = 0

0 = A2 ,lBl,J + A2 , 2B2 ,J = 0 + A2 , 2B2 ,J, hence, B2 ,J = O

Similarly, for all J >I, BI ,J = 0

Hence, B = A-l is lower-triangular.

Non-zero elements of B.

If I = J, 6 = 1 I ,J

I 1 = L: AI,KBK,I =

K=l since both A and B are

lower-triangular. Hence, BI,I = --1-­AI,I

If I>J, 5I,J = 0

BL,M = 0 if L< H. Hence,

0 = AI,JBJ,J + .•• + AI,I-lBI-l,J + AI,IBI,J

Hence, BI,J 1 I-1

= - -- ( L: AI KBK J) AI,I K=J ' ' .

for I> J.

-146-

Page 151: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

1 ' '

:]

71 --4-

'1 ~

]

1 ~

j

]

J

J

J

400.4 14. Given· tan 29 ,· find ·sin· ·9 and co·s a.

The value of tan 29 is given by tan 29 =

This problem arises in SUBROUTINE EV(A,S,N).

Let A = Numerator and ~ = Denominator.

Since tan a= tan ( a- n ) , there are two solutions for 28 in

the range - n to n • Since the solutions are supplements of

each other, a unique solution is available if the range is

chosen as - n

2 to n

2 The range of 9 is then -

n 4

n to 4·

sin 29 tan 29 = cos 29 = 2 sin 9 Vl - sin2e 1 - 2 sin2 9

By squaring, rearrangement and the substitution x = sin2 e,

2 A 2 A2 A 2 4x (1 + --) - 4x (1 + -) + -- = 0

~ 2 ~2 ~ 2

= 0.5[1 +} A2 X 2 2]

A +~

Since - ~ < 9 ,:s ~ , sin 2

9 or x has a maximum value of 1/2.

0.5(1- jl A 2. o.srA2;p.:2 +f.l.2)

~2J Hence, X = 2 2) = ll +) 1 ~,.z;o,2 A + ~ A2 +

If w2 = + w A2 + 2' sine = -~

j2 (l + )1 - w2) The signs of sine and tan 29 in the range chosen for 9 are

the same. The sign of tan 29 is governed by the signs of A

and ~ . The proper value of sin9 will therefore be available

with the definitions,

-147-

Page 152: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

1

1

1

J

]

J

J

J

J

J

]

J

J

J

;\. w w = (sign of · 1-L ) -------, sine =

j ;\.2 +!J-2

The value of cose in the range is positive.

The advantages of this formulation are these:

1. sine and cose may be computed algebraically.

2. Even if !J. = 0 (and hence tan 2e is infinity), the

computations for sine and cose can be carried out

without difficulty in the computer.

.. 15. When the Identity Matrix is available by implication

only, the column exchanges, to match previous row exchanges

during reduction, must be performed.in reverse order. [See

SUBROUTINE t.fiNV (A IN I DET I NEXCH) ] •

With the availability of the I-t-latrix, tl:lis problem does

not arise as rows of I can also be interchanged during the

process itself.

When the !-matrix is not available, the Kth column of I is

available by implication only. When rows of A are inter-

changed, the net effect on I is that the corresponding rows

and columns of I are interchanged. Thus, if x1 is the trans­

formation matrix corresponding to the rm·T interchange, we

have

-148-

Page 153: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

400.4

at an intermediate stage of the reduction process and

at the final stage.

In short, I I -11 I I c '

Thus, SA = I or

] and A- 1x x ···x = c- 1 1 2 p

or A-1= c-1 -1 -1 -1 X • ··X X -1? 2 1

]

]

]

J '

] -149-

J

_]

Page 154: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

':J• ~4

!o;P.:] <,;

-.~.

··~.~ .. ,

"··

'] ~

"' d

APPENDIX 2

Listing of Subprograms

-159-

Page 155: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

I I

]

J

]

]

, . .a

]

J

]

]

J

J

]

1

FRITZ LABORATORY MATRIX PACKAGE CFLMXPK) ------------------------------- PAGE NO, 1 -------------------------------

SUBROUTINE ADO (A,a,c,:·bN) 1 c C AUTHOR - SAMPATH IYENGAR, FRITZ ENGIN~ERING LABORATORY, C L~HIGH UNIVERSITY, BETHLEHEM, PA, 18015. c C THIS GROUP OF SU8P~OGRA~S CFLMXPK - FRITZ LABOR~TORY M~TRIX C PACKAGE> CONTAINS 30 ROUTINES TO PERFORM MATRIX OPERATIONS, C FOR DETAILED OOCUM~NTATION, SEE FLMXPK - A MATRIX PACKAGE, C FRITZ LABORATO~Y RE~ORT NO, 400,4. c

c

COMMON /IYENGAR/ I,MN,YC12> REAL A C 1) , 8 C 1) , C C 1>

C ROUTINE TO ADO MATRICES A AND 8. C=A+B c

c

MN=M.~;~.N

00 1GOO I=1,MN 1000 CCI>=ACil+BCI>

RF:TU RN END

SUB~OUTINE OETMT CA,OA,N>

C ROUTINE TO FIND THE DETERMINANT OA OF MATRIX A, c

c

c

COMMON /IYENGAR/ I,IP1,J,M,NM1,T,TEMP,XX,YC6)

0!\=1.0 IF OJ.EQ.t> GO TO 1050 m11= N-1 DO 1040 I=1,NM1 IPi=I+i

C SEA°CH qow I FQq THE LA~GEST ABSOLUTE-VALUED C ELEMENT IN COLUMNS I TH~OUGH N. c

c

TEMP=O.O 00 1000 J=I,N T=AI3SCA(I,J)) IF CTEMP.GE.T> GO TO 1000 TEMP=T

C THE LARGEST ABSOLUTE-VALUED ELEMENT IS IN COLUM~ M OF ROW I. c

M=J 1000 CONTINUE

IF CTEMP,NE.O.Ol GO TO 1010 c C ALL THE ELEMENTS OF ROW I ARE IDENTICALLY ZERO. C DETERMINANT VANISHES. c

c

OA=O.O RETURN

C EXCHANGE COLUMNS M AND I, ONLY IF M IS DIFFERENT FROM I. c

1010 IF CM.EQ.I) GO TO 1030

2 3 4 5 6 7 8 g

10 11 12 13 14 15 15 17 1~

19 20

1 2 3 4 5 5 7 9 9

10 11 12 13 14 15 15 17 1·3 19 20 21 22 23 24 25 26 27 2.13 29 30 31 32 33 34 35 35 37

Page 156: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

I

FRITZ LABO~ATORY MATRIX PACKAGE CFLMXPK> ------------------------------- PAGE NO. 2 -------------------------------

c

DO 1020 J=I,N T=ACJ,MI ACJ,M>=ACJ,I>

1020 A(J,J>=T

C CHANGE THE SIGN OF TH~ DETERMINANT, C SINCE COLUMNS HAVE BEEN EXCHANGED. c

DA=-DA 1030 TEMP=A<I,I>

c C CONTINUOUS PART-P~OOUCT FOR THE DETERMINANT. c

DA=OA,..TEMP c C THE PROCESS OF REDUCTION TO AN UPPE~-TR.IANGULAR MATRIX. c

c

TEt~P=1. 0 /TEMP DO 1040 M=IP1,N' XX=- A CM, I> •TEMP 00 1040 J=IPi,N

1040 A(M,J)=A(M,J)+XX•Aci,J)

C FINAL VALUE OF THE JETERMINANT. c

1050 DA=DA,..A<N,N) RETURN EtW

33 3g 40 41 42 43 44 45 46 b7 48 49 so 51 52 53 54 55 5~

57 58 59 60 61 62 63 64-65

---------------------------------------------------------------------------SUBROUTINE QIAG C~1 DA,N>

c C ROUTINE TO CREATE A DIAGONAL MATRIX A. c

c

COMMON /IYENGAR/ I,NP1,NSQ,Y(11) REAL A<U

C ZERO THE ARRAY. c

NSQ=N'"N DO 1000 I=1,NSQ

1000 ACI>=O.O c C ASSIGN OA TO EACH DIAGONAL ELEMENT. c

N~1=N+1 00 1010 I=1,NSQ,NP1

1010 A<I>=DA RETURN END

1 2 3 4 5 6 7

g 10. 11 12 1"3 14 15

-15 17

• 1·g •1 g 20

-------------------------------------------------------------------------·--

Page 157: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l

]

]

]

]

1 ~

]

]

]

]

]

FRITZ LABORATORY MATRIX PACKAGE CFLMXPK> ------------------------------- PAGE NO. 3 -------------------------------

SUBROUTIN~ Ey tA,S,N> 1 c c c c

2 ~OUTINE TO FIND EIGENVALUES AND EIGENVECTORS 3 OF THE SYMMETRIC MATRIX 4. 4

5 CO~MON /IYENGAR/ AI 0 ,AIQ,APP 1 AQQ,COSSQ,COST,I,P,Q,QM1,SINSQ,SINT,T 6

1Et--IP, TSCT 7 EQUIVALENCE CAI::>,SIP,Y), CAIQ,SIQ), CP,IP1), (Q,J), CQ"H,NM1>, CTE 8

1MP,SIGN>, {THRI,SUM), <TSCT ,X) 9 LOGICAL INO 10 REAL ACN,N>,SCN,Nl 11 INT~GER P,Q,QM1 i~

c IF CN.EQ.1> GO TO 1010

c C CALCULATE TH~I, THE INITIAL THPESHOLD VALUE. C INITIALIZE MATRIX S AS THE IDENTITY MATRIX. c

c c c

c

SUM::O.O mlt=N-1 DO 1000 I::1,NM1 SCI,I>=t.O IP1::I+1 DO 1000 J::IP1,N T E i1 P :: A (! , J > SCI,Jl::O.b SCJ,I>-=0.0

1000 SUM=SUM+TEMP•TEMP TWU ::SQR T C SUM)

SET THE DESIRED ACCURACY <THRF>.

TH~F=THRI~1.0E-6 FN::N

C INITIALIZE INDICATOR IND. c

INO::. TRUE. 1010 SCN,N)::1.0

c ENTRY IEV

c C SUBROUTINE IEV CA,S,N> C ROUTINE TO IMPROVE EIGENVALUES AND EIGENVECTORS. c

IF CN.EQ.1> RETU~N IF CTHRI.EQ.O.O) RETURN

c C LOWER THE INITIAL THRESHOLD THRI, C SUCCESSIVELY BY DIVISION BY N. c

1020 THRI=THRI/FN c C ITERATION BEGINS HE~E. c

1030 DO 1050 Q=2,N QM1::Q-1 00 1050 P=1,QH1

13 14 15 16 17 1g 19 20 ? '

23 24 25 26 27 2<5 29 30 31 32 33 3 L;

3? 35 37 33 39 40 41 42 43 44 45 46 47 4:1 4'3 50 51 52 53 54

~~I 57' ?li

Page 158: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

I ; .l

!

' ! J

l .l.

1 l

J

1 i .•.

l. i 1.

, l

J

1

1

]

]

1 ]

]

1

FRITZ L~BORATORY MATRIX PACKAGE CFLMXPK) ------------------------------- PAGE NO. 4 -------------------------------· c 59 C TEST EACH OFF-DIAGONAL ELEMENT IN TURN. ~Q

c 51

c c c c

c c c

c c c c

1040 c c

·c

1050 c c c

c c c

X=-A CP,Ql IF <ABSCX) .LT.THRI> GO TO 1050

THE OFF-DIAGONAL ELEMENT IS NOT LESS THAN THRI IN ABSOLUTF VALUE. ANNIHILATE IT. RESET INDICATOR, SINCE A~NIHILATION IS N~C~SS~~v.

IND=.FALSE.

CALCULATE TRIGONOMETRIC FUNCTIONS.

APP=A CP,P) AQQ=ACQ,Ql Y=0.5""(APP-AQQ) SIGN=1.0 IF <Y.LT.O.O> SIGN=-1.0 TEMP=SI!,N~X/SQRTCX~X+Y~Y)

SINT=TEMP/SQRTC2.0~(1.0+SQRTC1.0-TEMP~TEHP)))

S Ii'-!SQ=SiiH"'SINT COSS 0=1. 0-SINSll COST=SQRTCCOSSQ) TSCT=-2.o~x~srNT~cosT

MODIFY ELEMENTS OF MATRICES A AND S ROW BY ROW. ALSO, TRANSPOSE TO MODIFY CORRESPONDING ROWS OF A.

DO 1040 I=1,N AIP=ACI,P> A IQ= A CI, Q)

TEMP=AIP~COST-AIQ~SINT

A(!, P> =TEMP A CP,!) =TEMP TEHP=AIP~SINT+AIQ~COST

A<I,Q>=TC::MP 1\(Q,I>=TEHP SIP=S<I,P> SIQ=SCI,Q> sci,P>=SIP~cosT-sra~siNT S(I,Q)=SIP""SINT+SI1~COST

EVALUATE FRESH ELEMENTS OF THE PIVOTAL SET.

ACP,P>=A0P~COSSQ+AQ1~S!NSQ-TSCT ACQ,Q)=AQQ•COSSQ+AP 0 •SINSQ+TSCT ACP,Q)=O.O ACQ,P>=O.O CONTINUE

CHECK WHETHER A REPEAT SHEEP IS NECESSARY.

IF ( INO) GO TO 1060

A REPEAT SHEEP IS NECESSARY.

IND=.TRUE. GO TO 1030

62 53 6l~

55

67 ..f>8 sg 70

·71 72 73 74 75 76 77 79 7S 30 8t 82 83 84 85 86 87 88 sg 9'i 91 92 g<

gr; 96 97 98 gg

100 101

.10 2 101 104

--105 106 107 108 iDS 110 111 112 11-::; 11L: 11 ::;: 11G

Page 159: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

1 ]

1 •

]

]

1

~

l ]

I ]

I ]

1 ]

]

]

]

FRITZ L480RATORY MATRIX PACKAGE CFLMXPK> ------------------------------- PAGE NO. 5 -------------------------------c c c

c c c c

1060

CHECK WHETHER THE DESIRED ACCURACY IS ~CHIEVEO.

IF <THRI.GE.THRF> GO TO 1020

RESET THRF TO BE IN READINESS FOR A SUBSEQUENT IMPROVEMENT PROCEDURE, IF ANY.

THRF=THRF~1.0~-6

RETURN END

117 118 119 120 121 122 123 12~

125 125 127

-------------------------------------------------------~-------------------SUBROUTINE GEVP CA,B,S,T,N>

c C ROUTINE TO SOLVE T~E GENERAL EIGENVALUE PROBLEM. C A~X=LAMBDA~B~X

c

c

COMMON /IYENGAR/ I,J,K,SUM,TEMP,YC9) REAL ACN,N),B(N,N),S(N,N),T(N)

C DIAGONALIZE MATRIX B. c

CALL EV (B,S,N> c C IMPROVEMENT PROCEDURE. c

CALL IEV CB,S,N> c C FORM THE MATRIX DROOUCT s~INVERSE OF G IN S. c

DO 1000 J=1 7 N TEMP=i.O/SQRTCB(J,J)) DO 1000 I=1,N

1000 S<I,J>=SCI,J>~TEMP c C MODIFY MATRIX A. c

CALL MULT CA,S,B,N,N,N> DO 1020 I=1,N DO 1020 J=I,N SUM=O.O DO 1010 K=1,N

1010 SUM=SUM+SCK,I>~BCK,J) A cr, J> =SUt1

1020 A(J,I>=SUM c C OBTAIN EIGENVALUES OF A. c

c

CALL EV (~,B,N)

CALL IEV CA,B,N)

C FORM THE MATRIX PRODUCT s~EIGENVECTO~ MATRIX C TO OBTAIN THE FINAL EIGENVECTORS. c

CALL POSTM CS,B,N,N,T) RETURN END

1 2 3 4 5 G 7 8 g

10 11 12 13 14 15 "' ,.. LO

17 18 19 20 21 22 23 2~

25 2S 27 28 29 30 31 32 33 34 35 36 37 38 39 4!J 41 42 lt 3 44 45

---------------------------------------------------------------------------

Page 160: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

FRITZ L.t\BOR.ATORY MATRIX PACKAGE (FL~1XPK>

---------~------~-------------- PAGE NO. 6 -------------------------------· SUBROUTINE HINV (A,N,DET,NEXCHl 1

c 2 C ROUTINE TO INVERT MATRIX A. 3 c 4

CO~MON /IYENGAR/ BIG,I,J,K,NM!,NP!,NR,T,Y(6) 5 REAL A(N,N) 6 INTEGER NEXCH(N) 7

c 8 IF <N.NE.U GO TO 1000 9 DET=A(1,1) 10 A<1,1>=1.0/DET 11 RETURN 12

1000 DET=1.0 13 NM1=N-1 14 DO 1070 K=1,N 15

c 16 C SEARCH COLUMN 1 FOR THE LARGEST ABSOLUTE-VALUED 17 C ELEMENT IN ROWS K THROUGH N. 18 c 19

BIG=O.O 20 DO 1010 I=K,N 21 T=ABS<A<I,1)) 22 IF <BIG.GE.T> GO TO 1010 23 BIG=T 24

c 25 C THE LA~GEST ABSOLUTE-VALUED ELEMENT IS IN ROW NR. 26 c 27

NR=I 28 1010 CONTINUE 29

c 30 C EXCHANGE ROWS NR AND K, ONLY IF NR IS DIFFERENT FROM K. 31 c 32

IF CNR.EQ.K> GO TO 1030 33 DO 1020 J=1,N 34 T=A<K,Jl 3? ACK,J>=A<NR,J> 36

1020 A<NR,J>=T 37 c 38 C CHANGE THE SIGN OF THE DETERMINANT~ 39 C SINCE ROWS HAVE BEEN EXCHANGED. 40 c 41

DET=-DET 42 c 43 C BOOK-KEEPING VECTOR NEXCH STORES THE INFORMATION ~44 C ABOUT ROW EXCHANGES. 45 c 46

1030 NEXCHCK>=NR -47 T=ACK,1) '48

c C CONTINUOUS PART-PRODUCT FOR THE DETERMINANT.

49 50 51 52 53 54 55 56 57 58

c

c

DET=DET•T T=1.0/T

C MODIFY ROW K BY DIVISION BY THE PIVOT ELEMENT. c

DO 1040 J=1,NH1 1040 ACK,Jl=A<K,J+l>~T

Page 161: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

"1 l

_j

]

-1 J,

1

"I

]

J

l ]

)

l

.•

·~

FRITZ LABORATORY MATRIX PACKAGE CFL~XPK)

------------------------------- PAGE NO. 7 -------------------------------

c c G c

1050

1060 1070

c c c c c

c c c

c

1080 1090

1000

ACK,N>=T

MODIFY ALL ROWS OTHER THAN ROW K BY ADDITION OF SUITA9LE MULTIPLES OF ROW ~·

DO 1060 I=1,N IF CI.EQ.K> GO TO 1060 BIG=-A<I,1> DO 1050 J=1,NH1 ACI,J>=AC!,J+i)+BIG~ACK,JJ

A (I, N> =BIG~T CONTINUE CONTINUE

PER~ORM COLUMN EXC4ANGES TO MATCH PREVIOUS ROW ~XCHANGES

CIN REVERSE ORDER>. NOTE THAT NEXCHCN>=N, ALWAYS. HEN~€,

K IS NOT ALLOWED TO ASSUME THE VALUE N IN THE FOLLOWINS CO-LOOP.

NP1=N+1 00 1090 J=2,N K=NP1-J NR=NEXCHCK> IF CNR.EQ.K> GO TO 1090 DO 1080 I=1,N T=ACI,Kl ACI,K>=A<I,NR> A<I,NR>=T CONTINUE RETURN END

SUBROUTINE HOVE CA,B,H,N> _.;

ROUTINE TO COPY MATRIX A AS MATRIX B. O=A

,---coMr10N /IYENGAR/ I,MN,YC12) \

\REAL AC1),BC1J -. -HN=M~_N- '

I

DO 1000 __ I= 1 t.._M~~ j __., !'

B!I>=A<I> C' c /; RETURN END

5g so 51 52 63 64 65 6~ 57 6!3 E)g 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 135 87 88

-i _..

2 3 4 5 6 7 8 9

10 11 12

---------------------------------------------------------------------------

Page 162: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

.1

]

j

J

J

I 'J J

l I

I

I

I

]

l ]

FRITZ LABORATORY MATRIX PACKAGE <FV1XPK) ------------------------------- PAGE NO. 8 -------------------------------

c c c

c

1000 1010

SUSROUTIN~ HULT CA,G,C,L,H,N)

ROUTINE TO FORM THE PRODUCT OF MATRICES A AND B. C=A~B

COMMON /IYENGAR/ I,J,K,SUM,YC10) REAL ACL,H> ,BCH,tH ,CCL,Nl

DO 1010 I=1,L DO 1010 J=1,N SUN=O.O DO 1000 K=1,H SUM=SUM+ACI,K>~B<K,J)

CCI,J>=SUM RETURN END

1 2 3 4 5 6 7 8 g

·'UJ 11 12

"'13 14 15

---------------------------------------------------------------------------

c

SUBROUTINE OUTE <A,I,J,TITLE,TITEL> C011MON /IYENGAR/ II,IMAX,IROH,IV(2) ,I1,JCOL,JJ,.JMAX,J1,J2,KK,YC2l REAL A CI,J>

C ROUTINE TO PRINT MATRIX A IN E-FORMAT. C STORE E IN IVC2> FOR E-FORHAT OUTPUT. c

IV<2>=10HO{XE12.5}) c C JMAX = NUMBER OF VE~TICAL PARTITIONS OF THE MATRIX. c

1000 JMAX=CJ+9)/10 c C !MAX = NUMBER OF HORIZONTAL PARTITIONS OF THE MATRIX. c

c c c c

c c c c

c c c

c c

IHAX=<I+24)/25 IV<1>=10HC1HO,I4,X1 Y(1>=10H YC2>=10H 00 1020 JCOL=1 7 JMAX

PRESCRIBE THE FIRST (J1) AND LAST (JJ) COLUMN NUMBERS TO BE PRINTED ON THE PAGE.

JJ=10~JCOL

Ji=JJ-9 IF <J.LT.JJ) JJ=J 00 1020 IROW=i,IMAX

PRESCRIBE THE FIRST CI1l AND LAST <II> ROW NUMBERS TO BE PRINTED ON THE PAGE.

II=25li'IROW I1=II-24 IF CI.LT.II> II=I

LABEL TH~ OUTPUT, INDICATE MATRIX SIZE AND NUM9~R THE COLUMNS.

PRINT 1030, TITLE,TITEL,Y,I,J, CKK,KJ<:J1,JJ) 00 1010 KK-=!1,!!

NUMBE~ THE ROWS AND PRINT ELEMENTS OF THE HATRIX.

1 2 3 4 5 6 7 8 q

10 11 .. .... ..LC

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

- 2 3 29 30

-. 31 32 33 34 35 36 37 38 3g 40 41 42

Page 163: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l ]

L

I

I.

r 1:

I.

I.

1:

l 1 J

FRITZ LABO~ATORY MATRIX PACKAGE CFLMXPK) ------------------------------- PAGE NO. 9 -------------------------------C 43

1010 PRINT IV, KK,CACKK,J2),J2=J1,JJ) 44 YC1)=10H <CONTINUE 45

1020 Y (2) =10H0) 46 RETURN 47

c 48 c 49

ENTRY OUTF 50 c 51 C SUBROUTINE OUTF CA,I,J,TITLE,TITEL) 52 C ROUTINE TO PRINT MATRIX A IN F-FORMAT. 53 C STORE F IN IVC2) FO~ F-FORMAT OUTPUT. 54 c 55

IV<2>=10HO<XF12.5l) 56 GO TO 1000 57

c 58 c 59

ENTRY OUTG 61J c 61 C SUBROUTINE OUTG (A,I,J,TITLE,TITEL) 62 C ROUTINE TO PRINT MATRIX A IN G-FORMAT. 63 C STORE G IN IVC2> FOR G-FORMAT OUTPUT. 64 c 65

lVC2l=10HOCXG12.5l) 66 GO T0.1000 67

c 68 c 69

1030 FORMAT C1H110X4A10/1H010X4HSIZEI4,8H ROWS BYI4 7 8H COLUMNS/2HO 10!1 7C 13) 71

END 72

SUBROUTINE PMULT CA,B,K,L,X> c 2 C ROUTINE TO FORM THE MATRIX PRODUCT A~B IN A WHEN 8 IS SQUARE. 3 c 4

COMMON /IYENGAR/ I,J,M,SUM,Y<10l 5 REAL ACK,L>,BCL,U,XCL> 6

c 7 DO 1020 I=1 7 K ~

c 9 C GENERATE ELEMENTS OF I-TH ROW OF PRODUCT MATRIX 10 C AND STORE THESE IN VECTOR X. 11 c 12

00 1010 J=1 7 L 13 SUH=O.O 14 DO 1000 H=1,L 15

~000 SUM=SUM+ACI,Hl~B(M,J) 16 1010 XCJl=SUH 17

c 18 C REPLACE THE I-TH ~OW OF A BY THE VECTOR X. 19 c 20

DO 1020 J=1,L 21 1020 ACI,J>=XCJ> 22

RETURN 23 END 24

-------------------------~-------------------------------------------------

Page 164: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l l

.. j: ' '

J

FRITZ LABORATORY MATRIX PACKAGE CFLMXPK) ------------------------------- PAGE NO. 10 -------------------------------·

SUBROUTINE POSTM CA,B,K,L,X> 1 c 2 C ROUTINE TO FORM THE MATRIX PRODUCT A•B IN B WHEN A IS SQUARE. 3 c 4

COMMON /IYENGAR/ I,J,M,SUH,Y(10) 5 REAL ACK,K),B(K,U,XCK) 6

c 7 DO 1020 J=1,L 8

c .. g C GENERATE ELEMENTS OF J-TH COLUMN OF PRODUCT MAT~IX 10 C AND STORE THESE IN VECTOR X. 11 c 42

DO 1010 I=1,K 13 SUH=O.O 14 DO 1000 M=1,K 15

1000 SU~=SUM+ACI,M>•B<M,J) 16 1010 XCI>=SUM 17

c 18 C REPLACE THE J-TH COLUMN OF B BY VECTOR X. 19 c 20

c c c c

c

c c

c

00 1020 I=1,K 21 1020 BCI,J>=X<I> 22

RETURN 23 END 24

SUBROUTINE RDCBC CA,M,N)

~OUTINE TO READ I~ VALUES FOR ELEMENTS OF MATRIX A, COLUMN BY COLUMN.

COMMON /IYENGAR/ I,J,Y<12l REAL ACM,N)

DO 1000 J=1,N 1000 READ 1010, CACI,J>,I=1,H>

RETURN

1010 FORMAT C8F10.0) END

SUBROUTINE RDCOLG (A,H,N>

1 .2 3 4 5 6 7 8 g

10 11 12 13 14 15

C ROUTINE TO READ IN VALUES FOR ELEMENTS OF MATRIX A,

1 2

. 3 4 C COLUMN BY COLUMN IN A CONTINUOUS STRING OF COLUMNS.

c

c

c c

COMMON /IYENGAR/ YC14) REAL ACM,N)

REAO 1000, A RETURN

1000 FOR~AT C8F10.0) END

• 5 . 6

7 8 g

10 11 12 13 14

---------------------------------------------------------------------------

Page 165: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l ] I

J

J

l

J

·-

FRITZ LA90~AT0RY MATRIX PACKAGE CFLMXPK) ------------------------------- PAGE NO. 11 -------------------------------

SUBROUTINE RDRBR CA,M,N) 1 c 2 C ROUTINE TO READ IN VALUES FOR ELEMENTS OF MATRIX A, 3 C ROW BY ROW. 4 c 5

c

c c

COMMON /IYENGAR/ I,J,Y{12> REAL ACM,N)

DO 1000 I=1,H 1000 READ 1010, CACI,Jl,J=1,N)

R.ETU RN

1010 FORMAT C8F10.0) END

5 7 3 g

10 11 12 13 !4 1?

---------------------------------------------------------------------------SUBqOUTINE RGROWG CA,M,N>

c C ROUTINE TO READ IN VALUES FOR ELEMENTS OF MATRIX C ROW BY ROW IN A CONTINUOUS STRING OF ROWS. c

c

c c

c

CO~MON /IYENGAR/ I,J,YC12> REAL ACM,N>

READ 1000, {{ACI,J>,J=1,N>,I=1,Hl RETURN

100Q FORMAT C8F10.0> END

SUBROUTINE SCMUL CA,M,N,X>

A,

C ROUTINE TO MULTIPLY MATRIX A BY THE SCALAR QUANTITY X. C A = X TIMES A c

c

COMMON /IYENGAR/ I,MN,YC12> REAL A(1}

HN=MJS.N DO 1000 I=1,MN

1000 ACI>=Xli-A(!) RETURN END

1 2 3 4 5 5 7 8 g

10 11 i2 13 14

1 2 3 4 5 5 7 8 g

10 11 12 13

Page 166: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

j

J

J

J

J

l

l

]

1

FRITZ LABORATORY MATRIX PACKAGE tFLMXPK) ------------------------------- PAGE NO. 12 -------------------------------

c c c c

c

c c c

c c c c c c c

1000

1010

1020

c c c

c c c

c c c c

c c c

1030

10·40

1050

SU9ROUTINE SINV <A,DA,N)

ROUTINE TO FINO THE INV~RSE OF A SYMMETRIC, POSITIVE-DEFINITE M~TRIX A.

COMMON /IYENGAR/ I,IFIN,INOEX,INIT,J,JP1,K,SUM,TEMP,YC5) REAL A< N, N)

IF (N.NE.U GO TO 1020 DA=A (1,1> A<1, 1>=1.0/DA RETURN

BUILT-IN SUBPROGRAM~

SUM=O.O DO 1010 K=INIT,IFIN SUM=SUMtACI,K)•ACJ,K) GO TO INDEX, <1040 7 1050,1070,1080)

GEN~RATE MATRIX LAMBDA CA=LAMBOA•LAMBOA TRANSPOS~>. NOTE - ONLY THE DIAGONAL ELEMENTS ARE THOSE OF LAMBDA-INVERSE-TRANSPOSE CL!T).

(1,1) ELEMENT OF LIT.

DA=1.0/SQRTCAt1,1)) AC1,1>=DA

FIRST COLUMN OF LAMBDA.

00 1030 I=2,N ACI,1>=AC1,I>•DA INIT=1 DO 1050 J=2,N ASSIGN 1040 TO INDEX IFIN=J-1 I=J GO TO 1000

J-TH DIAGONAL ELEMENT OF LIT <2 .u:. J .LE. N> •

TEMP=1.0/SQRTCACJ,J)-SUM) A CJ, J) =TEMP~

CONTINUOUS PART-PRODUCT FOR THE RECIPROCAL OF THE SQUARE ROOT OF THE DETERMINANT.

OA=DA""TEMP IF (J.EQ.N) GO TO 1050 ASSIGN 1050 TO INDEX JP1=J+1 00 1050 I=JP1,N GO TO 1000

J-TH COLUMN OF LAMBDA <2 .LE. J .LE. N-1).

ACI,Jl=tACJ,I)-SUH>""TEMP

1 2 3 4 5

7 8 g

" 10 11 12

..-11 14 15 16 17 18 19 20 21 22 23 24 25 25 27

29 30 31 32 33 34 35 35 37 38 39 40 41 42 43

- 44 ·4s

46 .. . 4 7

4.'3 4g 50 51 52 53 54 55 55 57 58

Page 167: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

I

J

]

J

FRITZ L~BORATORY MATRIX PAC~AGE CFLMXPK) ------------------------------- PAGE NO. 13 -------------------------------1060 ASSIGN 1070 TO INDEX 59

c so C FINAL VALUE OF THE DETERMINANT. 51 c 62

DA=D A~OA 6 3 OA=1. 0/DA 64

c 65 C GENERATE OFF-DIAGONAL ELEHENTS OF LIT. 66 c 67

DO 1070 I=2,N 68 IFIN=I-1 69 TEHP=A<I,I) 70 00 1070 J=1 1 IFIN 71 INIT=J 72 GO TO 1000 73

1070 ACJ,Il=-SUM~TEHP 74 ASSIGN 1080 TO INDEX 75 IFIN=N 76

c 77 C FOR~ THE PRODUCT LIT~INVERSE OF LAMBIJA. 78 C RESULT IS INVERSE OF THE ORIGINAL MATRIX A. 79 c 80

DO 1090 I=1,N 81 INIT=I 82 DO 1090 J=1,I 83 GO TO 1000 84

1080 ACI,J>=SUM 85 1090 A(J,I>=SUM ~6

RETURN 8 7 END 88

---------------------------------------------------------------------------c c c c

c

c

SUBROUTINE SOLVE CA,B,N,L,DET>

ROUTINE TO SOLVE THE SYSTEM OF LINEAR SIMULTANEOUS EQUATIONS A~X=B~

COMMON /IYENGAR/ A8SA,BIG,O,I,IJK,IP1,J,K,NM1,Y(4) ,z REAL ACN,N>,BCN,L>

IF {N.NE.U GO TO 1010 DET=A(1,1) DO 1000 J=1,L

1000 9C1,Jl=BC1,J)/DET RETURN

1010 Nt11=N-1 DET=1.0 DO 1070 I=1,NH1 IP1=I+1

C SEARCH COLUMN I FOR THE LARGEST ABSOLUTE-VALUED C ELEMENT IN ROWS I THROUGH N. c

c

BIG=O.O DO 1020 J=I,N ABSA=ABSCA<J,Il) IF <BIG.GE.ABSA) GO TO 1020 BIG=ABSA

1 2 3 4 5

7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Page 168: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

J

l I

I

l

1 ]

~RITZ L~BORATORY HATRIX PACKAGE CFLMXPK) ------------------------------- PAGE NO. 14 -------------------------------c THE LARGEST ABSOLUTE-VALUED ELEMENT IS IN ROW K OF COLU~N I. 28 c

1020 c c c

1030

K=J CONTINUE

EXCHANGE ROWS K AND I, ONLY IF K IS DIFFERENT FROM I.

IF C K. EQ.!) GO TO 1050 DO 1030 J=I,N Z=ACI,J) A<I,J>=ACK,Jl ACK,J>=Z DO 1040 J=1,L Z=BCI,J> BCI,Jl=BCK,J)

1040 B<K,J>=Z c C CHANGE THE SIGN OF THE DETERMINANT, C SINCE ROWS HAVE BEEN EXCHANGED. c

DE T=-DET 1050 Z=ACI,I>

c C CONTINUOUS PART-PRODUCT FOR THE OETERMINANT. c

c c c c

c

DET=DET""Z Z=1.0/Z

MODIFY ELEMENTS OF A - THE REDUCTION PROCESS. MODIFY MATRIX 8 ALSO.

00 1070 K=IP1,N 0=-ACK,I>•Z 00 1060 J=i,L

1050 BCK,J>=B<K,J)+D•BCI,J) 00 1070 J=IPi,N

1070 ACK,J>=~(K,Jl+D•A(I,J) Z=ACN,N)

C FINAL VALUE OF THE ryETERMINANT. c

c

OET=DET• Z Z=1.0/Z

C PROCESS OF BACK-SUBSTITUTION TO GET THE SOLUTION MATRIX. c

00 1090 K=1,L BCN,K>=B<N,K)""Z 00 1090 IJK=1,NH1 I=N-IJK IP1=!+1 0=0.0 DO 1080 J=IP1,N

1080 O=O~ACI,J>•BCJ,Kl 1090 B<I,Kl=CBCI,Kl-0)/ACI,Il

RETURN END

29 30 31 32 33 34 35 35 .. 37 3~3"'

;39 40 41 4~ 43 44 45 46 47 48 49 51J 51 52 5? 54 55 55 57 58 5S 60 61 62 6 ",' 61, 55 66 67 68 69 70

' 71 72 73

-. 7 4 75 76 77 78 79 80 81 82 8:3 8Ll-

---------------------------------------------------------------------------

Page 169: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

1

1

1.

] •

J ~

J

I ]

]

I

l

I.

l

l

1 1' l

)

FRITZ LABORATORY MATRIX PACKAGE (FL~XPKl

------------------------------- PAGE NO. 15 -------------------------------

c c c

c

c c c

SUBROUTINE SQTR (A,N) 1

ROUTINE TO TRANSPOSE THE SQUARE MATRIX A IN ITS OWN SPACE.

COMMON /IYENGAR/ I,INCR,K,L,LAST,NM1,NP1,T,Y(6) REAL A ( 1)

IF <N.EQ.1) RETURN NN1=N-1 NP1=N+1 LAST:::N.v-N INCR=O DO 1000 K=2,N LAST=LAST-N INC~=INCR+NM1 00 10GO L=K,LAST,NP1 I=L+INCR.

EXCHANGE ELEMENTS WITH SUBSCRIPTS I AND L.

2 3 i+ 5 6 7 8 g

10 _,, . ... .:..

12 13 14 15 16 17 18 1q

1000

T= A (I)

ACH=A<L> A<U =T Rt:TURN END

20 21 22 23 2i+ 25

c c c

c

SUBROUTINE SUB CA,9,C,M,N)

ROUTINE TO SUBTRACT MATRIX B FROM MATRIX Ao C=A-B

COMMON /IYENGAR/ I,MN,Y(12) REAL A<1>,B<U,C(1)

MN=M•N DO 1000 I=1,MN

1000 CCI>=A<I>-BCI) RETURN END

1

:-~

4 5 6 7

8 g

10 11 12

---------------------------------------------------------------------------. ·.·~ .. S'UBROUTINE TMULT CA,B,C,L,H,N) 1

c 2 C ROUTINE TO FORM THE MATR.IX PRODUCT OF <TRANSPOSE OF MATRIX A> 3 C AND MATRIX B. C=<TRANSPOSE OF A>•B 4 c 5

COMMON /IYENGAR/ I,J,K,SUM,Y(10) 6 REAL ACL,Ml,BCL,Nl,CCM,Nl 7

c 8 DO 1010 I=1,M 9 DO 1010 J=1,N 10 SUM=O.O 11 DO 1000 K=1,L 12

1000 SUM=SUM+A(K,Il~BcK,J) 13 1010 C<I,Jl=SUM 14

RETURN 15 END 16

---------------------------------------------------------------------------

Page 170: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

]

]

]

1 j

J

..,

J

l j

l j

FRITZ LABORATORY MATRIX PACKAGE CFL~XPK)

------------------------------- PAGE NO. 15 -------------------------------SUB~OUTINE TRANS CA,B,~,N> 1

c 2 C ROUTINE TO TRANSPOSE MATRIX A. B=TRANSPOSE OF A 3 c 4

COMMON /IYENGAR/ I,J,YC12l 5 REAL A(H,N),B(N,M) 5

c 7 00 1000 I=1,M DO 1000 J=!,N

1000 BCJ,I>=ACI,J> RETURN END

g .. 10

11 .--12

---------------------------------------------------------------------------SUBP.OUTINE XABATC CA,B,C,L,M,X) c C ROUTINE TO FORM THE ~ATRIX PRODUCT C A~B•<TRANSPOSE OF A> WHEN 8 IS SYMMETRIC. c

c

c

COMMON /IYENGAR/ r,J,K,SUM,YC10) REAL ACL,M> ,BCM,M) ,CCL,L) ,XCM)

DO 1030 I=1,L

C GENERATE ROW I OF PART-PRODUCT A~B IN VECTOR X. c

c

DO 1010 J=1,M SUM=O.O DO 1000 K=!,M

1000 SUM=SUH+A(I,K>~B(K,J> 1010 XCJ>=SUH

C PRODUCT MATRIX C IS SYMMETRIC, SINCE MATRIX 8 IS SYMMETRIC. C GENeRATE PRODUCT HAT~IX. c

00 1030 J=I,L SUM=O.O 00 1020 K=1,M

1020 SUM=SUM+X(K}~ACJ,K) C CJ, Il =SUM

1030 C<I,J>=SUM RETURN END

1 2 3 4 5 5 7 8 g

10 11 12 13 14 15 15 17 13 19 20 21 22 23 24 25 26 27 28 29

---------------------------------------------------------------------------

Page 171: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

l J l

1

J ]

]

l

1

1 .l

l

-\o

FRITZ LABORATORY MATRIX PACKAGE CFL~XPK> ------------------------------- PAGE NO. 17 ------------------------------. SUBROUTINE XABTA CA,B,L,N,X) c C ROUTINE TO FORM TY~ MATRIX PRODUCT C A'~-CTRANSPOSE OF Bl IN A WHEN B IS SQUARE. c

COMMON /IYENGAR/ I,J,K,SUM,YC10) REAL ACL,Nl,BCN,Nl,XCN>

c

c C GENERATE ROW I OF PRODUCT MATRIX IN VECTOR X. c

DO 1010 J=1,N SUM=O.O DO 1000 K=1,N

1000 SUM=SUM~ACI,K>•B<J,K) 1010 XCJ>=SUM

c C REPLACE ROW I OF MATRIX A BY VECTOR x. c

DO 1020 J=1,N 1020 ACI,Jl=X(J)

RETURN END

E I (

<::

1C 11 12 13 14 .15 16 17 113 1S 20 21 22 23 24----------------------------------------------------------------------------SUSqOUTINE XABTC CA~B,C,L,M,N>

c C ROUTINE TO FORM THE MATRIX PRODUCT C A4 CTRANSPOSE OF 8) c

c COMMON /IYENGAR/ r,J,K,SUM,YC10) REAL ACL,M),3CN,M),CCL,N)

DO 1010 I=1,L DO 1010 J=1,N SUM=O.O 00 1000 K=1,M

1000 SUM=SUM+ACI,K>•BCJ,K) 1 0 1 0 c (I, J) = su ti

RETURN END

1 2 3 4 5 5 7 8 g

10 11 12 13 14 1'5 15 ---------------------------------------------------------------------------

Page 172: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

--···-u.--~-

. 4 FRITZ L4BO~ATORY MATRIX PAC~~GE CFLMXPK> • ------------------------------- PAGE NO. 18 -------------------------------

)

l

l

l ., \

SUBROUTINE XATBAC CA,B,C,L,M,X> 1 2·

ROUTINE TO FORM THE MATRIX PRODUCT 3 <TRANSPOSE OF A>•A•A WHEN B IS SYMMETRIC. 4

c c c

5 c COMMON /IYENGAR/ I,J,K,SUH,Y(10) G REAL A<L,Ml,BCL,Ll,CCM,H>,XCL) 7

8 c DO 1030 J=1,M 9 ,0

11 12 f3 14 15 15 17' 18 19 20 21 22 23 24 25 26 27 2e 29

c c c

c c c c

1000 1010

GENERATE COLUMN J OF PART-PRODUCT s•A IN VECTOR X.

DO 1010 I=1,L SUH=O.O DO 1000 K=1,L SUH=SUM+BCI,K>•ACK,Jl X<I>=SUH

PRODUCT MATRIX C IS SY~METRIC, SINCE HATR!X B IS SYMM~TRIC. GENERATE PRODUCT MATRIX.

DO 1030 I=1,J SUM= 0. 0 DO 1020 K=1,L

1020 SUM=SUM+ACK,I>•X<K> C (!, Jl =SUt1

1030 C(J,Il=SUM RETURN END

---------------------------------------------------------------------------c C ROUTINE TO FORM TH~ MATqix PRODUCT C <TRANSPOSE OF A>•B IN B WHEN A IS S~UARE. c

c

c

COMMON /IYENGAR/ I,J,K,SUM,YC10) REAL ACL,L> ,B<L,N> ,XCL)

00 1020 J=1,N

C GENERATE COLUMN J OF PRODUCT MATRIX IN VECTOR X. c "

c

00 1010 I=i,L SUM=O.O DO 1000 K=1,L

1000 SUM=SUM+ACK,I>•BCK,J) 1010 XC!)=SUM

C REPLACE COLUMN J OF MATRIX B BY VECTOR X. c

DO 1020 I=1,L 1020 B(!,J):X(Il

RETURN END

1 2 3 4 5· 6~ 7 8 9

10 11 12 13

'14 ~15

16 <17

18 19 20 21 22 23 24

---------------------------------------------------------------------------

Page 173: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

"'1 j 400.4

]

]

] "

J I ! --.

l

i I I

I I

I

ACKNO\'lLEDG.MENTS

This documentation has been prepared at the Fritz

Engineering Laboratory, Department of Civil Engineering,

Lehigh University, Bethlehem, Pennsylvania. Dr. David A.

VanHorn is the Chairman of the Department, and Dr. Lynn s.

Beedle is the Director of the Laboratory.

By his appointment as a member of the Computer

Systems Group in Fall 1968, Hr. Iyengar had the opportunity

to peruse and debug several programs written by fellow

research workers in the Laboratory. Dr. Celal N. Kostem

is the Chairman of the Group.

Many colleagues have contributed useful suggestions

which now form parts of this work. Mr. Ed\vard T ~ Manning,

Jr. was associated with Mr. Iyengar in the development of

the earlier version (FCMXPK} of this package.

A special debt of gratitude is due to Mrs. Michele

Kostem who patiently read through the manuscript and typed

the draft copy.

Sincere appreciation is extended to Mrs. Mary C.

Ambrose who typed the final copy, assisted by Mrs. Ruth

A. Grimes.

-169-

Page 174: j.digital.lib.lehigh.edu/fritz/pdf/400_4.pdf ·  · 2012-08-012.15 SUBROU'l'INE SOLVE(A,B,N,L,DET) 77 2.16 SUBROUTINE SQTR(A,N) 80 . J ... (FORTRAN Callable Matrix Package) was written

.... -.~- ...... ~·

-~. j

-":11

,J I

"~ j

]

IJ I]

]

]

]

1 ]

1 ]

]

1

400.4

REFERENCES

1. Ralston, Anthony and \'lilf, Herbert s. (Eds) MATHEHATICAL NETHODS FOR DIGITAL COMPUTERS John Wiley and Sons, Inc., New York, 1960

2. Control Data Corporation CONTROL DATA 6000 SERIES CO~WUTER SYSTEMS SCOPE 3.3 REFERENCE MANUAL (60305200B) Sunnyvale, California, 1971

3. Lehigh University Computing Center COMPUTING NOTICE, APRIL-MAY 1971 Bethlehem, Pennsylvania, Nay 1971

4. Wylie, C. R., Jr. ADVANCED ENGINEERING MATH~~TICS IvlcGraH-Hill Book Company New York, 1965

-170-

.-