home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frostbyte's 1980s DOS Shareware Collection
/
floppyshareware.zip
/
floppyshareware
/
DOOG
/
PCSSP1.ZIP
/
ITRPAPSM.ZIP
/
APFS.FOR
< prev
next >
Wrap
Text File
|
1985-11-29
|
7KB
|
188 lines
C
C ..................................................................
C
C SUBROUTINE APFS
C
C PURPOSE
C PERFORM SYMMETRIC FACTORIZATION OF THE MATRIX OF THE NORMAL
C EQUATIONS FOLLOWED BY CALCULATION OF THE LEAST SQUARES FIT
C OPTIONALLY
C
C USAGE
C CALL APFS(WORK,IP,IRES,IOP,EPS,ETA,IER)
C
C DESCRIPTION OF PARAMETERS
C WORK - GIVEN SYMMETRIC COEFFICIENT MATRIX, STORED
C COMPRESSED, I.E UPPER TRIANGULAR PART COLUMNWISE.
C THE GIVEN RIGHT HAND SIDE OCCUPIES THE NEXT IP
C LOCATIONS IN WORK. THE VERY LAST COMPONENT OF WORK
C CONTAINS THE SQUARE SUM OF FUNCTION VALUES E0
C THIS SCHEME OF STORAGE ALLOCATION IS PRODUCED E.G.
C BY SUBROUTINE APLL.
C THE GIVEN MATRIX IS FACTORED IN THE FORM
C TRANSPOSE(T)*T AND THE GIVEN RIGHT HAND SIDE IS
C DIVIDED BY TRANSPOSE(T).
C THE UPPER TRIANGULAR FACTOR T IS RETURNED IN WORK IF
C IOP EQUALS ZERO.
C IN CASE OF NONZERO IOP THE CALCULATED SOLUTIONS ARE
C STORED IN THE COLUMNS OF TRIANGULAR ARRAY WORK OF
C CORRESPONDING DIMENSION AND E0 IS REPLACED BY THE
C SQUARE SUM OF THE ERRORS FOR FIT OF DIMENSION IRES.
C THE TOTAL DIMENSION OF WORK IS (IP+1)*(IP+2)/2
C IP - NUMBER OF FUNDAMENTAL FUNCTIONS USED FOR LEAST
C SQUARES FIT
C IRES - DIMENSION OF CALCULATED LEAST SQUARES FIT.
C LET N1, N2, DENOTE THE FOLLOWING NUMBERS
C N1 = MAXIMAL DIMENSION FOR WHICH NO LOSS OF
C SIGNIFICANCE WAS INDICATED DURING FACTORIZATION
C N2 = SMALLEST DIMENSION FOR WHICH THE SQUARE SUM OF
C THE ERRORS DOES NOT EXCEED TEST=ABS(ETA*FSQ)
C THEN IRES=MINO(IP,N1) IF IOP IS NONNEGATIVE
C AND IRES=MINO(IP,N1,N2) IF IOP IS NEGATIVE
C IOP - INPUT PARAMETER FOR SELECTION OF OPERATION
C IOP = 0 MEANS TRIANGULAR FACTORIZATION, DIVISION OF
C THE RIGHT HAND SIDE BY TRANSPOSE(T) AND
C CALCULATION OF THE SQUARE SUM OF ERRORS IS
C PERFORMED ONLY
C IOP = +1 OR -1 MEANS THE SOLUTION OF DIMENSION IRES
C IS CALCULATED ADDITIONALLY
C IOP = +2 OR -2 MEANS ALL SOLUTIONS FOR DIMENSION ONE
C UP TO IRES ARE CALCULATED ADDITIONALLY
C EPS - RELATIVE TOLERANCE FOR TEST ON LOSS OF SIGNIFICANCE.
C A SENSIBLE VALUE IS BETWEEN 1.E-3 AND 1.E-6
C ETA - RELATIVE TOLERANCE FOR TOLERATED SQUARE SUM OF
C ERRORS. A REALISTIC VALUE IS BETWEEN 1.E0 AND 1.E-6
C IER - RESULTANT ERROR PARAMETER
C IER =-1 MEANS NONPOSITIVE IP
C IER = 0 MEANS NO LOSS OF SIGNIFICANCE DETECTED
C AND SPECIFIED TOLERANCE OF ERRORS REACHED
C IER = 1 MEANS LOSS OF SIGNIFICANCE DETECTED OR
C SPECIFIED TOLERANCE OF ERRORS NOT REACHED
C
C REMARKS
C THE ABSOLUTE TOLERANCE USED INTERNALLY FOR TEST ON LOSS OF
C SIGNIFICANCE IS TOL=ABS(EPS*WORK(1)).
C THE ABSOLUTE TOLERANCE USED INTERNALLY FOR THE SQUARE SUM OF
C ERRORS IS ABS(ETA*FSQ).
C IOP GREATER THAN 2 HAS THE SAME EFFECT AS IOP = 2.
C IOP LESS THAN -2 HAS THE SAME EFFECT AS IOP =-2.
C IRES = 0 MEANS THE ABSOLUTE VALUE OF EPS IS NOT LESS THAN
C ONE AND/OR WORK(1) IS NOT POSITIVE AND/OR IP IS NOT POSITIVE
C
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
C NONE
C
C METHOD
C CALCULATION OF THE LEAST SQUARES FITS IS DONE USING
C CHOLESKYS SQUARE ROOT METHOD FOR SYMMETRIC FACTORIZATION.
C THE INCORPORATED TEST ON LOSS OF SIGNIFICANCE MEANS EACH
C RADICAND MUST BE GREATER THAN THE INTERNAL ABSOLUTE
C TOLERANCE TOL=ABS(EPS*WORK(1)).
C IN CASE OF LOSS OF SIGNIFICANCE IN THE ABOVE SENSE ONLY A
C SUBSYSTEM OF THE NORMAL EQUATIONS IS SOLVED.
C IN CASE OF NEGATIVE IOP THE TRIANGULAR FACTORIZATION IS
C TERMINATED PREMATURELY EITHER IF THE SQUARE SUM OF THE
C ERRORS DOES NOT EXCEED ETA*FSQ OR IF THERE IS INDICATION
C FOR LOSS OF SIGNIFICANCE
C
C ..................................................................
C
SUBROUTINE APFS(WORK,IP,IRES,IOP,EPS,ETA,IER)
C
C
C DIMENSIONED DUMMY VARIABLES
DIMENSION WORK(1)
IRES=0
C
C TEST OF SPECIFIED DIMENSION
IF(IP)1,1,2
C
C ERROR RETURN IN CASE OF ILLEGAL DIMENSION
1 IER=-1
RETURN
C
C INITIALIZE FACTORIZATION PROCESS
2 IPIV=0
IPP1=IP+1
IER=1
ITE=IP*IPP1/2
IEND=ITE+IPP1
TOL=ABS(EPS*WORK(1))
TEST=ABS(ETA*WORK(IEND))
C
C START LOOP OVER ALL ROWS OF WORK
DO 11 I=1,IP
IPIV=IPIV+I
JA=IPIV-IRES
JE=IPIV-1
C
C FORM SCALAR PRODUCT NEEDED TO MODIFY CURRENT ROW ELEMENTS
JK=IPIV
DO 9 K=I,IPP1
SUM=0.
IF(IRES)5,5,3
3 JK=JK-IRES
DO 4 J=JA,JE
SUM=SUM+WORK(J)*WORK(JK)
4 JK=JK+1
5 IF(JK-IPIV)6,6,8
C
C TEST FOR LOSS OF SIGNIFICANCE
6 SUM=WORK(IPIV)-SUM
IF(SUM-TOL)12,12,7
7 SUM=SQRT(SUM)
WORK(IPIV)=SUM
PIV=1./SUM
GOTO 9
C
C UPDATE OFF-DIAGONAL TERMS
8 SUM=(WORK(JK)-SUM)*PIV
WORK(JK)=SUM
9 JK=JK+K
C
C UPDATE SQUARE SUM OF ERRORS
WORK(IEND)=WORK(IEND)-SUM*SUM
C
C RECORD ADDRESS OF LAST PIVOT ELEMENT
IRES=IRES+1
IADR=IPIV
C
C TEST FOR TOLERABLE ERROR IF SPECIFIED
IF(IOP)10,11,11
10 IF(WORK(IEND)-TEST)13,13,11
11 CONTINUE
IF(IOP)12,22,12
C
C PERFORM BACK SUBSTITUTION IF SPECIFIED
12 IF(IOP)14,23,14
13 IER=0
14 IPIV=IRES
15 IF(IPIV)23,23,16
16 SUM=0.
JA=ITE+IPIV
JJ=IADR
JK=IADR
K=IPIV
DO 19 I=1,IPIV
WORK(JK)=(WORK(JA)-SUM)/WORK(JJ)
IF(K-1)20,20,17
17 JE=JJ-1
SUM=0.
DO 18 J=K,IPIV
SUM=SUM+WORK(JK)*WORK(JE)
JK=JK+1
18 JE=JE+J
JK=JE-IPIV
JA=JA-1
JJ=JJ-K
19 K=K-1
20 IF(IOP/2)21,23,21
21 IADR=IADR-IPIV
IPIV=IPIV-1
GOTO 15
C
C NORMAL RETURN
22 IER=0
23 RETURN
END