.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