.qa Linpack__library .ts +10,+10,+10,+10,+10,+10 .p Subroutines for the direct solution of systems of linear equations ( Gauss elimination methods ). .qb General__subroutines .p A brief description of the subroutine naming convention is given below. A more complete description is under each matrix form. The specification code that describes the computations done by a specific subroutine has the form TXXYY. .qc T .nf .keep lines * The first letter, T, denotes the matrix data type. T Definition --------------------------- S Real D Double Precision C Complex Z Complex*16 .qc XX * The next two letters, XX, indicate the form of the matrix or its decomposition. XX Definition -------------------------------------- GE General GB General Band PO Positive Definite PP Positive Definite Packed PB Positive Definite Band SI Symmetric Indefinite SP Symmetric Indefinite Packed HI Hermitian Indefinite HP Hermitian Indefinite Packed TR Trianguar GT General Triangular PT Positive Definite Tridiagonal CH Cholesky Decomposition QR Orthogonal-triangular Decomposition SV Singular Value Decomposition .qc YY * The final two letters, YY, indicate the computation done by a particular subroutine. YY Definition ---------------------------------------------------- FA LU Factorization CO Factorization and estimation of the Condition Number SL Solution by back substitution DI Determinant and/or Inverse and/or Inertia computation DC Decomposition UD Update DD Downdate EX Exchange .f .qc example .i5;Example: .p A call to DGEFA would generate a double precision LU factorization to a general matrix that has no special form. A subsequent call to DGESL would solve the system of equations using the factorization returned by DGEFA. .qb Subroutines .nf The subroutines are classified by data type. .qc parameters A(LDA,N) = Matrix B(N) = Vector Input: Right hand side of eqn Ax = B Output: Solution IPVT(N) = Pivot information to reconstrict permutations RCOND = Estimate of reciprocal condition Z(N) = Work space=null vector if A is singular WORK(N) = Work space INFO = 0 means all OK JOB = Variable specifying job .qc GE General matrices .s ML = Number of diagonals below main diagonal MU = Number of diagonals above main 0 <= ML <= MU <=N SGECO(A,LDA,N,IPVT,RCOND,Z) Input: A,LDA,N Output: A,IPVT,RCOND,Z SGEFA(A,LDA,N,IPVT,INFO) Input: A,LDA,N Output: A,IPVT,INFO SGESL(A,LDA,N,IPVT,B,JOB) Input: A,LDA,N,IPVT,B,JOB Output: B JOB = 0 Ax = b is computed = 1 A(transpose)x= b is computed SGEDI(A,LDA,N,IPVT,DET,WORK,JOB) Input: A,LDA,N,IPVT,WORK,JOB Output: A,DET JOB = 10 Determinant only = 1 Inverse only .qc SB SSBCO(A,LDA,N,ML,MU,IPVT,RCOND,Z) Input: A,LDA,N,ML,MU Output: A,IPVT,RCOND,Z SSBFA(A,LDA,N,ML,MU,IPVT,INFO) Input: A,LDA,N,ML,MU, Output: A,IPVT,INFO SSBSL(A,LDA,N,ML,MU,IPVT,B,JOB) Input: A,LDA,N,ML,MU,IPVT,B,JOB Output: B JOB = 0 Ax = b is computed = 1 A(transpose)x= b is computed SSBDI(A,LDA,N,IPVT,DET,WORK,JOB) Input: A,LDA,N,IPVT,WORK,JOB Output: A,DET JOB = 10 Determinant only = 1 Inverse only .qc PO PO Positive Definite SEE - PP .qc PP PP Positive Definite Packed SPPCO(A,LDA,N,RCOND,Z,INFO) Input: A,LDA,N Output: A,RCOND,Z,INFO SPPFA(A,LDA,N,INFO) Input: A,LDA,N Output: A,INFO SPPSL(A,LDA,N,B) Input: A,LDA,N,B Output: B SPPDI(A,LDA,N,DET,JOB) Input: A,LDA,N,JOB Output: A,DET JOB = 10 Determinant only = 1 Inverse only .qc PB M = Number of diagonals above main diag 0 <= M <= N SPBCO(A,LDA,N,M,RCOND,Z,INFO) Input: A,LDA,N,M Output: A,RCOND,Z,INFO SPBFA(A,LDA,N,M,INFO) Input: A,LDA,N,M Output: A,INFO SPBSL(A,LDA,N,M,B) Input: A,LDA,N,M,B Output: B SPBDI(A,LDA,N,M,IPVT,DET) Input: A,LDA,N,M,IPVT,WORK,JOB Output: DET .qc SI SI Symmetric Indefinite SEE - HP .qc SP SP Symmetric Indefinite Packed SEE - HP .qc HI HI Hermitian Indefinite SEE - HP .qc HP HP Hermitian Indefinite Packed SHPCO(A,LDA,N,IPVT,RCOND,Z) Input: A,LDA,N Output: A,IPVT,RCOND,Z SHPFA(A,LDA,N,IPVT,INFO) Input: A,LDA,N Output: A,IPVT,INFO SHPSL(A,LDA,N,IPVT,B) Input: A,LDA,N,IPVT,B Output: B SHPDI(A,LDA,N,IPVT,DET,INERT,WORK,JOB) Input: A,LDA,N,IPVT,WORK,JOB Output: A,DET,INERT JOB = 100 Compute inertia only = 10 Determinant only = 1 Inverse only INERT(3) = Inertia of A, number of +,-,0 eigenvalues .qc TR TR - Triangular matrices STRCO(A,LDA,N,RCOND,Z,JOB) Input: A,LDA,N,JOB Output: RCOND,Z JOB = 0 lower triangular part used = 1 upper triangular part used STRSL(A,LDA,N,B,JOB,INFO) Input: A,LDA,N,B,JOB Output: B,INFO JOB = 00 Ax = b is computed = 10 A(transpose)x= b is computed = 0 lower triangular = 1 upper triangular STRDI(A,LDA,N,DET,JOB,INFO) Input: A,LDA,N,JOB Output: A,DET JOB = 100 Determinant only = 10 Inverse only = 0 lower triangular = 1 upper triangular .qc GT GT General Triangular SEE - PT .qc PT GT General Triangular SPTSL(N,C,D,E,B,INFO) Input: N,C,D,E Output: B C(N) = Subdiagonal D(N) = diagonal E(N) = superdiagonal PT Positive Definite Tridiagonal SPTSL(N,D,E,B) .qc CH Cholesky decomposition SCHDC(A,LDA,N,WORK,IPVT,JOB,INFO) Input: A,LDA,N,WORK,IPVT,JOB JPVT(K) < 0 A(K,K) is an initial element JPVT(K) = 0 A(K,K) is a free element JPVT(K) < 0 A(K,K) is a final element JOB = 0 No pivoting = 1 pivoting Output: A,IPVT,INFO Update the decomposition SCHUD(A,LDA,N,S,Z,LDZ,NZ,Y,RNO,C,S) Input: A,X,Z,Y,RHO,C,S A(LDA,N) X(N) Z(LDZ,NZ) Y(NZ) RHO(NZ) C(N) S(N) Output: R,Z,RHO,C,S SCHDD(A,LDA,N,X,Z,LDZ,NZ,Y,RHO,C,S,INFO) SCHEX(A,LDA,N,K,L,Z,LDZ,NZ,C,X,JOB) K = first column to alter L = last column to alter .qc QR QR decomposition Compute decomposition SQRDC(A,LDA,N,QRAUX,IPVT,WORK,JOB) Input: A,LDA,N,WORK,IPVT,JOB JPVT(K) < 0 A(K,K) is an initial element JPVT(K) = 0 A(K,K) is a free element JPVT(K) < 0 A(K,K) is a final element JOB = 0 No pivoting = 1 pivoting Output: A,QRAUX,IPVT QRAUX(N) = Information needed later Apply the decomposition SQRSL(A,LDA,N,K,QRAUX,Y,QY,QTY,B,RSB,XB,JOB,INFO) Input: A,LDA,N,K,QRAUX,Y,JOB K = Number of columns of Ak Y(N) = N vector to manipulate JOB = ABCDE A = 1 QY computed B = 1 QTY C = 1 B D = 1 RSD E = 1 XB Output: QY,QTY,B,RSD,XB QY(N) = See - documentation QTY(N) = Q(transpose)y RSD(N) = See - documentation XB(N) = See - documentation .qc SD Singular value decomposition SSVDC(A,LDA,N,M,S,E,U,LDU,V,LDV,WORK,JOB,INFO) see - documentation .qb Library__Names .list 0 .le;LINPACKS : Single precision subroutines .le;LINPACKD : Double precision (D floating) subroutines .le;LINPACKC : Complex subroutines .le;LINPACKZ : Double precision complex subroutines .els 0 .qb Documentation .p Dongarra, J.J., et al. " LINPACK User's Guide ", SIAM ,1979. (Paperback, available at the Bookstore) .qb How__To__Use .list 0 .le; - Compile your program ( e.g. $ FOR MYPROG ) .le; - Link your object module with the appropriate library that can be found in the directory sys$userlib: .i5;$ LINK MYPROG,sys$userlib:LINPACKS/LIB .le; - Run the executable image ( e.g. $ RUN MYPROG ) .els 0 .qb Authors .i5;Authors: .c text J.J. Dongarra, C.B. Moler J.R Bunch, G.W. Stewart 1979 .end center