home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d142 / scisubr.lha / SciSubr / SciSubr.zoo / SSP2.For < prev   
Text File  |  1987-11-18  |  441KB  |  16,197 lines

  1. C
  2. C    ..................................................................
  3. C
  4. C       SUBROUTINE KRANK
  5. C
  6. C       PURPOSE
  7. C          TEST CORRELATION BETWEEN TWO VARIABLES BY MEANS OF KENDALL
  8. C          RANK CORRELATION COEFFICIENT
  9. C
  10. C       USAGE
  11. C          CALL KRANK(A,B,R,N,TAU,SD,Z,NR)
  12. C
  13. C       DESCRIPTION OF PARAMETERS
  14. C          A   - INPUT VECTOR OF N OBSERVATIONS FOR FIRST VARIABLE
  15. C          B   - INPUT VECTOR OF N OBSERVATIONS FOR SECOND VARIABLE
  16. C          R   - OUTPUT VECTOR OF RANKED DATA OF LENGTH 2*N. SMALLEST
  17. C                OBSERVATION IS RANKED 1, LARGEST IS RANKED N. TIES
  18. C                ARE ASSIGNED AVERAGE OF TIED RANKS.
  19. C          N   - NUMBER OF OBSERVATIONS
  20. C          TAU - KENDALL RANK CORRELATION COEFFICIENT (OUTPUT)
  21. C          SD  - STANDARD DEVIATION (OUTPUT)
  22. C          Z   - TEST OF SIGNIFICANCE OF TAU IN TERMS OF NORMAL
  23. C                DISTRIBUTION (OUTPUT)
  24. C          NR  - CODE, 0 FOR UNRANKED DATA IN A AND B, 1 FOR RANKED
  25. C                DATA IN A AND B (INPUT)
  26. C
  27. C       REMARKS
  28. C          SD AND Z ARE SET TO ZERO IF N IS LESS THAN TEN
  29. C
  30. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  31. C          RANK
  32. C          TIE
  33. C
  34. C       METHOD
  35. C          DESCRIBED IN S. SIEGEL, 'NONPARAMETRIC STATISTICS FOR THE
  36. C          BEHAVIORAL SCIENCES', MCGRAW-HILL, NEW YORK, 1956,
  37. C          CHAPTER 9
  38. C
  39. C    ..................................................................
  40. C
  41.     SUBROUTINE KRANK(A,B,R,N,TAU,SD,Z,NR)
  42.     DIMENSION A(1),B(1),R(1)
  43. C
  44.     SD=0.0
  45.     Z=0.0
  46.     FN=N
  47.     FN1=N*(N-1)
  48. C
  49. C       DETERMINE WHETHER DATA IS RANKED
  50. C
  51.     IF(NR-1) 5, 10, 5
  52. C
  53. C       RANK DATA IN A AND B VECTORS AND ASSIGN TIED OBSERVATIONS
  54. C       AVERAGE OF TIED RANKS
  55. C
  56. 5    CALL RANK (A,R,N)
  57.     CALL RANK (B,R(N+1),N)
  58.     GO TO 40
  59. C
  60. C       MOVE RANKED DATA TO R VECTOR
  61. C
  62. 10    DO 20 I=1,N
  63. 20    R(I)=A(I)
  64.     DO 30 I=1,N
  65.     J=I+N
  66. 30    R(J)=B(I)
  67. C
  68. C       SORT RANK VECTOR R IN SEQUENCE OF VARIABLE A
  69. C
  70. 40    ISORT=0
  71.     DO 50 I=2,N
  72.     IF(R(I)-R(I-1)) 45,50,50
  73. 45    ISORT=ISORT+1
  74.     RSAVE=R(I)
  75.     R(I)=R(I-1)
  76.     R(I-1)=RSAVE
  77.     I2=I+N
  78.     SAVER=R(I2)
  79.     R(I2)=R(I2-1)
  80.     R(I2-1)=SAVER
  81. 50    CONTINUE
  82.     IF(ISORT) 40,55,40
  83. C
  84. C       COMPUTE S ON VARIABLE B. STARTING WITH THE FIRST RANK, ADD 1
  85. C       TO S FOR EACH LARGER RANK TO ITS RIGHT AND SUBTRACT 1 FOR EACH
  86. C       SMALLER RANK.  REPEAT FOR ALL RANKS.
  87. C
  88. 55    S=0.0
  89.     NM=N-1
  90.     DO 60 I=1,NM
  91.     J=N+I
  92.     DO 60 L=I,N
  93.     K=N+L
  94.     IF(R(I)-R(L))58,60,58
  95. 58      IF(R(K)-R(J)) 56,60,57
  96. 56    S=S-1.0
  97.     GO TO 60
  98. 57    S=S+1.0
  99. 60    CONTINUE
  100. C
  101. C       COMPUTE TIED SCORE INDEX FOR BOTH VARIABLES
  102. C
  103.     KT=2
  104.     CALL TIE(R,N,KT,TA)
  105.     CALL TIE(R(N+1),N,KT,TB)
  106. C
  107. C       COMPUTE TAU
  108. C
  109.     IF(TA) 70,65,70
  110. 65    IF(TB) 70,67,70
  111. 67    TAU=S/(0.5*FN1)
  112.     GO TO 80
  113. 70    TAU=S/((SQRT(0.5*FN1-TA))*(SQRT(0.5*FN1-TB)))
  114. C
  115. C    COMPUTE STANDARD DEVIATION AND Z IF N IS 10 OR LARGER
  116. C
  117. 80    IF(N-10) 90,85,85
  118. 85    SD=(SQRT((2.0*(FN+FN+5.0))/(9.0*FN1)))
  119.     Z=TAU/SD
  120. 90    RETURN
  121.     END
  122. C
  123. C    ..................................................................
  124. C
  125. C       SUBROUTINE LAP
  126. C
  127. C       PURPOSE
  128. C          COMPUTE THE VALUES OF THE LAGUERRE POLYNOMIALS L(N,X)
  129. C          FOR ARGUMENT VALUE X AND ORDERS 0 UP TO N.
  130. C
  131. C       USAGE
  132. C          CALL LAP(Y,X,N)
  133. C
  134. C       DESCRIPTION OF PARAMETERS
  135. C          Y     - RESULT VECTOR OF DIMENSION N+1 CONTAINING THE VALUES
  136. C                  OF LAGUERRE POLYNOMIALS OF ORDER 0 UP TO N
  137. C                  FOR GIVEN ARGUMENT X.
  138. C                  VALUES ARE ORDERED FROM LOW TO HIGH ORDER
  139. C          X     - ARGUMENT OF LAGUERRE POLYNOMIAL
  140. C          N     - ORDER OF LAGUERRE POLYNOMIAL
  141. C
  142. C       REMARKS
  143. C          N LESS THAN 0 IS TREATED AS IF N WERE 0
  144. C
  145. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  146. C          NONE
  147. C
  148. C       METHOD
  149. C          EVALUATION IS BASED ON THE RECURRENCE EQUATION FOR
  150. C          LAGUERRE POLYNOMIALS L(N,X)
  151. C          L(N+1,X)=2*L(N,X)-L(N-1,X)-((1+X)*L(N,X)-L(N-1,X))/(N+1),
  152. C          WHERE THE FIRST TERM IN BRACKETS IS THE ORDER,
  153. C          THE SECOND IS THE ARGUMENT.
  154. C          STARTING VALUES ARE L(0,X)=1, L(1,X)=1.-X.
  155. C
  156. C    ..................................................................
  157. C
  158.     SUBROUTINE LAP(Y,X,N)
  159. C
  160.     DIMENSION Y(1)
  161. C
  162. C       TEST OF ORDER
  163.     Y(1)=1.
  164.     IF(N)1,1,2
  165. 1    RETURN
  166. C
  167. 2    Y(2)=1.-X
  168.     IF(N-1)1,1,3
  169. C
  170. C       INITIALIZATION
  171. 3    T=1.+X
  172. C
  173.     DO 4 I=2,N
  174. 4    Y(I+1)=Y(I)-Y(I-1)+Y(I)-(T*Y(I)-Y(I-1))/FLOAT(I)
  175.     RETURN
  176.     END
  177. C
  178. C    ..................................................................
  179. C
  180. C       SUBROUTINE LAPS
  181. C
  182. C       PURPOSE
  183. C          COMPUTES THE VALUE OF AN N-TERM EXPANSION IN LAGUERRE
  184. C          POLYNOMIALS WITH COEFFICIENT VECTOR C FOR ARGUMENT VALUE X.
  185. C
  186. C       USAGE
  187. C          CALL LAPS(Y,X,C,N)
  188. C
  189. C       DESCRIPTION OF PARAMETERS
  190. C          Y     - RESULT VALUE
  191. C          X     - ARGUMENT VALUE
  192. C          C     - COEFFICIENT VECTOR OF GIVEN EXPANSION
  193. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  194. C          N     - DIMENSION OF COEFFICIENT VECTOR C
  195. C
  196. C       REMARKS
  197. C          OPERATION IS BYPASSED IN CASE N LESS THAN 1
  198. C
  199. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  200. C          NONE
  201. C
  202. C       METHOD
  203. C          DEFINITION
  204. C          Y=SUM(C(I)*L(I-1,X), SUMMED OVER I FROM 1 TO N).
  205. C          EVALUATION IS DONE BY MEANS OF UPWARD RECURSION
  206. C          USING THE RECURRENCE EQUATION FOR LAGUERRE POLYNOMIALS
  207. C          L(N+1,X)=2*L(N,X)-L(N-1,X)-((1+X)*L(N,X)-L(N-1,X))/(N+1).
  208. C
  209. C    ..................................................................
  210. C
  211.     SUBROUTINE LAPS(Y,X,C,N)
  212. C
  213.     DIMENSION C(1)
  214. C
  215. C       TEST OF DIMENSION
  216.     IF(N)1,1,2
  217. 1    RETURN
  218. C
  219. 2    Y=C(1)
  220.     IF(N-2)1,3,3
  221. C
  222. C       INITIALIZATION
  223. 3    H0=1.
  224.     H1=1.-X
  225.     T=1.+X
  226. C
  227.     DO 4 I=2,N
  228.     H2=H1-H0+H1-(T*H1-H0)/FLOAT(I)
  229.     H0=H1
  230.     H1=H2
  231. 4    Y=Y+C(I)*H0
  232.     RETURN
  233.     END
  234. C
  235. C    ..................................................................
  236. C
  237. C       SUBROUTINE LBVP
  238. C
  239. C       PURPOSE
  240. C          TO SOLVE A LINEAR BOUNDARY VALUE PROBLEM, WHICH CONSISTS OF
  241. C          A SYSTEM OF NDIM LINEAR FIRST ORDER DIFFERENTIAL EQUATIONS
  242. C                 DY/DX=A(X)*Y(X)+F(X)
  243. C          AND NDIM LINEAR BOUNDARY CONDITIONS
  244. C                 B*Y(XL)+C*Y(XU)=R.
  245. C
  246. C       USAGE
  247. C          CALL LBVP (PRMT,B,C,R,Y,DERY,NDIM,IHLF,AFCT,FCT,DFCT,OUTP,
  248. C                     AUX,A)
  249. C          PARAMETERS AFCT,FCT,DFCT,OUTP REQUIRE AN EXTERNAL STATEMENT.
  250. C
  251. C       DESCRIPTION OF PARAMETERS
  252. C          PRMT   - AN INPUT AND OUTPUT VECTOR WITH DIMENSION GREATER
  253. C                   OR EQUAL TO 5, WHICH SPECIFIES THE PARAMETERS OF
  254. C                   THE INTERVAL AND OF ACCURACY AND WHICH SERVES FOR
  255. C                   COMMUNICATION BETWEEN OUTPUT SUBROUTINE (FURNISHED
  256. C                   BY THE USER) AND SUBROUTINE LBVP.
  257. C                   THE COMPONENTS ARE
  258. C          PRMT(1)- LOWER BOUND XL OF THE INTERVAL (INPUT),
  259. C          PRMT(1)- UPPER BOUND XU OF THE INTERVAL (INPUT),
  260. C          PRMT(3)- INITIAL INCREMENT OF THE INDEPENDENT VARIABLE
  261. C                   (INPUT),
  262. C          PRMT(4)- UPPER ERROR BOUND (INPUT). IF RELATIVE ERROR IS
  263. C                   GREATER THAN PRMT(4), INCREMENT GETS HALVED.
  264. C                   IF INCREMENT IS LESS THAN PRMT(3) AND RELATIVE
  265. C                   ERROR LESS THAN PRMT(4)/50, INCREMENT GETS DOUBLED.
  266. C                   THE USER MAY CHANGE PRMT(4) BY MEANS OF HIS
  267. C                   OUTPUT SUBROUTINE.
  268. C          PRMT(5)- NO INPUT PARAMETER. SUBROUTINE LBVP INITIALIZES
  269. C                   PRMT(5)=0. IF THE USER WANTS TO TERMINATE
  270. C                   SUBROUTINE LBVP AT ANY OUTPUT POINT, HE HAS TO
  271. C                   CHANGE PRMT(5) TO NON-ZERO BY MEANS OF SUBROUTINE
  272. C                   OUTP. FURTHER COMPONENTS OF VECTOR PRMT ARE
  273. C                   FEASIBLE IF ITS DIMENSION IS DEFINED GREATER
  274. C                   THAN 5. HOWEVER SUBROUTINE LBVP DOES NOT REQUIRE
  275. C                   AND CHANGE THEM. NEVERTHELESS THEY MAY BE USEFUL
  276. C                   FOR HANDING RESULT VALUES TO THE MAIN PROGRAM
  277. C                   (CALLING LBVP) WHICH ARE OBTAINED BY SPECIAL
  278. C                   MANIPULATIONS WITH OUTPUT DATA IN SUBROUTINE OUTP.
  279. C          B      - AN NDIM BY NDIM INPUT MATRIX.  (DESTROYED)
  280. C                   IT IS THE COEFFICIENT MATRIX OF Y(XL) IN
  281. C                   THE BOUNDARY CONDITIONS.
  282. C          C      - AN NDIM BY NDIM INPUT MATRIX (POSSIBLY DESTROYED).
  283. C                   IT IS THE COEFFICIENT MATRIX OF Y(XU) IN
  284. C                   THE BOUNDARY CONDITIONS.
  285. C          R      - AN INPUT VECTOR WITH DIMENSION NDIM.  (DESTROYED)
  286. C                   IT SPECIFIES THE RIGHT HAND SIDE OF THE
  287. C                   BOUNDARY CONDITIONS.
  288. C          Y      - AN AUXILIARY VECTOR WITH DIMENSION NDIM.
  289. C                   IT IS USED AS STORAGE LOCATION FOR THE RESULTING
  290. C                   VALUES OF DEPENDENT VARIABLES COMPUTED AT
  291. C                   INTERMEDIATE POINTS.
  292. C          DERY   - INPUT VECTOR OF ERROR WEIGHTS.  (DESTROYED)
  293. C                   ITS MAXIMAL COMPONENT SHOULD BE EQUAL TO 1.
  294. C                   LATERON DERY IS THE VECTOR OF DERIVATIVES, WHICH
  295. C                   BELONG TO FUNCTION VALUES Y AT INTERMEDIATE POINTS.
  296. C          NDIM   - AN INPUT VALUE, WHICH SPECIFIES THE NUMBER OF
  297. C                   DIFFERENTIAL EQUATIONS IN THE SYSTEM.
  298. C          IHLF   - AN OUTPUT VALUE, WHICH SPECIFIES THE NUMBER OF
  299. C                   BISECTIONS OF THE INITIAL INCREMENT. IF IHLF GETS
  300. C                   GREATER THAN 10, SUBROUTINE LBVP RETURNS WITH
  301. C                   ERROR MESSAGE IHLF=11 INTO MAIN PROGRAM.
  302. C                   ERROR MESSAGE IHLF=12 OR IHLF=13 APPEARS IN CASE
  303. C                   PRMT(3)=0 OR IN CASE SIGN(PRMT(3)).NE.SIGN(PRMT(2)-
  304. C                   PRMT(1)) RESPECTIVELY. FINALLY ERROR MESSAGE
  305. C                   IHLF=14 INDICATES, THAT THERE IS NO SOLUTION OR
  306. C                   THAT THERE ARE MORE THAN ONE SOLUTION OF THE
  307. C                   PROBLEM.
  308. C                   A NEGATIVE VALUE OF IHLF HANDED TO SUBROUTINE OUTP
  309. C                   TOGETHER WITH INITIAL VALUES OF FINALLY GENERATED
  310. C                   INITIAL VALUE PROBLEM INDICATES, THAT THERE WAS
  311. C                   POSSIBLE LOSS OF SIGNIFICANCE IN THE SOLUTION OF
  312. C                   THE SYSTEM OF SIMULTANEOUS LINEAR EQUATIONS FOR
  313. C                   THESE INITIAL VALUES. THE ABSOLUTE VALUE OF IHLF
  314. C                   SHOWS, AFTER WHICH ELIMINATION STEP OF GAUSS
  315. C                   ALGORITHM POSSIBLE LOSS OF SIGNIFICANCE WAS
  316. C                   DETECTED.
  317. C          AFCT   - THE NAME OF AN EXTERNAL SUBROUTINE USED. IT
  318. C                   COMPUTES THE COEFFICIENT MATRIX A OF VECTOR Y ON
  319. C                   THE RIGHT HAND SIDE OF THE SYSTEM OF DIFFERENTIAL
  320. C                   EQUATIONS FOR A GIVEN X-VALUE. ITS PARAMETER LIST
  321. C                   MUST BE X,A. SUBROUTINE AFCT SHOULD NOT DESTROY X.
  322. C          FCT    - THE NAME OF AN EXTERNAL SUBROUTINE USED. IT
  323. C                   COMPUTES VECTOR F (INHOMOGENEOUS PART OF THE
  324. C                   RIGHT HAND SIDE OF THE SYSTEM OF DIFFERENTIAL
  325. C                   EQUATIONS) FOR A GIVEN X-VALUE. ITS PARAMETER LIST
  326. C                   MUST BE X,F. SUBROUTINE FCT SHOULD NOT DESTROY X.
  327. C          DFCT   - THE NAME OF AN EXTERNAL SUBROUTINE USED. IT
  328. C                   COMPUTES VECTOR DF (DERIVATIVE OF THE INHOMOGENEOUS
  329. C                   PART ON THE RIGHT HAND SIDE OF THE SYSTEM OF
  330. C                   DIFFERENTIAL EQUATIONS) FOR A GIVEN X-VALUE. ITS
  331. C                   PARAMETER LIST MUST BE X,DF. SUBROUTINE DFCT
  332. C                   SHOULD NOT DESTROY X.
  333. C          OUTP   - THE NAME OF AN EXTERNAL OUTPUT SUBROUTINE USED.
  334. C                   ITS PARAMETER LIST MUST BE X,Y,DERY,IHLF,NDIM,PRMT.
  335. C                   NONE OF THESE PARAMETERS (EXCEPT, IF NECESSARY,
  336. C                   PRMT(4),PRMT(5),...) SHOULD BE CHANGED BY
  337. C                   SUBROUTINE OUTP. IF PRMT(5) IS CHANGED TO NON-ZERO,
  338. C                   SUBROUTINE LBVP IS TERMINATED.
  339. C          AUX    - AN AUXILIARY STORAGE ARRAY WIRH 20 ROWS AND
  340. C                   NDIM COLUMNS.
  341. C          A      - AN NDIM BY NDIM MATRIX, WHICH IS USED AS AUXILIARY
  342. C                   STORAGE ARRAY.
  343. C
  344. C       REMARKS
  345. C          THE PROCEDURE TERMINATES AND RETURNS TO CALLING PROGRAM, IF
  346. C          (1) MORE THAN 10 BISECTIONS OF THE INITIAL INCREMENT ARE
  347. C              NECESSARY TO GET SATISFACTORY ACCURACY (ERROR MESSAGE
  348. C              IHLF=11),
  349. C          (2) INITIAL INCREMENT IS EQUAL TO 0 OR IF IT HAS WRONG SIGN
  350. C              (ERROR MESSAGES IHLF=12 OR IHLF=13),
  351. C          (3) THERE IS NO OR MORE THAN ONE SOLUTION OF THE PROBLEM
  352. C              (ERROR MESSAGE IHLF=14),
  353. C          (4) THE WHOLE INTEGRATION INTERVAL IS WORKED THROUGH,
  354. C          (5) SUBROUTINE OUTP HAS CHANGED PRMT(5) TO NON-ZERO.
  355. C
  356. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  357. C          SUBROUTINE GELG     SYSTEM OF LINEAR EQUATIONS.
  358. C          THE EXTERNAL SUBROUTINES AFCT(X,A), FCT(X,F), DFCT(X,DF),
  359. C          AND OUTP(X,Y,DERY,IHLF,NDIM,PRMT) MUST BE FURNISHED
  360. C          BY THE USER.
  361. C
  362. C       METHOD
  363. C          EVALUATION IS DONE USING THE METHOD OF ADJOINT EQUATIONS.
  364. C          HAMMINGS FOURTH ORDER MODIFIED PREDICTOR-CORRECTOR METHOD
  365. C          IS USED TO SOLVE THE ADJOINT INITIAL VALUE PROBLEMS AND FI-
  366. C          NALLY TO SOLVE THE GENERATED INITIAL VALUE PROBLEM FOR Y(X).
  367. C          THE INITIAL INCREMENT PRMT(3) IS AUTOMATICALLY ADJUSTED.
  368. C          FOR COMPUTATION OF INTEGRAL SUM, A FOURTH ORDER HERMITEAN
  369. C          INTEGRATION FORMULA IS USED.
  370. C          FOR REFERENCE, SEE
  371. C          (1) LANCE, NUMERICAL METHODS FOR HIGH SPEED COMPUTERS,
  372. C              ILIFFE, LONDON, 1960, PP.64-67.
  373. C          (2) RALSTON/WILF, MATHEMATICAL METHODS FOR DIGITAL
  374. C              COMPUTERS, WILEY, NEW YORK/LONDON, 1960, PP.95-109.
  375. C          (3) RALSTON, RUNGE-KUTTA METHODS WITH MINIMUM ERROR BOUNDS,
  376. C              MTAC, VOL.16, ISS.80 (1962), PP.431-437.
  377. C          (4) ZURMUEHL, PRAKTISCHE MATHEMATIK FUER INGENIEURE UND
  378. C              PHYSIKER, SPRINGER, BERLIN/GOETTINGEN/HEIDELBERG, 1963,
  379. C              PP.227-232.
  380. C
  381. C    ..................................................................
  382. C
  383.     SUBROUTINE LBVP(PRMT,B,C,R,Y,DERY,NDIM,IHLF,AFCT,FCT,DFCT,OUTP,
  384.      1AUX,A)
  385. C
  386.     DIMENSION PRMT(1),B(1),C(1),R(1),Y(1),DERY(1),AUX(20,1),A(1)
  387. C
  388. C    ERROR TEST
  389.     IF(PRMT(3)*(PRMT(2)-PRMT(1)))2,1,3
  390. 1    IHLF=12
  391.     RETURN
  392. 2    IHLF=13
  393.     RETURN
  394. C
  395. C    SEARCH FOR ZERO-COLUMNS IN MATRICES B AND C
  396. 3    KK=-NDIM
  397.     IB=0
  398.     IC=0
  399.     DO 7 K=1,NDIM
  400.     AUX(15,K)=DERY(K)
  401.     AUX(1,K)=1.
  402.     AUX(17,K)=1.
  403.     KK=KK+NDIM
  404.     DO 4 I=1,NDIM
  405.     II=KK+I
  406.     IF(B(II))5,4,5
  407. 4    CONTINUE
  408.     IB=IB+1
  409.     AUX(1,K)=0.
  410. 5    DO 6 I=1,NDIM
  411.     II=KK+I
  412.     IF(C(II))7,6,7
  413. 6    CONTINUE
  414.     IC=IC+1
  415.     AUX(17,K)=0.
  416. 7    CONTINUE
  417. C
  418. C    DETERMINATION OF LOWER AND UPPER BOUND
  419.     IF(IC-IB)8,11,11
  420. 8    H=PRMT(2)
  421.     PRMT(2)=PRMT(1)
  422.     PRMT(1)=H
  423.     PRMT(3)=-PRMT(3)
  424.     DO 9 I=1,NDIM
  425. 9    AUX(17,I)=AUX(1,I)
  426.     II=NDIM*NDIM
  427.     DO 10 I=1,II
  428.     H=B(I)
  429.     B(I)=C(I)
  430. 10    C(I)=H
  431. C
  432. C    PREPARATIONS FOR CONSTRUCTION OF ADJOINT INITIAL VALUE PROBLEMS
  433. 11    X=PRMT(2)
  434.     CALL FCT(X,Y)
  435.     CALL DFCT(X,DERY)
  436.     DO 12 I=1,NDIM
  437.     AUX(18,I)=Y(I)
  438. 12    AUX(19,I)=DERY(I)
  439. C
  440. C    POSSIBLE BREAK-POINT FOR LINKAGE
  441. C
  442. C    THE FOLLOWING PART OF SUBROUTINE LBVP UNTIL NEXT BREAK-POINT FOR
  443. C    LINKAGE HAS TO REMAIN IN CORE DURING THE WHOLE REST OF THE
  444. C    COMPUTATIONS
  445. C
  446. C    START LOOP FOR GENERATING ADJOINT INITIAL VALUE PROBLEMS
  447.     K=0
  448.     KK=0
  449. 100    K=K+1
  450.     IF(AUX(17,K))108,108,101
  451. C
  452. C    INITIALIZATION OF ADJOINT INITIAL VALUE PROBLEM
  453. 101    X=PRMT(2)
  454.     CALL AFCT(X,A)
  455.     SUM=0.
  456.     GL=AUX(18,K)
  457.     DGL=AUX(19,K)
  458.     II=K
  459.     DO 104 I=1,NDIM
  460.     H=-A(II)
  461.     DERY(I)=H
  462.     AUX(20,I)=R(I)
  463.     Y(I)=0.
  464.     IF(I-K)103,102,103
  465. 102    Y(I)=1.
  466. 103    DGL=DGL+H*AUX(18,I)
  467. 104    II=II+NDIM
  468.     XEND=PRMT(1)
  469.     H=.0625*(XEND-X)
  470.     ISW=0
  471.     GOTO 400
  472. C    THIS IS BRANCH TO ADJOINT LINEAR INITIAL VALUE PROBLEM
  473. C
  474. C    THIS IS RETURN FROM ADJOINT LINEAR INITIAL VALUE PROBLEM
  475. 105    IF(IHLF-10)106,106,117
  476. C
  477. C    UPDATING OF COEFFICIENT MATRIX B AND VECTOR R
  478. 106    DO 107 I=1,NDIM
  479.     KK=KK+1
  480.     H=C(KK)
  481.     R(I)=AUX(20,I)+H*SUM
  482.     II=I
  483.     DO 107 J=1,NDIM
  484.     B(II)=B(II)+H*Y(J)
  485. 107    II=II+NDIM
  486.     GOTO 109
  487. 108    KK=KK+NDIM
  488. 109    IF(K-NDIM)100,110,110
  489. C
  490. C    GENERATION OF LAST INITIAL VALUE PROBLEM
  491. 110    X=PRMT(4)
  492.     CALL GELG(R,B,NDIM,1,X,I)
  493.     IF(I)111,112,112
  494. 111    IHLF=14
  495.     RETURN
  496. C
  497. 112    PRMT(5)=0.
  498.     IHLF=-I
  499.     X=PRMT(1)
  500.     XEND=PRMT(2)
  501.     H=PRMT(3)
  502.     DO 113 I=1,NDIM
  503. 113    Y(I)=R(I)
  504.     ISW=1
  505. 114    ISW2=12
  506.     GOTO 200
  507. 115    ISW3=-1
  508.     GOTO 300
  509. 116    IF(IHLF)400,400,117
  510. C    THIS WAS BRANCH INTO INITIAL VALUE PROBLEM
  511. C
  512. C    THIS IS RETURN FROM INITIAL VALUE PROBLEM
  513. 117    RETURN
  514. C
  515. C    THIS PART OF LINEAR BOUNDARY VALUE PROBLEM COMPUTES THE RIGHT
  516. C    HAND SIDE DERY OF THE SYSTEM OF ADJOINT LINEAR DIFFERENTIAL
  517. C    EQUATIONS (IN CASE ISW=0) OR OF THE GIVEN SYSTEM (IN CASE ISW=1).
  518. 200    CALL AFCT(X,A)
  519.     IF(ISW)201,201,205
  520. C
  521. C    ADJOINT SYSTEM
  522. 201    LL=0
  523.     DO 203 M=1,NDIM
  524.     HS=0.
  525.     DO 202 L=1,NDIM
  526.     LL=LL+1
  527. 202    HS=HS-A(LL)*Y(L)
  528. 203    DERY(M)=HS
  529. 204    GOTO(502,504,506,407,415,418,608,617,632,634,421,115),ISW2
  530. C
  531. C    GIVEN SYSTEM
  532. 205    CALL FCT(X,DERY)
  533.     DO 207 M=1,NDIM
  534.     LL=M-NDIM
  535.     HS=0.
  536.     DO 206 L=1,NDIM
  537.     LL=LL+NDIM
  538. 206    HS=HS+A(LL)*Y(L)
  539. 207    DERY(M)=HS+DERY(M)
  540.     GOTO 204
  541. C
  542. C    THIS PART OF LINEAR BOUNDARY VALUE PROBLEM COMPUTES THE VALUE OF
  543. C    INTEGRAL SUM, WHICH IS A PART OF THE OUTPUT OF ADJOINT INITIAL
  544. C    VALUE PROBLEM (IN CASE ISW=0) OR RECORDS RESULT VALUES OF THE
  545. C    FINAL INITIAL VALUE PROBLEM (IN CASE ISW=1).
  546. 300    IF(ISW)301,301,305
  547. C
  548. C    ADJOINT PROBLEM
  549. 301    CALL FCT(X,R)
  550.     GU=0.
  551.     DGU=0.
  552.     DO 302 L=1,NDIM
  553.     GU=GU+Y(L)*R(L)
  554. 302    DGU=DGU+DERY(L)*R(L)
  555.     CALL DFCT(X,R)
  556.     DO 303 L=1,NDIM
  557. 303    DGU=DGU+Y(L)*R(L)
  558.     SUM=SUM+.5*H*((GL+GU)+.1666667*H*(DGL-DGU))
  559.     GL=GU
  560.     DGL=DGU
  561. 304    IF(ISW3)116,422,618
  562. C
  563. C    GIVEN PROBLEM
  564. 305    CALL OUTP(X,Y,DERY,IHLF,NDIM,PRMT)
  565.     IF(PRMT(5))117,304,117
  566. C
  567. C    POSSIBLE BREAK-POINT FOR LINKAGE
  568. C
  569. C    THE FOLLOWING PART OF SUBROUTINE LBVP SOLVES IN CASE ISW=0 THE
  570. C    ADJOINT INITIAL VALUE PROBLEM. IT COMPUTES INTEGRAL SUM AND
  571. C    THE VECTOR Y OF DEPENDENT VARIABLES AT THE LOWER BOUND PRMT(1).
  572. C    IN CASE ISW=1 IT SOLVES FINALLY GENERATED INITIAL VALUE PROBLEM.
  573. 400    N=1
  574.     XST=X
  575.     IHLF=0
  576.     DO 401 I=1,NDIM
  577.     AUX(16,I)=0.
  578.     AUX(1,I)=Y(I)
  579. 401    AUX(8,I)=DERY(I)
  580.     ISW1=1
  581.     GOTO 500
  582. C
  583. 402    X=X+H
  584.     DO 403 I=1,NDIM
  585. 403    AUX(2,I)=Y(I)
  586. C
  587. C    INCREMENT H IS TESTED BY MEANS OF BISECTION
  588. 404    IHLF=IHLF+1
  589.     X=X-H
  590.     DO 405 I=1,NDIM
  591. 405    AUX(4,I)=AUX(2,I)
  592.     H=.5*H
  593.     N=1
  594.     ISW1=2
  595.     GOTO 500
  596. C
  597. 406    X=X+H
  598.     ISW2=4
  599.     GOTO 200
  600. 407    N=2
  601.     DO 408 I=1,NDIM
  602.     AUX(2,I)=Y(I)
  603. 408    AUX(9,I)=DERY(I)
  604.     ISW1=3
  605.     GOTO 500
  606. C
  607. C    TEST ON SATISFACTORY ACCURACY
  608. 409    DO 414 I=1,NDIM
  609.     Z=ABS(Y(I))
  610.     IF(Z-1.)410,411,411
  611. 410    Z=1.
  612. 411    DELT=.06666667*ABS(Y(I)-AUX(4,I))
  613.     IF(ISW)413,413,412
  614. 412    DELT=AUX(15,I)*DELT
  615. 413    IF(DELT-Z*PRMT(4))414,414,429
  616. 414    CONTINUE
  617. C
  618. C    SATISFACTORY ACCURACY AFTER LESS THAN 11 BISECTIONS
  619.     X=X+H
  620.     ISW2=5
  621.     GOTO 200
  622. 415    DO 416 I=1,NDIM
  623.     AUX(3,I)=Y(I)
  624. 416    AUX(10,I)=DERY(I)
  625.     N=3
  626.     ISW1=4
  627.     GOTO 500
  628. C
  629. 417    N=1
  630.     X=X+H
  631.     ISW2=6
  632.     GOTO 200
  633. 418    X=XST
  634.     DO 419 I=1,NDIM
  635.     AUX(11,I)=DERY(I)
  636.   419    Y(I)=AUX(1,I)+H*(.375*AUX(8,I)+.7916667*AUX(9,I)
  637.      1-.2083333*AUX(10,I)+.04166667*DERY(I))
  638. 420    X=X+H
  639.     N=N+1
  640.     ISW2=11
  641.     GOTO 200
  642. 421    ISW3=0
  643.     GOTO 300
  644. 422    IF(N-4)423,600,600
  645. 423    DO 424 I=1,NDIM
  646.     AUX(N,I)=Y(I)
  647. 424    AUX(N+7,I)=DERY(I)
  648.     IF(N-3)425,427,600
  649. C
  650. 425    DO 426 I=1,NDIM
  651.     DELT=AUX(9,I)+AUX(9,I)
  652.     DELT=DELT+DELT
  653. 426    Y(I)=AUX(1,I)+.3333333*H*(AUX(8,I)+DELT+AUX(10,I))
  654.     GOTO 420
  655. C
  656. 427    DO 428 I=1,NDIM
  657.     DELT=AUX(9,I)+AUX(10,I)
  658.     DELT=DELT+DELT+DELT
  659. 428    Y(I)=AUX(1,I)+.375*H*(AUX(8,I)+DELT+AUX(11,I))
  660.     GOTO 420
  661. C
  662. C    NO SATISFACTORY ACCURACY. H MUST BE HALVED.
  663. 429    IF(IHLF-10)404,430,430
  664. C
  665. C    NO SATISFACTORY ACCURACY AFTER 10 BISECTIONS. ERROR MESSAGE.
  666. 430    IHLF=11
  667.     X=X+H
  668.     IF(ISW)105,105,114
  669. C
  670. C    THIS PART OF LINEAR INITIAL VALUE PROBLEM COMPUTES
  671. C    STARTING VALUES BY MEANS OF RUNGE-KUTTA METHOD.
  672. 500    Z=X
  673.     DO 501 I=1,NDIM
  674.     X=H*AUX(N+7,I)
  675.     AUX(5,I)=X
  676. 501    Y(I)=AUX(N,I)+.4*X
  677. C
  678.     X=Z+.4*H
  679.     ISW2=1
  680.     GOTO 200
  681. 502    DO 503 I=1,NDIM
  682.     X=H*DERY(I)
  683.     AUX(6,I)=X
  684. 503    Y(I)=AUX(N,I)+.2969776*AUX(5,I)+.1587596*X
  685. C
  686.     X=Z+.4557372*H
  687.     ISW2=2
  688.     GOTO 200
  689. 504    DO 505 I=1,NDIM
  690.     X=H*DERY(I)
  691.     AUX(7,I)=X
  692. 505    Y(I)=AUX(N,I)+.2181004*AUX(5,I)-3.050965*AUX(6,I)+3.832865*X
  693. C
  694.     X=Z+H
  695.     ISW2=3
  696.     GOTO 200
  697. 506    DO 507 I=1,NDIM
  698.   507    Y(I)=AUX(N,I)+.1747603*AUX(5,I)-.5514807*AUX(6,I)
  699.      1+1.205536*AUX(7,I)+.1711848*H*DERY(I)
  700.     X=Z
  701.     GOTO(402,406,409,417),ISW1
  702. C
  703. C    POSSIBLE BREAK-POINT FOR LINKAGE
  704. C
  705. C    STARTING VALUES ARE COMPUTED.
  706. C    NOW START HAMMINGS MODIFIED PREDICTOR-CORRECTOR METHOD.
  707. 600    ISTEP=3
  708. 601    IF(N-8)604,602,604
  709. C
  710. C    N=8 CAUSES THE ROWS OF AUX TO CHANGE THEIR STORAGE LOCATIONS
  711. 602    DO 603 N=2,7
  712.     DO 603 I=1,NDIM
  713.     AUX(N-1,I)=AUX(N,I)
  714. 603    AUX(N+6,I)=AUX(N+7,I)
  715.     N=7
  716. C
  717. C    N LESS THAN 8 CAUSES N+1 TO GET N
  718. 604    N=N+1
  719. C
  720. C    COMPUTATION OF NEXT VECTOR Y
  721.     DO 605 I=1,NDIM
  722.     AUX(N-1,I)=Y(I)
  723. 605    AUX(N+6,I)=DERY(I)
  724.     X=X+H
  725. 606    ISTEP=ISTEP+1
  726.     DO 607 I=1,NDIM
  727.     DELT=AUX(N-4,I)+1.333333*H*(AUX(N+6,I)+AUX(N+6,I)-AUX(N+5,I)+
  728.      1AUX(N+4,I)+AUX(N+4,I))
  729.     Y(I)=DELT-.9256198*AUX(16,I)
  730. 607    AUX(16,I)=DELT
  731. C    PREDICTOR IS NOW GENERATED IN ROW 16 OF AUX, MODIFIED PREDICTOR
  732. C    IS GENERATED IN Y. DELT MEANS AN AUXILIARY STORAGE.
  733. C
  734.     ISW2=7
  735.     GOTO 200
  736. C    DERIVATIVE OF MODIFIED PREDICTOR IS GENERATED IN DERY.
  737. C
  738. 608    DO 609 I=1,NDIM
  739.     DELT=.125*(9.*AUX(N-1,I)-AUX(N-3,I)+3.*H*(DERY(I)+AUX(N+6,I)+
  740.      1AUX(N+6,I)-AUX(N+5,I)))
  741.     AUX(16,I)=AUX(16,I)-DELT
  742. 609    Y(I)=DELT+.07438017*AUX(16,I)
  743. C
  744. C    TEST WHETHER H MUST BE HALVED OR DOUBLED
  745.     DELT=0.
  746.     DO 616 I=1,NDIM
  747.     Z=ABS(Y(I))
  748.     IF(Z-1.)610,611,611
  749. 610    Z=1.
  750. 611    Z=ABS(AUX(16,I))/Z
  751.     IF(ISW)613,613,612
  752. 612    Z=AUX(15,I)*Z
  753. 613    IF(Z-PRMT(4))614,614,628
  754. 614    IF(DELT-Z)615,616,616
  755. 615    DELT=Z
  756. 616    CONTINUE
  757. C
  758. C    H MUST NOT BE HALVED. THAT MEANS Y(I) ARE GOOD.
  759.     ISW2=8
  760.     GOTO 200
  761. 617    ISW3=1
  762.     GOTO 300
  763. 618    IF(H*(X-XEND))619,621,621
  764. 619    IF(ABS(X-XEND)-.1*ABS(H))621,620,620
  765. 620    IF(DELT-.02*PRMT(4))622,622,601
  766. 621    IF(ISW)105,105,117
  767. C
  768. C
  769. C    H COULD BE DOUBLED IF ALL NECESSARY PRECEEDING VALUES ARE
  770. C    AVAILABLE.
  771. 622    IF(IHLF)601,601,623
  772. 623    IF(N-7)601,624,624
  773. 624    IF(ISTEP-4)601,625,625
  774. 625    IMOD=ISTEP/2
  775.     IF(ISTEP-IMOD-IMOD)601,626,601
  776. 626    H=H+H
  777.     IHLF=IHLF-1
  778.     ISTEP=0
  779.     DO 627 I=1,NDIM
  780.     AUX(N-1,I)=AUX(N-2,I)
  781.     AUX(N-2,I)=AUX(N-4,I)
  782.     AUX(N-3,I)=AUX(N-6,I)
  783.     AUX(N+6,I)=AUX(N+5,I)
  784.     AUX(N+5,I)=AUX(N+3,I)
  785.     AUX(N+4,I)=AUX(N+1,I)
  786.     DELT=AUX(N+6,I)+AUX(N+5,I)
  787.     DELT=DELT+DELT+DELT
  788.   627    AUX(16,I)=8.962963*(Y(I)-AUX(N-3,I))-3.361111*H*(DERY(I)+DELT
  789.      1+AUX(N+4,I))
  790.     GOTO 601
  791. C
  792. C
  793. C    H MUST BE HALVED
  794. 628    IHLF=IHLF+1
  795.     IF(IHLF-10)630,630,629
  796. 629    IF(ISW)105,105,114
  797. 630    H=.5*H
  798.     ISTEP=0
  799.     DO 631 I=1,NDIM
  800.     Y(I)=.00390625*(80.*AUX(N-1,I)+135.*AUX(N-2,I)+40.*AUX(N-3,I)+
  801.      1AUX(N-4,I))-.1171875*(AUX(N+6,I)-6.*AUX(N+5,I)-AUX(N+4,I))*H
  802.     AUX(N-4,I)=.00390625*(12.*AUX(N-1,I)+135.*AUX(N-2,I)+
  803.      1108.*AUX(N-3,I)+AUX(N-4,I))-.0234375*(AUX(N+6,I)+18.*AUX(N+5,I)-
  804.      29.*AUX(N+4,I))*H
  805.     AUX(N-3,I)=AUX(N-2,I)
  806. 631    AUX(N+4,I)=AUX(N+5,I)
  807.     DELT=X-H
  808.     X=DELT-(H+H)
  809.     ISW2=9
  810.     GOTO 200
  811. 632    DO 633 I=1,NDIM
  812.     AUX(N-2,I)=Y(I)
  813.     AUX(N+5,I)=DERY(I)
  814. 633    Y(I)=AUX(N-4,I)
  815.     X=X-(H+H)
  816.     ISW2=10
  817.     GOTO 200
  818. 634    X=DELT
  819.     DO 635 I=1,NDIM
  820.     DELT=AUX(N+5,I)+AUX(N+4,I)
  821.     DELT=DELT+DELT+DELT
  822.     AUX(16,I)=8.962963*(AUX(N-1,I)-Y(I))-3.361111*H*(AUX(N+6,I)+DELT
  823.      1+DERY(I))
  824. 635    AUX(N+3,I)=DERY(I)
  825.     GOTO 606
  826. C
  827. C    END OF INITIAL VALUE PROBLEM
  828.     END
  829. C
  830. C    ..................................................................
  831. C
  832. C       SUBROUTINE LEP
  833. C
  834. C       PURPOSE
  835. C          COMPUTE THE VALUES OF THE LEGENDRE POLYNOMIALS P(N,X)
  836. C          FOR ARGUMENT VALUE X AND ORDERS 0 UP TO N.
  837. C
  838. C       USAGE
  839. C          CALL LEP(Y,X,N)
  840. C
  841. C       DESCRIPTION OF PARAMETERS
  842. C          Y     - RESULT VECTOR OF DIMENSION N+1 CONTAINING THE VALUES
  843. C                  OF LEGENDRE POLYNOMIALS OF ORDER 0 UP TO N
  844. C                  FOR GIVEN ARGUMENT X.
  845. C                  VALUES ARE ORDERED FROM LOW TO HIGH ORDER
  846. C          X     - ARGUMENT OF LEGENDRE POLYNOMIAL
  847. C          N     - ORDER OF LEGENDRE POLYNOMIAL
  848. C
  849. C       REMARKS
  850. C          N LESS THAN 0 IS TREATED AS IF N WERE 0
  851. C
  852. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  853. C          NONE
  854. C
  855. C       METHOD
  856. C          EVALUATION IS BASED ON THE RECURRENCE EQUATION FOR
  857. C          LEGENDRE POLYNOMIALS P(N,X)
  858. C          P(N+1,X)=2*X*P(N,X)-P(N-1,X)-(X*P(N,X)-P(N-1,X))/(N+1),
  859. C          WHERE THE FIRST TERM IN BRACKETS IS THE ORDER,
  860. C          THE SECOND IS THE ARGUMENT.
  861. C          STARTING VALUES ARE P(0,X)=1, P(1,X)=X.
  862. C
  863. C    ..................................................................
  864. C
  865.     SUBROUTINE LEP(Y,X,N)
  866. C
  867.     DIMENSION Y(1)
  868. C
  869. C       TEST OF ORDER
  870.     Y(1)=1.
  871.     IF(N)1,1,2
  872. 1    RETURN
  873. C
  874. 2    Y(2)=X
  875.     IF(N-1)1,1,3
  876. C
  877. 3    DO 4 I=2,N
  878.     G=X*Y(I)
  879. 4    Y(I+1)=G-Y(I-1)+G-(G-Y(I-1))/FLOAT(I)
  880.     RETURN
  881.     END
  882. C
  883. C    ..................................................................
  884. C
  885. C       SUBROUTINE LEPS
  886. C
  887. C       PURPOSE
  888. C          COMPUTES THE VALUE OF AN N-TERM EXPANSION IN LEGENDRE
  889. C          POLYNOMIALS WITH COEFFICIENT VECTOR C FOR ARGUMENT VALUE X.
  890. C
  891. C       USAGE
  892. C          CALL LEPS(Y,X,C,N)
  893. C
  894. C       DESCRIPTION OF PARAMETERS
  895. C          Y     - RESULT VALUE
  896. C          X     - ARGUMENT VALUE
  897. C          C     - COEFFICIENT VECTOR OF GIVEN EXPANSION
  898. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  899. C          N     - DIMENSION OF COEFFICIENT VECTOR C
  900. C
  901. C       REMARKS
  902. C          OPERATION IS BYPASSED IN CASE N LESS THAN 1
  903. C
  904. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  905. C          NONE
  906. C
  907. C       METHOD
  908. C          DEFINITION
  909. C          Y=SUM(C(I)*P(I-1,X), SUMMED OVER I FROM 1 TO N).
  910. C          EVALUATION IS DONE BY MEANS OF UPWARD RECURSION
  911. C          USING THE RECURRENCE EQUATION FOR LEGENDRE POLYNOMIALS
  912. C          P(N+1,X)=2*X*P(N,X)-P(N-1,X)-(X*P(N,X)-P(N-1,X))/(N+1).
  913. C
  914. C    ..................................................................
  915. C
  916.     SUBROUTINE LEPS(Y,X,C,N)
  917. C
  918.     DIMENSION C(1)
  919. C
  920. C       TEST OF DIMENSION
  921.     IF(N)1,1,2
  922. 1    RETURN
  923. C
  924. 2    Y=C(1)
  925.     IF(N-2)1,3,3
  926. C
  927. C       INITIALIZATION
  928. 3    H0=1.
  929.     H1=X
  930. C
  931.     DO 4 I=2,N
  932.     H2=X*H1
  933.     H2=H2-H0+H2-(H2-H0)/FLOAT(I)
  934.     H0=H1
  935.     H1=H2
  936. 4    Y=Y+C(I)*H0
  937.     RETURN
  938.     END
  939. C
  940. C    ..................................................................
  941. C
  942. C       SUBROUTINE LLSQ
  943. C
  944. C       PURPOSE
  945. C          TO SOLVE LINEAR LEAST SQUARES PROBLEMS, I.E. TO MINIMIZE
  946. C          THE EUCLIDEAN NORM OF B-A*X, WHERE A IS A M BY N MATRIX
  947. C          WITH M NOT LESS THAN N. IN THE SPECIAL CASE M=N SYSTEMS OF
  948. C          LINEAR EQUATIONS MAY BE SOLVED.
  949. C
  950. C       USAGE
  951. C          CALL LLSQ (A,B,M,N,L,X,IPIV,EPS,IER,AUX)
  952. C
  953. C       DESCRIPTION OF PARAMETERS
  954. C          A      - M BY N COEFFICIENT MATRIX (DESTROYED).
  955. C          B      - M BY L RIGHT HAND SIDE MATRIX (DESTROYED).
  956. C          M      - ROW NUMBER OF MATRICES A AND B.
  957. C          N      - COLUMN NUMBER OF MATRIX A, ROW NUMBER OF MATRIX X.
  958. C          L      - COLUMN NUMBER OF MATRICES B AND X.
  959. C          X      - N BY L SOLUTION MATRIX.
  960. C          IPIV   - INTEGER OUTPUT VECTOR OF DIMENSION N WHICH
  961. C                   CONTAINS INFORMATIONS ON COLUMN INTERCHANGES
  962. C                   IN MATRIX A. (SEE REMARK NO.3).
  963. C          EPS    - INPUT PARAMETER WHICH SPECIFIES A RELATIVE
  964. C                   TOLERANCE FOR DETERMINATION OF RANK OF MATRIX A.
  965. C          IER    - A RESULTING ERROR PARAMETER.
  966. C          AUX    - AUXILIARY STORAGE ARRAY OF DIMENSION MAX(2*N,L).
  967. C                   ON RETURN FIRST L LOCATIONS OF AUX CONTAIN THE
  968. C                   RESULTING LEAST SQUARES.
  969. C
  970. C       REMARKS
  971. C          (1) NO ACTION BESIDES ERROR MESSAGE IER=-2 IN CASE
  972. C              M LESS THAN N.
  973. C          (2) NO ACTION BESIDES ERROR MESSAGE IER=-1 IN CASE
  974. C              OF A ZERO-MATRIX A.
  975. C          (3) IF RANK K OF MATRIX A IS FOUND TO BE LESS THAN N BUT
  976. C              GREATER THAN 0, THE PROCEDURE RETURNS WITH ERROR CODE
  977. C              IER=K INTO CALLING PROGRAM. THE LAST N-K ELEMENTS OF
  978. C              VECTOR IPIV DENOTE THE USELESS COLUMNS IN MATRIX A.
  979. C              THE REMAINING USEFUL COLUMNS FORM A BASE OF MATRIX A.
  980. C          (4) IF THE PROCEDURE WAS SUCCESSFUL, ERROR PARAMETER IER
  981. C              IS SET TO 0.
  982. C
  983. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  984. C          NONE
  985. C
  986. C       METHOD
  987. C          HOUSEHOLDER TRANSFORMATIONS ARE USED TO TRANSFORM MATRIX A
  988. C          TO UPPER TRIANGULAR FORM. AFTER HAVING APPLIED THE SAME
  989. C          TRANSFORMATION TO THE RIGHT HAND SIDE MATRIX B, AN
  990. C          APPROXIMATE SOLUTION OF THE PROBLEM IS COMPUTED BY
  991. C          BACK SUBSTITUTION. FOR REFERENCE, SEE
  992. C          G. GOLUB, NUMERICAL METHODS FOR SOLVING LINEAR LEAST
  993. C          SQUARES PROBLEMS, NUMERISCHE MATHEMATIK, VOL.7,
  994. C          ISS.3 (1965), PP.206-216.
  995. C
  996. C    ..................................................................
  997. C
  998.     SUBROUTINE LLSQ(A,B,M,N,L,X,IPIV,EPS,IER,AUX)
  999. C
  1000.     DIMENSION A(1),B(1),X(1),IPIV(1),AUX(1)
  1001. C
  1002. C    ERROR TEST
  1003.     IF(M-N)30,1,1
  1004. C
  1005. C    GENERATION OF INITIAL VECTOR S(K) (K=1,2,...,N) IN STORAGE
  1006. C    LOCATIONS AUX(K) (K=1,2,...,N)
  1007. 1    PIV=0.
  1008.     IEND=0
  1009.     DO 4 K=1,N
  1010.     IPIV(K)=K
  1011.     H=0.
  1012.     IST=IEND+1
  1013.     IEND=IEND+M
  1014.     DO 2 I=IST,IEND
  1015. 2    H=H+A(I)*A(I)
  1016.     AUX(K)=H
  1017.     IF(H-PIV)4,4,3
  1018. 3    PIV=H
  1019.     KPIV=K
  1020. 4    CONTINUE
  1021. C
  1022. C    ERROR TEST
  1023.     IF(PIV)31,31,5
  1024. C
  1025. C    DEFINE TOLERANCE FOR CHECKING RANK OF A
  1026. 5    SIG=SQRT(PIV)
  1027.     TOL=SIG*ABS(EPS)
  1028. C
  1029. C
  1030. C    DECOMPOSITION LOOP
  1031.     LM=L*M
  1032.     IST=-M
  1033.     DO 21 K=1,N
  1034.     IST=IST+M+1
  1035.     IEND=IST+M-K
  1036.     I=KPIV-K
  1037.     IF(I)8,8,6
  1038. C
  1039. C    INTERCHANGE K-TH COLUMN OF A WITH KPIV-TH IN CASE KPIV.GT.K
  1040. 6    H=AUX(K)
  1041.     AUX(K)=AUX(KPIV)
  1042.     AUX(KPIV)=H
  1043.     ID=I*M
  1044.     DO 7 I=IST,IEND
  1045.     J=I+ID
  1046.     H=A(I)
  1047.     A(I)=A(J)
  1048. 7    A(J)=H
  1049. C
  1050. C    COMPUTATION OF PARAMETER SIG
  1051. 8    IF(K-1)11,11,9
  1052. 9    SIG=0.
  1053.     DO 10 I=IST,IEND
  1054. 10    SIG=SIG+A(I)*A(I)
  1055.     SIG=SQRT(SIG)
  1056. C
  1057. C    TEST ON SINGULARITY
  1058.     IF(SIG-TOL)32,32,11
  1059. C
  1060. C    GENERATE CORRECT SIGN OF PARAMETER SIG
  1061. 11    H=A(IST)
  1062.     IF(H)12,13,13
  1063. 12    SIG=-SIG
  1064. C
  1065. C    SAVE INTERCHANGE INFORMATION
  1066. 13    IPIV(KPIV)=IPIV(K)
  1067.     IPIV(K)=KPIV
  1068. C
  1069. C    GENERATION OF VECTOR UK IN K-TH COLUMN OF MATRIX A AND OF
  1070. C    PARAMETER BETA
  1071.     BETA=H+SIG
  1072.     A(IST)=BETA
  1073.     BETA=1./(SIG*BETA)
  1074.     J=N+K
  1075.     AUX(J)=-SIG
  1076.     IF(K-N)14,19,19
  1077. C
  1078. C    TRANSFORMATION OF MATRIX A
  1079. 14    PIV=0.
  1080.     ID=0
  1081.     JST=K+1
  1082.     KPIV=JST
  1083.     DO 18 J=JST,N
  1084.     ID=ID+M
  1085.     H=0.
  1086.     DO 15 I=IST,IEND
  1087.     II=I+ID
  1088. 15    H=H+A(I)*A(II)
  1089.     H=BETA*H
  1090.     DO 16 I=IST,IEND
  1091.     II=I+ID
  1092. 16    A(II)=A(II)-A(I)*H
  1093. C
  1094. C    UPDATING OF ELEMENT S(J) STORED IN LOCATION AUX(J)
  1095.     II=IST+ID
  1096.     H=AUX(J)-A(II)*A(II)
  1097.     AUX(J)=H
  1098.     IF(H-PIV)18,18,17
  1099. 17    PIV=H
  1100.     KPIV=J
  1101. 18    CONTINUE
  1102. C
  1103. C    TRANSFORMATION OF RIGHT HAND SIDE MATRIX B
  1104. 19    DO 21 J=K,LM,M
  1105.     H=0.
  1106.     IEND=J+M-K
  1107.     II=IST
  1108.     DO 20 I=J,IEND
  1109.     H=H+A(II)*B(I)
  1110. 20    II=II+1
  1111.     H=BETA*H
  1112.     II=IST
  1113.     DO 21 I=J,IEND
  1114.     B(I)=B(I)-A(II)*H
  1115. 21    II=II+1
  1116. C    END OF DECOMPOSITION LOOP
  1117. C
  1118. C
  1119. C    BACK SUBSTITUTION AND BACK INTERCHANGE
  1120.     IER=0
  1121.     I=N
  1122.     LN=L*N
  1123.     PIV=1./AUX(2*N)
  1124.     DO 22 K=N,LN,N
  1125.     X(K)=PIV*B(I)
  1126. 22    I=I+M
  1127.     IF(N-1)26,26,23
  1128. 23    JST=(N-1)*M+N
  1129.     DO 25 J=2,N
  1130.     JST=JST-M-1
  1131.     K=N+N+1-J
  1132.     PIV=1./AUX(K)
  1133.     KST=K-N
  1134.     ID=IPIV(KST)-KST
  1135.     IST=2-J
  1136.     DO 25 K=1,L
  1137.     H=B(KST)
  1138.     IST=IST+N
  1139.     IEND=IST+J-2
  1140.     II=JST
  1141.     DO 24 I=IST,IEND
  1142.     II=II+M
  1143. 24    H=H-A(II)*X(I)
  1144.     I=IST-1
  1145.     II=I+ID
  1146.     X(I)=X(II)
  1147.     X(II)=PIV*H
  1148. 25    KST=KST+M
  1149. C
  1150. C
  1151. C    COMPUTATION OF LEAST SQUARES
  1152. 26    IST=N+1
  1153.     IEND=0
  1154.     DO 29 J=1,L
  1155.     IEND=IEND+M
  1156.     H=0.
  1157.     IF(M-N)29,29,27
  1158. 27    DO 28 I=IST,IEND
  1159. 28    H=H+B(I)*B(I)
  1160.     IST=IST+M
  1161. 29    AUX(J)=H
  1162.     RETURN
  1163. C
  1164. C    ERROR RETURN IN CASE M LESS THAN N
  1165. 30    IER=-2
  1166.     RETURN
  1167. C
  1168. C    ERROR RETURN IN CASE OF ZERO-MATRIX A
  1169. 31    IER=-1
  1170.     RETURN
  1171. C
  1172. C    ERROR RETURN IN CASE OF RANK OF MATRIX A LESS THAN N
  1173. 32    IER=K-1
  1174.     RETURN
  1175.     END
  1176. C
  1177. C    ..................................................................
  1178. C
  1179. C       SUBROUTINE LOAD
  1180. C
  1181. C       PURPOSE
  1182. C          COMPUTE A FACTOR MATRIX (LOADING) FROM EIGENVALUES AND
  1183. C          ASSOCIATED EIGENVECTORS.  THIS SUBROUTINE NORMALLY OCCURS
  1184. C          IN A SEQUENCE OF CALLS TO SUBROUTINES CORRE, EIGEN, TRACE,
  1185. C          LOAD, AND VARMX IN THE PERFORMANCE OF A FACTOR ANALYSIS.
  1186. C
  1187. C       USAGE
  1188. C          CALL LOAD (M,K,R,V)
  1189. C
  1190. C       DESCRIPTION OF PARAMETERS
  1191. C          M     - NUMBER OF VARIABLES.
  1192. C          K     - NUMBER OF FACTORS. K MUST BE GREATER THAN OR EQUAL
  1193. C                  TO 1 AND LESS THAN OR EQUAL TO M.
  1194. C          R     - A MATRIX (SYMMETRIC AND STORED IN COMPRESSED FORM
  1195. C                  WITH ONLY UPPER TRIANGLE BY COLUMN IN CORE) CON-
  1196. C                  TAINING EIGENVALUES IN DIAGONAL.  EIGENVALUES ARE
  1197. C                  ARRANGED IN DESCENDING ORDER, AND FIRST K
  1198. C                  EIGENVALUES ARE USED BY THIS SUBROUTINE.  THE ORDER
  1199. C                  OF MATRIX R IS M BY M.  ONLY M*(M+1)/2 ELEMENTS ARE
  1200. C                  IN STORAGE.  (STORAGE MODE OF 1)
  1201. C          V     - WHEN THIS SUBROUTINE IS CALLED, MATRIX V (M X M)
  1202. C                  CONTAINS EIGENVECTORS COLUMNWISE.  UPON RETURNING TO
  1203. C                  THE CALLING PROGRAM, MATRIX V CONTAINS A FACTOR
  1204. C                  MATRIX (M X K).
  1205. C
  1206. C       REMARKS
  1207. C          NONE
  1208. C
  1209. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  1210. C          NONE
  1211. C
  1212. C       METHOD
  1213. C          NORMALIZED EIGENVECTORS ARE CONVERTED TO THE FACTOR PATTERN
  1214. C          BY MULTIPLYING THE ELEMENTS OF EACH VECTOR BY THE SQUARE
  1215. C          ROOT OF THE CORRESPONDING EIGENVALUE.
  1216. C
  1217. C    ..................................................................
  1218. C
  1219.     SUBROUTINE LOAD (M,K,R,V)
  1220.     DIMENSION R(1),V(1)
  1221. C
  1222. C       ...............................................................
  1223. C
  1224. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  1225. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  1226. C       STATEMENT WHICH FOLLOWS.
  1227. C
  1228. C    DOUBLE PRECISION R,V,SQ
  1229. C
  1230. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  1231. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  1232. C       ROUTINE.
  1233. C
  1234. C       THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO
  1235. C       CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS.  SQRT IN STATEMENT
  1236. C       150 MUST BE CHANGED TO DSQRT.
  1237. C
  1238. C       ...............................................................
  1239. C
  1240.     L=0
  1241.     JJ=0
  1242.     DO 160 J=1,K
  1243.     JJ=JJ+J
  1244. 150    SQ= SQRT(R(JJ))
  1245.     DO 160 I=1,M
  1246.     L=L+1
  1247. 160    V(L)=SQ*V(L)
  1248.     RETURN
  1249.     END
  1250. C
  1251. C     ..................................................................
  1252. C
  1253. C        SUBROUTINE LOC
  1254. C
  1255. C        PURPOSE
  1256. C           COMPUTE A VECTOR SUBSCRIPT FOR AN ELEMENT IN A MATRIX OF
  1257. C           SPECIFIED STORAGE MODE
  1258. C
  1259. C        USAGE
  1260. C           CALL LOC (I,J,IR,N,M,MS)
  1261. C
  1262. C        DESCRIPTION OF PARAMETERS
  1263. C           I   - ROW NUMBER OF ELEMENT
  1264. C           J   - COLUMN NUMBER  OF ELEMENT
  1265. C           IR  - RESULTANT VECTOR SUBSCRIPT
  1266. C           N   - NUMBER OF ROWS IN MATRIX
  1267. C           M   - NUMBER OF COLUMNS IN MATRIX
  1268. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX
  1269. C                  0 - GENERAL
  1270. C                  1 - SYMMETRIC
  1271. C                  2 - DIAGONAL
  1272. C
  1273. C        REMARKS
  1274. C           NONE
  1275. C
  1276. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  1277. C           NONE
  1278. C
  1279. C        METHOD
  1280. C           MS=0   SUBSCRIPT IS COMPUTED FOR A MATRIX WITH N*M ELEMENTS
  1281. C                  IN STORAGE (GENERAL MATRIX)
  1282. C           MS=1   SUBSCRIPT IS COMPUTED FOR A MATRIX WITH N*(N+1)/2 IN
  1283. C                  STORAGE (UPPER TRIANGLE OF SYMMETRIC MATRIX). IF
  1284. C                  ELEMENT IS IN LOWER TRIANGULAR PORTION, SUBSCRIPT IS
  1285. C                  CORRESPONDING ELEMENT IN UPPER TRIANGLE.
  1286. C           MS=2   SUBSCRIPT IS COMPUTED FOR A MATRIX WITH N ELEMENTS
  1287. C                  IN STORAGE (DIAGONAL ELEMENTS OF DIAGONAL MATRIX).
  1288. C                  IF ELEMENT IS NOT ON DIAGONAL (AND THEREFORE NOT IN
  1289. C                  STORAGE), IR IS SET TO ZERO.
  1290. C
  1291. C     ..................................................................
  1292. C
  1293.       SUBROUTINE LOC(I,J,IR,N,M,MS)
  1294. C
  1295.       IX=I
  1296.       JX=J
  1297.       IF(MS-1) 10,20,30
  1298.    10 IRX=N*(JX-1)+IX
  1299.       GO TO 36
  1300.    20 IF(IX-JX) 22,24,24
  1301.    22 IRX=IX+(JX*JX-JX)/2
  1302.       GO TO 36
  1303.    24 IRX=JX+(IX*IX-IX)/2
  1304.       GO TO 36
  1305.    30 IRX=0
  1306.       IF(IX-JX) 36,32,36
  1307.    32 IRX=IX
  1308.    36 IR=IRX
  1309.       RETURN
  1310.       END
  1311. C
  1312. C    ..................................................................
  1313. C
  1314. C       SUBROUTINE MADD
  1315. C
  1316. C       PURPOSE
  1317. C          ADD TWO MATRICES ELEMENT BY ELEMENT TO FORM RESULTANT
  1318. C          MATRIX
  1319. C
  1320. C       USAGE
  1321. C          CALL MADD(A,B,R,N,M,MSA,MSB)
  1322. C
  1323. C       DESCRIPTION OF PARAMETERS
  1324. C          A - NAME OF INPUT MATRIX
  1325. C          B - NAME OF INPUT MATRIX
  1326. C          R - NAME OF OUTPUT MATRIX
  1327. C          N - NUMBER OF ROWS IN A,B,R
  1328. C          M - NUMBER OF COLUMNS IN A,B,R
  1329. C          MSA - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  1330. C                 0 - GENERAL
  1331. C                 1 - SYMMETRIC
  1332. C                 2 - DIAGONAL
  1333. C          MSB - SAME AS MSA EXCEPT FOR MATRIX B
  1334. C
  1335. C       REMARKS
  1336. C          NONE
  1337. C
  1338. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  1339. C          LOC
  1340. C
  1341. C       METHOD
  1342. C          STORAGE MODE OF OUTPUT MATRIX IS FIRST DETERMINED. ADDITION
  1343. C          OF CORRESPONDING ELEMENTS IS THEN PERFORMED.
  1344. C          THE FOLLOWING TABLE SHOWS THE STORAGE MODE OF THE OUTPUT
  1345. C          MATRIX FOR ALL COMBINATIONS OF INPUT MATRICES
  1346. C                        A                B                 R
  1347. C                     GENERAL          GENERAL          GENERAL
  1348. C                     GENERAL          SYMMETRIC        GENERAL
  1349. C                     GENERAL          DIAGONAL         GENERAL
  1350. C                     SYMMETRIC        GENERAL          GENERAL
  1351. C                     SYMMETRIC        SYMMETRIC        SYMMETRIC
  1352. C                     SYMMETRIC        DIAGONAL         SYMMETRIC
  1353. C                     DIAGONAL         GENERAL          GENERAL
  1354. C                     DIAGONAL         SYMMETRIC        SYMMETRIC
  1355. C                     DIAGONAL         DIAGONAL         DIAGONAL
  1356. C
  1357. C    ..................................................................
  1358. C
  1359.     SUBROUTINE MADD(A,B,R,N,M,MSA,MSB)
  1360.     DIMENSION A(1),B(1),R(1)
  1361. C
  1362. C       DETERMINE STORAGE MODE OF OUTPUT MATRIX
  1363. C
  1364.     IF(MSA-MSB) 7,5,7
  1365. 5    CALL LOC(N,M,NM,N,M,MSA)
  1366.     GO TO 100
  1367. 7    MTEST=MSA*MSB
  1368.     MSR=0
  1369.     IF(MTEST) 20,20,10
  1370. 10    MSR=1
  1371. 20    IF(MTEST-2) 35,35,30
  1372. 30    MSR=2
  1373. C
  1374. C       LOCATE ELEMENTS AND PERFORM ADDITION
  1375. C
  1376. 35    DO 90 J=1,M
  1377.     DO 90 I=1,N
  1378.     CALL LOC(I,J,IJR,N,M,MSR)
  1379.     IF(IJR) 40,90,40
  1380. 40    CALL LOC(I,J,IJA,N,M,MSA)
  1381.     AEL=0.0
  1382.     IF(IJA) 50,60,50
  1383. 50    AEL=A(IJA)
  1384. 60    CALL LOC(I,J,IJB,N,M,MSB)
  1385.     BEL=0.0
  1386.     IF(IJB) 70,80,70
  1387. 70    BEL=B(IJB)
  1388. 80    R(IJR)=AEL+BEL
  1389. 90    CONTINUE
  1390.     RETURN
  1391. C
  1392. C       ADD MATRICES FOR OTHER CASES
  1393. C
  1394. 100    DO 110 I=1,NM
  1395. 110    R(I)=A(I)+B(I)
  1396.     RETURN
  1397.     END
  1398. C
  1399. C    ..................................................................
  1400. C
  1401. C       SUBROUTINE MATA
  1402. C
  1403. C       PURPOSE
  1404. C          PREMULTIPLY A MATRIX BY ITS TRANSPOSE TO FORM A
  1405. C          SYMMETRIC MATRIX
  1406. C
  1407. C       USAGE
  1408. C          CALL MATA(A,R,N,M,MS)
  1409. C
  1410. C       DESCRIPTION OF PARAMETERS
  1411. C          A  - NAME OF INPUT MATRIX
  1412. C          R  - NAME OF OUTPUT MATRIX
  1413. C          N  - NUMBER OF ROWS IN A
  1414. C          M  - NUMBER OF COLUMNS IN A. ALSO NUMBER OF ROWS AND
  1415. C               NUMBER OF COLUMNS OF R.
  1416. C          MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  1417. C                 0 - GENERAL
  1418. C                 1 - SYMMETRIC
  1419. C                 2 - DIAGONAL
  1420. C
  1421. C       REMARKS
  1422. C          MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRIX A
  1423. C          MATRIX R IS ALWAYS A SYMMETRIC MATRIX WITH A STORAGE MODE=1
  1424. C
  1425. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  1426. C          LOC
  1427. C
  1428. C       METHOD
  1429. C          CALCULATION OF (A TRANSPOSE A) RESULTS IN A SYMMETRIC MATRIX
  1430. C          REGARDLESS OF THE STORAGE MODE OF THE INPUT MATRIX. THE
  1431. C          ELEMENTS OF MATRIX A ARE NOT CHANGED.
  1432. C
  1433. C    ..................................................................
  1434. C
  1435.     SUBROUTINE MATA(A,R,N,M,MS)
  1436.     DIMENSION A(1),R(1)
  1437. C
  1438.     DO 60 K=1,M
  1439.     KX=(K*K-K)/2
  1440.     DO 60 J=1,M
  1441.     IF(J-K) 10,10,60
  1442. 10    IR=J+KX
  1443.     R(IR)=0
  1444.     DO 60 I=1,N
  1445.     IF(MS) 20,40,20
  1446. 20    CALL LOC(I,J,IA,N,M,MS)
  1447.     CALL LOC(I,K,IB,N,M,MS)
  1448.     IF(IA) 30,60,30
  1449. 30    IF(IB) 50,60,50
  1450. 40    IA=N*(J-1)+I
  1451.     IB=N*(K-1)+I
  1452. 50    R(IR)=R(IR)+A(IA)*A(IB)
  1453. 60    CONTINUE
  1454.     RETURN
  1455.     END
  1456. C
  1457. C    ..................................................................
  1458. C
  1459. C       SUBROUTINE MATIN
  1460. C
  1461. C       PURPOSE
  1462. C          READS CONTROL CARD AND MATRIX DATA ELEMENTS FROM LOGICAL
  1463. C          UNIT 5
  1464. C
  1465. C       USAGE
  1466. C          CALL MATIN(ICODE,A,ISIZE,IROW,ICOL,IS,IER)
  1467. C
  1468. C       DESCRIPTION OF PARAMETERS
  1469. C          ICODE-UPON RETURN, ICODE WILL CONTAIN FOUR DIGIT
  1470. C                IDENTIFICATION CODE FROM MATRIX PARAMETER CARD
  1471. C          A    -DATA AREA FOR INPUT MATRIX
  1472. C          ISIZE-NUMBER OF ELEMENTS DIMENSIONED BY USER FOR AREA A
  1473. C          IROW -UPON RETURN, IROW WILL CONTAIN ROW DIMENSION FROM
  1474. C                MATRIX PARAMETER CARD
  1475. C          ICOL -UPON RETURN, ICOL WILL CONTAIN COLUMN DIMENSION FROM
  1476. C                MATRIX PARAMETER CARD
  1477. C          IS   -UPON RETURN, IS WILL CONTAIN STORAGE MODE CODE FROM
  1478. C                MATRIX PARAMETER CARD WHERE
  1479. C                IS=0 GENERAL MATRIX
  1480. C                IS=1 SYMMETRIC MATRIX
  1481. C                IS=2 DIAGONAL MATRIX
  1482. C          IER  -UPON RETURN, IER WILL CONTAIN AN ERROR CODE WHERE
  1483. C                IER=0   NO ERROR
  1484. C                IER=1   ISIZE IS LESS THAN NUMBER OF ELEMENTS IN
  1485. C                        INPUT MATRIX
  1486. C                IER=2   INCORRECT NUMBER OF DATA CARDS
  1487. C
  1488. C       REMARKS
  1489. C          NONE
  1490. C
  1491. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  1492. C          LOC
  1493. C
  1494. C       METHOD
  1495. C          SUBROUTINE ASSUMES THAT INPUT MATRIX CONSISTS OF PARAMETER
  1496. C          CARD FOLLOWED BY DATA CARDS
  1497. C          PARAMETER CARD HAS THE FOLLOWING FORMAT
  1498. C            COL. 1- 2 BLANK
  1499. C            COL. 3- 6 UP TO FOUR DIGIT IDENTIFICATION CODE
  1500. C            COL. 7-10 NUMBER OF ROWS IN MATRIX
  1501. C            COL.11-14 NUMBER OF COLUMNS IN MATRIX
  1502. C            COL.15-16 STORAGE MODE OF MATRIX WHERE
  1503. C                0 - GENERAL MATRIX
  1504. C                1 - SYMMETRIC MATRIX
  1505. C                2 - DIAGONAL MATRIX
  1506. C          DATA CARDS ARE ASSUMED TO HAVE SEVEN FIELDS OF TEN COLUMNS
  1507. C          EACH.  DECIMAL POINT MAY APPEAR ANYWHERE IN A FIELD.  IF NO
  1508. C          DECIMAL POINT IS INCLUDED, IT IS ASSUMED THAT THE DECIMAL
  1509. C          POINT IS AT THE END OF THE 10 COLUMN FIELD. NUMBER IN EACH
  1510. C          FIELD MAY BE PRECEDED BY BLANKS.  DATA ELEMENTS MUST BE
  1511. C          PUNCHED BY ROW.  A ROW MAY CONTINUE FROM CARD TO CARD.
  1512. C          HOWEVER EACH NEW ROW MUST START IN THE FIRST FIELD OF THE
  1513. C          NEXT CARD.  ONLY THE UPPER TRIANGULAR PORTION OF A SYMMETRIC
  1514. C          OR THE DIAGONAL ELEMENTS OF A DIAGONAL MATRIX ARE CONTAINED
  1515. C          ON DATA CARDS.  THE FIRST ELEMENT OF EACH NEW ROW WILL BE
  1516. C          THE DIAGONAL ELEMENT FOR A MATRIX WITH  SYMMETRIC OR
  1517. C          DIAGONAL STORAGE MODE. COLUMNS 71-80 OF DATA CARDS MAY BE
  1518. C          USED FOR IDENTIFICATION, SEQUENCE NUMBERING, ETC..
  1519. C          THE LAST DATA CARD FOR ANY MATRIX MUST BE FOLLOWED BY A CARD
  1520. C          WITH A 9 PUNCH IN COLUMN 1.
  1521. C
  1522. C.......................................................................
  1523. C
  1524.     SUBROUTINE MATIN(ICODE,   A,ISIZE,IROW,ICOL,IS,IER)
  1525.     DIMENSION A(1)
  1526.     DIMENSION CARD(8)
  1527.     LOGICAL EOF
  1528. 1    FORMAT(7F10.0)
  1529. 2    FORMAT(I6,2I4,I2)
  1530. C
  1531.     IDC=7
  1532.     IER=0
  1533.     CALL CHKEOF (EOF)
  1534.     READ( 5,2)ICODE,IROW,ICOL,IS
  1535.     IF (EOF) GOTO 999
  1536.     CALL LOC(IROW,ICOL,ICNT,IROW,ICOL,IS)
  1537.     IF(ISIZE-ICNT)6,7,7
  1538. 6    IER=1
  1539. 7    IF (ICNT)38,38,8
  1540. 8    ICOLT=ICOL
  1541.     IROCR=1
  1542. C
  1543. C       COMPUTE NUMBER OF CARDS FOR THIS ROW
  1544. C
  1545. 11    IRCDS=(ICOLT-1)/IDC+1
  1546.     IF(IS-1)15,15,12
  1547. 12    IRCDS=1
  1548. C
  1549. C       SET UP LOOP FOR NUMBER OF CARDS IN ROW
  1550. C
  1551. 15    DO 31 K=1,IRCDS
  1552.     READ(5,1)(CARD(I),I=1,IDC)
  1553. C
  1554. C       SKIP THROUGH DATA CARDS IF INPUT AREA TOO SMALL
  1555. C
  1556.     IF(IER)16,16,31
  1557. 16    L=0
  1558. C
  1559. C       COMPUTE COLUMN NUMBER FOR FIRST FIELD IN CURRENT CARD
  1560. C
  1561.     JS=(K-1)*IDC+ICOL-ICOLT+1
  1562.     JE=JS+IDC-1
  1563.     IF(IS-1)19,19,17
  1564. 17    JE=JS
  1565. C
  1566. C       SET UP LOOP FOR DATA ELEMENTS  WITHIN CARD
  1567. C
  1568. 19    DO 30 J=JS,JE
  1569.     IF(J-ICOL)20,20,31
  1570. 20    CALL LOC(IROCR ,J,IJ,IROW,ICOL,IS)
  1571.     L=L+1
  1572. 30    A(IJ)=CARD(L)
  1573. 31    CONTINUE
  1574.     IROCR=IROCR+1
  1575.     IF(IROW-IROCR) 38,35,35
  1576. 35    IF(IS-1)37,36,36
  1577. 36    ICOLT=ICOLT-1
  1578. 37    GO TO 11
  1579. 38    READ(5,1) CARD(1)
  1580.     CALL CHKEOF (EOF)
  1581.     IF (EOF) GOTO 999
  1582.     IF(CARD(1)-9.E9)39,40,39
  1583. 39    IER=2
  1584. 40    RETURN
  1585. 999    STOP
  1586.     END
  1587. C
  1588. C    ..................................................................
  1589. C
  1590. C       SAMPLE MAIN PROGRAM FOR CANONICAL CORRELATION - MCANO
  1591. C
  1592. C       PURPOSE
  1593. C          (1) READ THE PROBLEM PARAMETER CARD FOR A CANONICAL
  1594. C          CORRELATION, (2) CALL TWO SUBROUTINES TO CALCULATE SIMPLE
  1595. C          CORRELATIONS, CANONICAL CORRELATIONS, CHI-SQUARES, DEGREES
  1596. C          OF FREEDOM FOR CHI-SQUARES, AND COEFFICIENTS FOR LEFT AND
  1597. C          RIGHT HAND VARIABLES, NAMELY CANONICAL VARIATES, AND (3)
  1598. C          PRINT THE RESULTS.
  1599. C
  1600. C       REMARKS
  1601. C          THE NUMBER OF LEFT HAND VARIABLES MUST BE GREATER THAN
  1602. C          OR EQUAL TO THE NUMBER OF RIGHT HAND VARIABLES.
  1603. C
  1604. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  1605. C          CORRE  (WHICH, IN TURN, CALLS THE INPUT SUBROUTINE NAMED
  1606. C                 DATA.)
  1607. C          CANOR  (WHICH, IN TURN, CALLS THE SUBROUTINES MINV AND
  1608. C                 NROOT.  NROOT, IN TURN, CALLS THE SUBROUTINE EIGEN.)
  1609. C
  1610. C       METHOD
  1611. C          REFER TO W. W. COOLEY AND P. R. LOHNES, 'MULTIVARIATE PRO-
  1612. C          CEDURES FOR THE BEHAVIORAL SCIENCES', JOHN WILEY AND SONS,
  1613. C          1962, CHAPTER 3.
  1614. C
  1615. C    ..................................................................
  1616. C
  1617. C    THE FOLLOWING DIMENSIONS MUST BE GREATER THAN OR EQUAL TO THE
  1618. C    TOTAL NUMBER OF VARIABLES M (M=MP+MQ, WHERE MP IS THE NUMBER OF
  1619. C    LEFT HAND VARIABLES, AND MQ IS THE NUMBER OF RIGHT HAND VARI-
  1620. C    ABLES)..
  1621. cC
  1622. c       DIMENSION XBAR(20),STD(20),CANR(20),CHISQ(20),NDF(20)
  1623. cC
  1624. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  1625. cC    PRODUCT OF M*M..
  1626. cC
  1627. c       DIMENSION RX(400)
  1628. cC
  1629. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO
  1630. cC    (M+1)*M/2..
  1631. cC
  1632. c       DIMENSION R(210)
  1633. cC
  1634. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  1635. cC    PRODUCT OF MP*MQ..
  1636. cC
  1637. c       DIMENSION COEFL(400)
  1638. cC
  1639. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  1640. cC    PRODUCT OF MQ*MQ..
  1641. cC
  1642. c       DIMENSION COEFR(400)
  1643. cC
  1644. cC    ..................................................................
  1645. cC
  1646. cC       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  1647. cC       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  1648. cC       STATEMENT WHICH FOLLOWS.
  1649. cC
  1650. cC    DOUBLE PRECISION XBAR,STD,RX,R,CANR,CHISQ,COEFL,COEFR
  1651. cC
  1652. cC       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  1653. cC       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  1654. cC       ROUTINE.
  1655. cC
  1656. cC       ...............................................................
  1657. cC
  1658. c1    FORMAT(A4,A2,I5,2I2)
  1659. c2    FORMAT(27H1CANONICAL CORRELATION.....,A4,A2//22H   NO. OF OBSERVAT
  1660. c     1IONS,8X,I4/29H   NO. OF LEFT HAND VARIABLES,I5/30H   NO. OF RIGHT
  1661. c     3HAND VARIABLES,I4/)
  1662. c3    FORMAT(6H0MEANS/(8F15.5))
  1663. c4    FORMAT(20H0STANDARD DEVIATIONS/(8F15.5))
  1664. c5    FORMAT(25H0CORRELATION COEFFICIENTS)
  1665. c6    FORMAT(4H0ROW,I3/(10F12.5))
  1666. c7    FORMAT(1H0//12H   NUMBER OF, 7X,7HLARGEST,7X,13HCORRESPONDING,31X,
  1667. c     17HDEGREES/13H  EIGENVALUES,5X,10HEIGENVALUE,7X,9HCANONICAL,7X,
  1668. c     26HLAMBDA,5X,10HCHI-SQUARE,7X,2H0F/4X,7HREMOVED,7X,9HREMAINING,7X,
  1669. c     311HCORRELATION,32X,7HFREEDOM/)
  1670. c8    FORMAT(1H ,I7,F19.5,F16.5,2F14.5,5X,I5)
  1671. c9    FORMAT(1H0/22H CANONICAL CORRELATION,F12.5)
  1672. c10    FORMAT(39H0  COEFFICIENTS FOR LEFT HAND VARIABLES/(8F15.5))
  1673. c11    FORMAT(40H0  COEFFICIENTS FOR RIGHT HAND VARIABLES/(8F15.5))
  1674. cC    DOUBLE PRECISION TMPFIL,FILE
  1675. cC    OPEN (UNIT=5, DEVICE='CDR', ACCESS='SEQIN')
  1676. cC    OPEN (UNIT=6, DEVICE='LPT', ACCESS='SEQOUT')
  1677. cC    FILE = TMPFIL('SSP')
  1678. cC    OPEN (UNIT=9, DEVICE='DSK', FILE=FILE, ACCESS='SEQINOUT',
  1679. cC    1    DISPOSE='DELETE')
  1680. cC
  1681. cC    ..................................................................
  1682. cC
  1683. cC    READ PROBLEM PARAMETER CARD
  1684. cC
  1685. c    LOGICAL EOF
  1686. c    CALL CHKEOF (EOF)
  1687. c100    READ (5,1) PR,PR1,N,MP,MQ
  1688. c    IF (EOF) GOTO 999
  1689. cC       PR.......PROBLEM NUMBER (MAY BE ALPHAMERIC)
  1690. cC       PR1......PROBLEM NUMBER (CONTINUED)
  1691. cC       N........NUMBER OF OBSERVATIONS
  1692. cC       MP.......NUMBER OF LEFT HAND VARIABLES
  1693. cC       MQ.......NUMBER OF RIGHT HAND VARIABLES
  1694. cC
  1695. c    WRITE (6,2) PR,PR1,N,MP,MQ
  1696. cC
  1697. c    M=MP+MQ
  1698. c    IO=0
  1699. c    X=0.0
  1700. cC
  1701. c    CALL CORRE (N,M,IO,X,XBAR,STD,RX,R,CANR,CHISQ,COEFL)
  1702. cC
  1703. cC    PRINT MEANS, STANDARD DEVIATIONS, AND CORRELATION
  1704. cC    COEFFICIENTS OF ALL VARIABLES
  1705. cC
  1706. c    WRITE (6,3) (XBAR(I),I=1,M)
  1707. c    WRITE (6,4) (STD(I),I=1,M)
  1708. c    WRITE (6,5)
  1709. c    DO 160 I=1,M
  1710. c    DO 150 J=1,M
  1711. c    IF(I-J) 120, 130, 130
  1712. c120    L=I+(J*J-J)/2
  1713. c    GO TO 140
  1714. c130    L=J+(I*I-I)/2
  1715. c140    CANR(J)=R(L)
  1716. c150    CONTINUE
  1717. c160    WRITE (6,6) I,(CANR(J),J=1,M)
  1718. cC
  1719. c    CALL CANOR (N,MP,MQ,R,XBAR,STD,CANR,CHISQ,NDF,COEFR,COEFL,RX)
  1720. cC
  1721. cC    PRINT EIGENVALUES, CANONICAL CORRELATIONS, LAMBDA, CHI-SQUARES,
  1722. cC    DEGREES OF FREEDOMS
  1723. cC
  1724. c    WRITE (6,7)
  1725. c    DO 170 I=1,MQ
  1726. c    N1=I-1
  1727. cC
  1728. cC       TEST WHETHER EIGENVALUE IS GREATER THAN ZERO
  1729. cC
  1730. c    IF(XBAR(I)) 165, 165, 170
  1731. c165    MM=N1
  1732. c    GO TO 175
  1733. c170    WRITE (6,8) N1,XBAR(I),CANR(I),STD(I),CHISQ(I),NDF(I)
  1734. c    MM=MQ
  1735. cC
  1736. cC    PRINT CANONICAL COEFFICIENTS
  1737. cC
  1738. c175    N1=0
  1739. c    N2=0
  1740. c    DO 200 I=1,MM
  1741. c    WRITE (6,9) CANR(I)
  1742. c    DO 180 J=1,MP
  1743. c    N1=N1+1
  1744. c180    XBAR(J)=COEFL(N1)
  1745. c    WRITE (6,10) (XBAR(J),J=1,MP)
  1746. c    DO 190 J=1,MQ
  1747. c    N2=N2+1
  1748. c190    XBAR(J)=COEFR(N2)
  1749. c    WRITE (6,11) (XBAR(J),J=1,MQ)
  1750. c200    CONTINUE
  1751. c    GO TO 100
  1752. c999    STOP
  1753. c    END
  1754. C
  1755. C    ..................................................................
  1756. C
  1757. C       SUBROUTINE MCHB
  1758. C
  1759. C       PURPOSE
  1760. C          FOR A GIVEN POSITIVE-DEFINITE M BY M MATRIX A WITH SYMMETRIC
  1761. C          BAND STRUCTURE AND - IF NECESSARY - A GIVEN GENERAL M BY N
  1762. C          MATRIX R, THE FOLLOWING CALCULATIONS (DEPENDENT ON THE
  1763. C          VALUE OF THE DECISION PARAMETER IOP) ARE PERFORMED
  1764. C          (1) MATRIX A IS FACTORIZED (IF IOP IS NOT NEGATIVE), THAT
  1765. C              MEANS BAND MATRIX TU WITH UPPER CODIAGONALS ONLY IS
  1766. C              GENERATED ON THE LOCATIONS OF A SUCH THAT
  1767. C              TRANSPOSE(TU)*TU=A.
  1768. C          (2) MATRIX R IS MULTIPLIED ON THE LEFT BY INVERSE(TU)
  1769. C              AND/OR INVERSE(TRANSPOSE(TU)) AND THE RESULT IS STORED
  1770. C              IN THE LOCATIONS OF R.
  1771. C          THIS SUBROUTINE ESPECIALLY CAN BE USED TO SOLVE THE SYSTEM
  1772. C          OF SIMULTANEOUS LINEAR EQUATIONS A*X=R WITH POSITIVE-
  1773. C          DEFINITE COEFFICIENT MATRIX A OF SYMMETRIC BAND STRUCTURE.
  1774. C
  1775. C       USAGE
  1776. C          CALL MCHB (R,A,M,N,MUD,IOP,EPS,IER)
  1777. C
  1778. C       DESCRIPTION OF PARAMETERS
  1779. C          R      - INPUT IN CASES IOP=-3,-2,-1,1,2,3  M BY N RIGHT
  1780. C                         HAND SIDE MATRIX,
  1781. C                         IN CASE IOP=0  IRRELEVANT.
  1782. C                   OUTPUT IN CASES IOP=1,-1  INVERSE(A)*R,
  1783. C                          IN CASES IOP=2,-2  INVERSE(TU)*R,
  1784. C                          IN CASES IOP=3,-3  INVERSE(TRANSPOSE(TU))*R,
  1785. C                          IN CASE  IOP=0     UNCHANGED.
  1786. C          A      - INPUT IN CASES IOP=0,1,2,3 M BY M POSITIVE-DEFINITE
  1787. C                         COEFFICIENT MATRIX OF SYMMETRIC BAND STRUC-
  1788. C                         TURE STORED IN COMPRESSED FORM (SEE REMARKS),
  1789. C                         IN CASES IOP=-1,-2,-3  M BY M BAND MATRIX TU
  1790. C                         WITH UPPER CODIAGONALS ONLY, STORED IN
  1791. C                         COMPRESSED FORM (SEE REMARKS).
  1792. C                   OUTPUT IN ALL CASES  BAND MATRIX TU WITH UPPER
  1793. C                          CODIAGONALS ONLY, STORED IN COMPRESSED FORM
  1794. C                          (THAT MEANS UNCHANGED IF IOP=-1,-2,-3).
  1795. C          M      - INPUT VALUE SPECIFYING THE NUMBER OF ROWS AND
  1796. C                   COLUMNS OF A AND THE NUMBER OF ROWS OF R.
  1797. C          N      - INPUT VALUE SPECIFYING THE NUMBER OF COLUMNS OF R
  1798. C                   (IRRELEVANT IN CASE IOP=0).
  1799. C          MUD    - INPUT VALUE SPECIFYING THE NUMBER OF UPPER
  1800. C                   CODIAGONALS OF A.
  1801. C          IOP    - ONE OF THE VALUES -3,-2,-1,0,1,2,3 GIVEN AS INPUT
  1802. C                   AND USED AS DECISION PARAMETER.
  1803. C          EPS    - INPUT VALUE USED AS RELATIVE TOLERANCE FOR TEST ON
  1804. C                   LOSS OF SIGNIFICANT DIGITS.
  1805. C          IER    - RESULTING ERROR PARAMETER CODED AS FOLLOWS
  1806. C                    IER=0  - NO ERROR,
  1807. C                    IER=-1 - NO RESULT BECAUSE OF WRONG INPUT
  1808. C                             PARAMETERS M,MUD,IOP (SEE REMARKS),
  1809. C                             OR BECAUSE OF A NONPOSITIVE RADICAND AT
  1810. C                             SOME FACTORIZATION STEP,
  1811. C                             OR BECAUSE OF A ZERO DIAGONAL ELEMENT
  1812. C                             AT SOME DIVISION STEP.
  1813. C                    IER=K  - WARNING DUE TO POSSIBLE LOSS OF SIGNIFI-
  1814. C                             CANCE INDICATED AT FACTORIZATION STEP K+1
  1815. C                             WHERE RADICAND WAS NO LONGER GREATER
  1816. C                             THAN EPS*A(K+1,K+1).
  1817. C
  1818. C       REMARKS
  1819. C          UPPER PART OF SYMMETRIC BAND MATRIX A CONSISTING OF MAIN
  1820. C          DIAGONAL AND MUD UPPER CODIAGONALS (RESP. BAND MATRIX TU
  1821. C          CONSISTING OF MAIN DIAGONAL AND MUD UPPER CODIAGONALS)
  1822. C          IS ASSUMED TO BE STORED IN COMPRESSED FORM, I.E. ROWWISE
  1823. C          IN TOTALLY NEEDED M+MUD*(2M-MUD-1)/2 SUCCESSIVE STORAGE
  1824. C          LOCATIONS. ON RETURN UPPER BAND FACTOR TU (ON THE LOCATIONS
  1825. C          OF A) IS STORED IN THE SAME WAY.
  1826. C          RIGHT HAND SIDE MATRIX R IS ASSUMED TO BE STORED COLUMNWISE
  1827. C          IN N*M SUCCESSIVE STORAGE LOCATIONS. ON RETURN RESULT MATRIX
  1828. C          INVERSE(A)*R OR INVERSE(TU)*R OR INVERSE(TRANSPOSE(TU))*R
  1829. C          IS STORED COLUMNWISE TOO ON THE LOCATIONS OF R.
  1830. C          INPUT PARAMETERS M, MUD, IOP SHOULD SATISFY THE FOLLOWING
  1831. C          RESTRICTIONS     MUD NOT LESS THAN ZERO,
  1832. C                           1+MUD NOT GREATER THAN M,
  1833. C                           ABS(IOP) NOT GREATER THAN 3.
  1834. C          NO ACTION BESIDES ERROR MESSAGE IER=-1 TAKES PLACE IF THESE
  1835. C          RESTRICTIONS ARE NOT SATISFIED.
  1836. C          THE PROCEDURE GIVES RESULTS IF THE RESTRICTIONS ON INPUT
  1837. C          PARAMETERS ARE SATISFIED, IF RADICANDS AT ALL FACTORIZATION
  1838. C          STEPS ARE POSITIVE AND/OR IF ALL DIAGONAL ELEMENTS OF
  1839. C          UPPER BAND FACTOR TU ARE NONZERO.
  1840. C
  1841. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  1842. C          NONE
  1843. C
  1844. C       METHOD
  1845. C          FACTORIZATION IS DONE USING CHOLESKY-S SQUARE-ROOT METHOD,
  1846. C          WHICH GENERATES THE UPPER BAND MATRIX TU SUCH THAT
  1847. C          TRANSPOSE(TU)*TU=A. TU IS RETURNED AS RESULT ON THE
  1848. C          LOCATIONS OF A. FURTHER, DEPENDENT ON THE ACTUAL VALUE OF
  1849. C          IOP, DIVISION OF R BY TRANSPOSE(TU) AND/OR TU IS PERFORMED
  1850. C          AND THE RESULT IS RETURNED ON THE LOCATIONS OF R.
  1851. C          FOR REFERENCE, SEE H. RUTISHAUSER, ALGORITHMUS 1 - LINEARES
  1852. C          GLEICHUNGSSYSTEM MIT SYMMETRISCHER POSITIV-DEFINITER
  1853. C          BANDMATRIX NACH CHOLESKY - , COMPUTING (ARCHIVES FOR
  1854. C          ELECTRONIC COMPUTING), VOL.1, ISS.1 (1966), PP.77-78.
  1855. C
  1856. C    ..................................................................
  1857. C
  1858.     SUBROUTINE MCHB(R,A,M,N,MUD,IOP,EPS,IER)
  1859. C
  1860. C
  1861.     DIMENSION R(1),A(1)
  1862.     DOUBLE PRECISION TOL,SUM,PIV
  1863. C
  1864. C       TEST ON WRONG INPUT PARAMETERS
  1865.     IF(IABS(IOP)-3)1,1,43
  1866. 1    IF(MUD)43,2,2
  1867. 2    MC=MUD+1
  1868.     IF(M-MC)43,3,3
  1869. 3    MR=M-MUD
  1870.     IER=0
  1871. C
  1872. C       MC IS THE MAXIMUM NUMBER OF ELEMENTS IN THE ROWS OF ARRAY A
  1873. C       MR IS THE INDEX OF THE LAST ROW IN ARRAY A WITH MC ELEMENTS
  1874. C
  1875. C    ******************************************************************
  1876. C
  1877. C       START FACTORIZATION OF MATRIX A
  1878.     IF(IOP)24,4,4
  1879. 4    IEND=0
  1880.     LLDST=MUD
  1881.     DO 23 K=1,M
  1882.     IST=IEND+1
  1883.     IEND=IST+MUD
  1884.     J=K-MR
  1885.     IF(J)6,6,5
  1886. 5    IEND=IEND-J
  1887. 6    IF(J-1)8,8,7
  1888. 7    LLDST=LLDST-1
  1889. 8    LMAX=MUD
  1890.     J=MC-K
  1891.     IF(J)10,10,9
  1892. 9    LMAX=LMAX-J
  1893. 10    ID=0
  1894.     TOL=A(IST)*EPS
  1895. C
  1896. C       START FACTORIZATION-LOOP OVER K-TH ROW
  1897.     DO 23 I=IST,IEND
  1898.     SUM=0.D0
  1899.     IF(LMAX)14,14,11
  1900. C
  1901. C       PREPARE INNER LOOP
  1902. 11    LL=IST
  1903.     LLD=LLDST
  1904. C
  1905. C       START INNER LOOP
  1906.     DO 13 L=1,LMAX
  1907.     LL=LL-LLD
  1908.     LLL=LL+ID
  1909.     SUM=SUM+A(LL)*A(LLL)
  1910.     IF(LLD-MUD)12,13,13
  1911. 12    LLD=LLD+1
  1912. 13    CONTINUE
  1913. C       END OF INNER LOOP
  1914. C
  1915. C       TRANSFORM ELEMENT A(I)
  1916. 14    SUM=DBLE(A(I))-SUM
  1917.     IF(I-IST)15,15,20
  1918. C
  1919. C       A(I) IS DIAGONAL ELEMENT. ERROR TEST.
  1920. 15    IF(SUM)43,43,16
  1921. C
  1922. C       TEST ON LOSS OF SIGNIFICANT DIGITS AND WARNING
  1923. 16    IF(SUM-TOL)17,17,19
  1924. 17    IF(IER)18,18,19
  1925. 18    IER=K-1
  1926. C
  1927. C       COMPUTATION OF PIVOT ELEMENT
  1928. 19    PIV=DSQRT(SUM)
  1929.     A(I)=PIV
  1930.     PIV=1.D0/PIV
  1931.     GO TO 21
  1932. C
  1933. C       A(I) IS NOT DIAGONAL ELEMENT
  1934. 20    A(I)=SUM*PIV
  1935. C
  1936. C       UPDATE ID AND LMAX
  1937. 21    ID=ID+1
  1938.     IF(ID-J)23,23,22
  1939. 22    LMAX=LMAX-1
  1940. 23    CONTINUE
  1941. C
  1942. C       END OF FACTORIZATION-LOOP OVER K-TH ROW
  1943. C       END OF FACTORIZATION OF MATRIX A
  1944. C
  1945. C    ******************************************************************
  1946. C
  1947. C       PREPARE MATRIX DIVISIONS
  1948.     IF(IOP)24,44,24
  1949. 24    ID=N*M
  1950.     IEND=IABS(IOP)-2
  1951.     IF(IEND)25,35,25
  1952. C
  1953. C    ******************************************************************
  1954. C
  1955. C       START DIVISION BY TRANSPOSE OF MATRIX TU (TU IS STORED IN
  1956. C       LOCATIONS OF A)
  1957. 25    IST=1
  1958.     LMAX=0
  1959.     J=-MR
  1960.     LLDST=MUD
  1961.     DO 34 K=1,M
  1962.     PIV=A(IST)
  1963.     IF(PIV)26,43,26
  1964. 26    PIV=1.D0/PIV
  1965. C
  1966. C       START BACKSUBSTITUTION-LOOP FOR K-TH ROW OF MATRIX R
  1967.     DO 30 I=K,ID,M
  1968.     SUM=0.D0
  1969.     IF(LMAX)30,30,27
  1970. C
  1971. C       PREPARE INNER LOOP
  1972. 27    LL=IST
  1973.     LLL=I
  1974.     LLD=LLDST
  1975. C
  1976. C       START INNER LOOP
  1977.     DO 29 L=1,LMAX
  1978.     LL=LL-LLD
  1979.     LLL=LLL-1
  1980.     SUM=SUM+A(LL)*R(LLL)
  1981.     IF(LLD-MUD)28,29,29
  1982. 28    LLD=LLD+1
  1983. 29    CONTINUE
  1984. C       END OF INNER LOOP
  1985. C
  1986. C       TRANSFORM ELEMENT R(I)
  1987. 30    R(I)=PIV*(DBLE(R(I))-SUM)
  1988. C       END OF BACKSUBSTITUTION-LOOP FOR K-TH ROW OF MATRIX R
  1989. C
  1990. C       UPDATE PARAMETERS LMAX, IST AND LLDST
  1991.     IF(MC-K)32,32,31
  1992. 31    LMAX=K
  1993. 32    IST=IST+MC
  1994.     J=J+1
  1995.     IF(J)34,34,33
  1996. 33    IST=IST-J
  1997.     LLDST=LLDST-1
  1998. 34    CONTINUE
  1999. C
  2000. C       END OF DIVISION BY TRANSPOSE OF MATRIX TU
  2001. C
  2002. C    ******************************************************************
  2003. C
  2004. C       START DIVISION BY MATRIX TU (TU IS STORED ON LOCATIONS OF A)
  2005.     IF(IEND)35,35,44
  2006. 35    IST=M+(MUD*(M+M-MC))/2+1
  2007.     LMAX=0
  2008.     K=M
  2009. 36    IEND=IST-1
  2010.     IST=IEND-LMAX
  2011.     PIV=A(IST)
  2012.     IF(PIV)37,43,37
  2013. 37    PIV=1.D0/PIV
  2014.     L=IST+1
  2015. C
  2016. C       START BACKSUBSTITUTION-LOOP FOR K-TH ROW OF MATRIX R
  2017.     DO 40 I=K,ID,M
  2018.     SUM=0.D0
  2019.     IF(LMAX)40,40,38
  2020. 38    LLL=I
  2021. C
  2022. C       START INNER LOOP
  2023.     DO 39 LL=L,IEND
  2024.     LLL=LLL+1
  2025. 39    SUM=SUM+A(LL)*R(LLL)
  2026. C       END OF INNER LOOP
  2027. C
  2028. C       TRANSFORM ELEMENT R(I)
  2029. 40    R(I)=PIV*(DBLE(R(I))-SUM)
  2030. C       END OF BACKSUBSTITUTION-LOOP FOR K-TH ROW OF MATRIX R
  2031. C
  2032. C
  2033. C       UPDATE PARAMETERS LMAX AND K
  2034.     IF(K-MR)42,42,41
  2035. 41    LMAX=LMAX+1
  2036. 42    K=K-1
  2037.     IF(K)44,44,36
  2038. C
  2039. C       END OF DIVISION BY MATRIX TU
  2040. C
  2041. C    ******************************************************************
  2042. C
  2043. C       ERROR EXIT IN CASE OF WRONG INPUT PARAMETERS OR PIVOT ELEMENT
  2044. C       LESS THAN OR EQUAL TO ZERO
  2045. 43    IER=-1
  2046. 44    RETURN
  2047.     END
  2048. C
  2049. C       ...............................................................
  2050. C
  2051. C       SUBROUTINE MCPY
  2052. C
  2053. C       PURPOSE
  2054. C          COPY ENTIRE MATRIX
  2055. C
  2056. C       USAGE
  2057. C          CALL MCPY (A,R,N,M,MS)
  2058. C
  2059. C       DESCRIPTION OF PARAMETERS
  2060. C          A - NAME OF INPUT MATRIX
  2061. C          R - NAME OF OUTPUT MATRIX
  2062. C          N - NUMBER OF ROWS IN A OR R
  2063. C          M - NUMBER OF COLUMNS IN A OR R
  2064. C          MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A (AND R)
  2065. C                 0 - GENERAL
  2066. C                 1 - SYMMETRIC
  2067. C                 2 - DIAGONAL
  2068. C
  2069. C       REMARKS
  2070. C          NONE
  2071. C
  2072. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  2073. C          LOC
  2074. C
  2075. C       METHOD
  2076. C          EACH ELEMENT OF MATRIX A IS MOVED TO THE CORRESPONDING
  2077. C          ELEMENT OF MATRIX R
  2078. C
  2079. C    ..................................................................
  2080. C
  2081.     SUBROUTINE MCPY(A,R,N,M,MS)
  2082.     DIMENSION A(1),R(1)
  2083. C
  2084. C       COMPUTE VECTOR LENGTH, IT
  2085. C
  2086.     CALL LOC(N,M,IT,N,M,MS)
  2087. C
  2088. C       COPY MATRIX
  2089. C
  2090.     DO 1 I=1,IT
  2091. 1    R(I)=A(I)
  2092.     RETURN
  2093.     END
  2094. C
  2095. C    ..................................................................
  2096. C
  2097. C       SAMPLE MAIN PROGRAM FOR DISCRIMINANT ANALYSIS - MDISC
  2098. C
  2099. C       PURPOSE
  2100. C          (1) READ THE PROBLEM PARAMETER CARD AND DATA FOR DISCRIMI-
  2101. C          NANT ANALYSIS, (2) CALL THREE SUBROUTINES TO CALCULATE VARI-
  2102. C          ABLE MEANS IN EACH GROUP, POOLED DISPERSION MATRIX, COMMON
  2103. C          MEANS OF VARIABLES, GENERALIZED MAHALANOBIS D SQUARE,
  2104. C          COEFFICIENTS OF DISCRIMINANT FUNCTIONS, AND PROBABILITY
  2105. C          ASSOCIATED WITH LARGEST DISCRIMINANT FUNCTION OF EACH
  2106. C          CASE IN EACH GROUP, AND (3) PRINT THE RESULTS.
  2107. C
  2108. C       REMARKS
  2109. C          THE NUMBER OF VARIABLES MUST BE GREATER THAN OR EQUAL TO
  2110. C          THE NUMBER OF GROUPS.
  2111. C
  2112. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  2113. C          DMATX
  2114. C          MINV
  2115. C          DISCR
  2116. C
  2117. C       METHOD
  2118. C          REFER TO 'BMD COMPUTER PROGRAMS MANUAL', EDITED BY W. J.
  2119. C          DIXON, UCLA, 1964, AND T. W. ANDERSON, 'INTRODUCTION TO
  2120. C          MULTIVARIATE STATISTICAL ANALYSIS', JOHN WILEY AND SONS,
  2121. C          1958, SECTION 6.6-6.8.
  2122. C
  2123. C    ..................................................................
  2124. C
  2125. C    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  2126. C    NUMBER OF GROUPS, K..
  2127. cC
  2128. c       DIMENSION N(5)
  2129. cC
  2130. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  2131. cC    NUMBER OF VARIABLES, M..
  2132. cC
  2133. c       DIMENSION CMEAN(10)
  2134. cC
  2135. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  2136. cC    PRODUCT OF M*K..
  2137. cC
  2138. c       DIMENSION XBAR(50)
  2139. cC
  2140. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  2141. cC    PRODUCT OF (M+1)*K..
  2142. cC
  2143. c       DIMENSION C(55)
  2144. cC
  2145. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  2146. cC    PRODUCT OF M*M..
  2147. cC
  2148. c       DIMENSION D(100)
  2149. cC
  2150. cC    THE FOLLOWING DIMENSIONS MUST BE GREATER THAN OR EQUAL TO THE
  2151. cC    TOTAL OF SAMPLE SIZES OF K GROUPS COMBINED, T (T = N(1)+N(2)+...
  2152. cC    +N(K))..
  2153. cC
  2154. c       DIMENSION P(250),LG(250)
  2155. cC
  2156. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  2157. cC    TOTAL DATA POINTS WHICH IS EQUAL TO THE PRODUCT OF T*M..
  2158. cC
  2159. c       DIMENSION X(2500)
  2160. cC
  2161. cC    ..................................................................
  2162. cC
  2163. cC       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  2164. cC       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  2165. cC       STATEMENT WHICH FOLLOWS.
  2166. cC
  2167. cC    DOUBLE PRECISION CMEAN,XBAR,D,DET,C,V,P
  2168. cC
  2169. cC       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  2170. cC       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  2171. cC       ROUTINE.
  2172. cC
  2173. cC       ...............................................................
  2174. cC
  2175. c1    FORMAT(A4,A2,2I2,12I5/(14I5))
  2176. c2    FORMAT(27H1DISCRIMINANT ANALYSIS.....,A4,A2/19H0  NUMBER OF GROUPS
  2177. c     1,7X,I3/22H   NUMBER OF VARIABLES,I7/17H   SAMPLE SIZES../12X,5HGRO
  2178. c     2UP)
  2179. c3    FORMAT(12X,I3,8X,I4)
  2180. c4    FORMAT(1H0)
  2181. c5    FORMAT(12F6.0)
  2182. c6    FORMAT(6H0GROUP,I3,7H  MEANS/(8F15.5))
  2183. c7    FORMAT(1H0/25H POOLED DISPERSION MATRIX)
  2184. c8    FORMAT(4H0ROW,I3/(8F15.5))
  2185. c9    FORMAT(1H0//13H COMMON MEANS/(8F15.5))
  2186. c10    FORMAT(1H///33H GENERALIZED MAHALANOBIS D-SQUARE,F15.5//)
  2187. c11    FORMAT(22H0DISCRIMINANT FUNCTION,I3/1H ,6X,27HCONSTANT   *   COEFF
  2188. c     1ICIENTS/1H F14.5,7H   *   ,7F14.5/(22X,7F14.5))
  2189. c12    FORMAT(1H0//60H EVALUATION OF CLASSIFICATION FUNCTIONS FOR EACH OB
  2190. c     1SERVATION)
  2191. c13    FORMAT(6H0GROUP,I3/19X,27HPROBABILITY ASSOCIATED WITH,11X,7HLARGES
  2192. c     1T/13H  OBSERVATION,5X,29HLARGEST DISCRIMINANT FUNCTION,8X,12HFUNCT
  2193. c     2ION NO.)
  2194. c14    FORMAT(1H ,I7,20X,F8.5,20X,I6)
  2195. cC    OPEN (UNIT=5, DEVICE='CDR', ACCESS='SEQIN')
  2196. cC    OPEN (UNIT=6, DEVICE='LPT', ACCESS='SEQOUT')
  2197. cC
  2198. cC    ..................................................................
  2199. cC
  2200. cC    READ PROBLEM PARAMETER CARD
  2201. cC
  2202. c    LOGICAL EOF
  2203. c    CALL CHKEOF (EOF)
  2204. c100    READ (5,1) PR,PR1,K,M,(N(I),I=1,K)
  2205. c    IF (EOF) GOTO 999
  2206. cC       PR.......PROBLEM NUMBER (MAY BE ALPHAMERIC)
  2207. cC       PR1......PROBLEM NUMBER (CONTINUED)
  2208. cC       K........NUMBER OF GROUPS
  2209. cC       M........NUMBER OF VARIABLES
  2210. cC       N........VECTOR OF LENGTH K CONTAINING SAMPLE SIZES
  2211. cC
  2212. c    WRITE (6,2) PR,PR1,K,M
  2213. c    DO 110 I=1,K
  2214. c110    WRITE (6,3) I,N(I)
  2215. c    WRITE (6,4)
  2216. cC
  2217. cC    READ DATA
  2218. cC
  2219. c    L=0
  2220. c    DO 130 I=1,K
  2221. c    N1=N(I)
  2222. c    DO 120 J=1,N1
  2223. c    READ (5,5) (CMEAN(IJ),IJ=1,M)
  2224. c    L=L+1
  2225. c    N2=L-N1
  2226. c    DO 120 IJ=1,M
  2227. c    N2=N2+N1
  2228. c120    X(N2)=CMEAN(IJ)
  2229. c130    L=N2
  2230. cC
  2231. c    CALL DMATX (K,M,N,X,XBAR,D,CMEAN)
  2232. cC
  2233. cC    PRINT MEANS AND POOLED DISPERSION MATRIX
  2234. cC
  2235. c    L=0
  2236. c    DO 150 I=1,K
  2237. c    DO 140 J=1,M
  2238. c    L=L+1
  2239. c140    CMEAN(J)=XBAR(L)
  2240. c150    WRITE (6,6) I,(CMEAN(J),J=1,M)
  2241. c    WRITE (6,7)
  2242. c    DO 170 I=1,M
  2243. c    L=I-M
  2244. c    DO 160 J=1,M
  2245. c    L=L+M
  2246. c160    CMEAN(J)=D(L)
  2247. c170    WRITE (6,8) I,(CMEAN(J),J=1,M)
  2248. cC
  2249. c    CALL MINV (D,M,DET,CMEAN,C)
  2250. cC
  2251. c    CALL DISCR (K,M,N,X,XBAR,D,CMEAN,V,C,P,LG)
  2252. cC
  2253. cC    PRINT COMMON MEANS
  2254. cC
  2255. c    WRITE (6,9) (CMEAN(I),I=1,M)
  2256. cC
  2257. cC    PRINT GENERALIZED MAHALANOBIS D-SQUARE
  2258. cC
  2259. c    WRITE (6,10) V
  2260. cC
  2261. cC    PRINT CONSTANTS AND COEFFICIENTS OF DISCRIMINANT FUNCTIONS
  2262. cC
  2263. c    N1=1
  2264. c    N2=M+1
  2265. c    DO 180 I=1,K
  2266. c    WRITE (6,11) I,(C(J),J=N1,N2)
  2267. c    N1=N1+(M+1)
  2268. c180    N2=N2+(M+1)
  2269. cC
  2270. cC    PRINT EVALUATION OF CALSSIFICATION FUNCTIONS FOR EACH OBSERVATION
  2271. cC
  2272. c    WRITE (6,12)
  2273. c    N1=1
  2274. c    N2=N(1)
  2275. c    DO 210 I=1,K
  2276. c    WRITE (6,13) I
  2277. c    L=0
  2278. c    DO 190 J=N1,N2
  2279. c    L=L+1
  2280. c190    WRITE (6,14) L,P(J),LG(J)
  2281. c    IF(I-K) 200, 100, 100
  2282. c200    N1=N1+N(I)
  2283. c    N2=N2+N(I+1)
  2284. c210    CONTINUE
  2285. c999    STOP
  2286. c    END
  2287. C
  2288. C    ..................................................................
  2289. C
  2290. C       SUBROUTINE MEANQ
  2291. C
  2292. C       PURPOSE
  2293. C          COMPUTE SUM OF SQUARES, DEGREES OF FREEDOM, AND MEAN SQUARE
  2294. C          USING THE MEAN SQUARE OPERATOR.  THIS SUBROUTINE NORMALLY
  2295. C          FOLLOWS CALLS TO AVDAT AND AVCAL SUBROUTINES IN THE PER-
  2296. C          FORMANCE OF ANALYSIS OF VARIANCE FOR A COMPLETE FACTORIAL
  2297. C          DESIGN.
  2298. C
  2299. C       USAGE
  2300. C          CALL MEANQ (K,LEVEL,X,GMEAN,SUMSQ,NDF,SMEAN,MSTEP,KOUNT,
  2301. C                       LASTS)
  2302. C
  2303. C       DESCRIPTION OF PARAMETERS
  2304. C          K     - NUMBER OF VARIABLES (FACTORS). K MUST BE .GT. ONE.
  2305. C          LEVEL - INPUT VECTOR OF LENGTH K CONTAINING LEVELS (CATE-
  2306. C                  GORIES) WITHIN EACH VARIABLE.
  2307. C          X     - INPUT VECTOR CONTAINING THE RESULT OF THE SIGMA AND
  2308. C                  DELTA OPERATORS. THE LENGTH OF X IS
  2309. C                  (LEVEL(1)+1)*(LEVEL(2)+1)*...*(LEVEL(K)+1).
  2310. C          GMEAN - OUTPUT VARIABLE CONTAINING GRAND MEAN.
  2311. C          SUMSQ - OUTPUT VECTOR CONTAINING SUMS OF SQUARES.  THE
  2312. C                  LENGTH OF SUMSQ IS 2 TO THE K-TH POWER MINUS ONE,
  2313. C                  (2**K)-1.
  2314. C          NDF   - OUTPUT VECTOR CONTAINING DEGREES OF FREEDOM.  THE
  2315. C                  LENGTH OF NDF IS 2 TO THE K-TH POWER MINUS ONE,
  2316. C                  (2**K)-1.
  2317. C          SMEAN - OUTPUT VECTOR CONTAINING MEAN SQUARES.  THE
  2318. C                  LENGTH OF SMEAN IS 2 TO THE K-TH POWER MINUS ONE,
  2319. C                  (2**K)-1.
  2320. C          MSTEP - WORKING VECTOR OF LENGTH K.
  2321. C          KOUNT - WORKING VECTOR OF LENGTH K.
  2322. C          LASTS - WORKING VECTOR OF LENGTH K.
  2323. C
  2324. C       REMARKS
  2325. C          THIS SUBROUTINE MUST FOLLOW SUBROUTINE AVCAL
  2326. C
  2327. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  2328. C          NONE
  2329. C
  2330. C       METHOD
  2331. C          THE METHOD IS BASED ON THE TECHNIQUE DISCUSSED BY H. O.
  2332. C          HARTLEY IN 'MATHEMATICAL METHODS FOR DIGITAL COMPUTERS',
  2333. C          EDITED BY A. RALSTON AND H. WILF, JOHN WILEY AND SONS,
  2334. C          1962, CHAPTER 20.
  2335. C
  2336. C    ..................................................................
  2337. C
  2338.     SUBROUTINE MEANQ (K,LEVEL,X,GMEAN,SUMSQ,NDF,SMEAN,MSTEP,KOUNT,
  2339.      1                  LASTS)
  2340.     DIMENSION LEVEL(1),X(1),SUMSQ(1),NDF(1),SMEAN(1),MSTEP(1),
  2341.      1          KOUNT(1),LASTS(1)
  2342. C
  2343. C       ...............................................................
  2344. C
  2345. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  2346. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  2347. C       STATEMENT WHICH FOLLOWS.
  2348. C
  2349. C    DOUBLE PRECISION X,GMEAN,SUMSQ,SMEAN,FN1
  2350. C
  2351. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  2352. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  2353. C       ROUTINE.
  2354. C
  2355. C       ...............................................................
  2356. C
  2357. C    CALCULATE TOTAL NUMBER OF DATA
  2358. C
  2359.     N=LEVEL(1)
  2360.     DO 150 I=2,K
  2361. 150    N=N*LEVEL(I)
  2362. C
  2363. C    SET UP CONTROL FOR MEAN SQUARE OPERATOR
  2364. C
  2365.     LASTS(1)=LEVEL(1)
  2366.     DO 178 I=2,K
  2367. 178    LASTS(I)=LEVEL(I)+1
  2368.     NN=1
  2369. C
  2370. C    CLEAR THE AREA TO STORE SUMS OF SQUARES
  2371. C
  2372.     LL=(2**K)-1
  2373.     MSTEP(1)=1
  2374.     DO 180 I=2,K
  2375. 180    MSTEP(I)=MSTEP(I-1)*2
  2376.     DO 185 I=1,LL
  2377. 185    SUMSQ(I)=0.0
  2378. C
  2379. C    PERFORM MEAN SQUARE OPERATOR
  2380. C
  2381.     DO 190 I=1,K
  2382. 190    KOUNT(I)=0
  2383. 200    L=0
  2384.     DO 260 I=1,K
  2385.     IF(KOUNT(I)-LASTS(I)) 210, 250, 210
  2386. 210    IF(L) 220, 220, 240
  2387. 220    KOUNT(I)=KOUNT(I)+1
  2388.     IF(KOUNT(I)-LEVEL(I)) 230, 230, 250
  2389. 230    L=L+MSTEP(I)
  2390.     GO TO 260
  2391. 240    IF(KOUNT(I)-LEVEL(I)) 230, 260, 230
  2392. 250    KOUNT(I)=0
  2393. 260    CONTINUE
  2394.     IF(L) 285, 285, 270
  2395. 270    SUMSQ(L)=SUMSQ(L)+X(NN)*X(NN)
  2396.     NN=NN+1
  2397.     GO TO 200
  2398. C
  2399. C    CALCULATE THE GRAND MEAN
  2400. C
  2401. 285    FN=N
  2402.     GMEAN=X(NN)/FN
  2403. C
  2404. C    CALCULATE FIRST DIVISOR REQUIRED TO FORM SUM OF SQUARES AND SECOND
  2405. C    DIVISOR, WHICH IS EQUAL TO DEGREES OF FREEDOM, REQUIRED TO FORM
  2406. C    MEAN SQUARES
  2407. C
  2408.     DO 310 I=2,K
  2409. 310    MSTEP(I)=0
  2410.     NN=0
  2411.     MSTEP(1)=1
  2412. 320    ND1=1
  2413.     ND2=1
  2414.     DO 340 I=1,K
  2415.     IF(MSTEP(I)) 330, 340, 330
  2416. 330    ND1=ND1*LEVEL(I)
  2417.     ND2=ND2*(LEVEL(I)-1)
  2418. 340    CONTINUE
  2419.     FN1=N*ND1
  2420.     FN2=ND2
  2421.     NN=NN+1
  2422.     SUMSQ(NN)=SUMSQ(NN)/FN1
  2423.     NDF(NN)=ND2
  2424.     SMEAN(NN)=SUMSQ(NN)/FN2
  2425.     IF(NN-LL) 345, 370, 370
  2426. 345    DO 360 I=1,K
  2427.     IF(MSTEP(I)) 347, 350, 347
  2428. 347    MSTEP(I)=0
  2429.     GO TO 360
  2430. 350    MSTEP(I)=1
  2431.     GO TO 320
  2432. 360    CONTINUE
  2433. 370    RETURN
  2434.     END
  2435. C
  2436. C    ..................................................................
  2437. C
  2438. C       SUBROUTINE MFGR
  2439. C
  2440. C       PURPOSE
  2441. C          FOR A GIVEN M BY N MATRIX THE FOLLOWING CALCULATIONS
  2442. C          ARE PERFORMED
  2443. C          (1) DETERMINE RANK AND LINEARLY INDEPENDENT ROWS AND
  2444. C              COLUMNS (BASIS).
  2445. C          (2) FACTORIZE A SUBMATRIX OF MAXIMAL RANK.
  2446. C          (3) EXPRESS NON-BASIC ROWS IN TERMS OF BASIC ONES.
  2447. C          (4) EXPRESS BASIC VARIABLES IN TERMS OF FREE ONES.
  2448. C
  2449. C       USAGE
  2450. C          CALL MFGR(A,M,N,EPS,IRANK,IROW,ICOL)
  2451. C
  2452. C       DESCRIPTION OF PARAMETERS
  2453. C          A      - GIVEN MATRIX WITH M ROWS AND N COLUMNS.
  2454. C                   ON RETURN A CONTAINS THE FIVE SUBMATRICES
  2455. C                   L, R, H, D, O.
  2456. C          M      - NUMBER OF ROWS OF MATRIX A.
  2457. C          N      - NUMBER OF COLUMNS OF MATRIX A.
  2458. C          EPS    - TESTVALUE FOR ZERO AFFECTED BY ROUNDOFF NOISE.
  2459. C          IRANK  - RESULTANT RANK OF GIVEN MATRIX.
  2460. C          IROW   - INTEGER VECTOR OF DIMENSION M CONTAINING THE
  2461. C                   SUBSCRIPTS OF BASIC ROWS IN IROW(1),...,IROW(IRANK)
  2462. C          ICOL   - INTEGER VECTOR OF DIMENSION N CONTAINING THE
  2463. C                   SUBSCRIPTS OF BASIC COLUMNS IN ICOL(1) UP TO
  2464. C                   ICOL(IRANK).
  2465. C
  2466. C       REMARKS
  2467. C          THE LEFT HAND TRIANGULAR FACTOR IS NORMALIZED SUCH THAT
  2468. C          THE DIAGONAL CONTAINS ALL ONES THUS ALLOWING TO STORE ONLY
  2469. C          THE SUBDIAGONAL PART.
  2470. C
  2471. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  2472. C          NONE
  2473. C
  2474. C       METHOD
  2475. C          GAUSSIAN ELIMINATION TECHNIQUE IS USED FOR CALCULATION
  2476. C          OF THE TRIANGULAR FACTORS OF A GIVEN MATRIX.
  2477. C          COMPLETE PIVOTING IS BUILT IN.
  2478. C          IN CASE OF A SINGULAR MATRIX ONLY THE TRIANGULAR FACTORS
  2479. C          OF A SUBMATRIX OF MAXIMAL RANK ARE RETAINED.
  2480. C          THE REMAINING PARTS OF THE RESULTANT MATRIX GIVE THE
  2481. C          DEPENDENCIES OF ROWS AND THE SOLUTION OF THE HOMOGENEOUS
  2482. C          MATRIX EQUATION A*X=0.
  2483. C
  2484. C    ..................................................................
  2485. C
  2486.     SUBROUTINE MFGR(A,M,N,EPS,IRANK,IROW,ICOL)
  2487. C
  2488. C       DIMENSIONED DUMMY VARIABLES
  2489.     DIMENSION A(1),IROW(1),ICOL(1)
  2490. C
  2491. C      TEST OF SPECIFIED DIMENSIONS
  2492.     IF(M)2,2,1
  2493. 1    IF(N)2,2,4
  2494. 2    IRANK=-1
  2495. 3    RETURN
  2496. C      RETURN IN CASE OF FORMAL ERRORS
  2497. C
  2498. C
  2499. C       INITIALIZE COLUMN INDEX VECTOR
  2500. C       SEARCH FIRST PIVOT ELEMENT
  2501. 4    IRANK=0
  2502.     PIV=0.
  2503.     JJ=0
  2504.     DO 6 J=1,N
  2505.     ICOL(J)=J
  2506.     DO 6 I=1,M
  2507.     JJ=JJ+1
  2508.     HOLD=A(JJ)
  2509.     IF(ABS(PIV)-ABS(HOLD))5,6,6
  2510. 5    PIV=HOLD
  2511.     IR=I
  2512.     IC=J
  2513. 6    CONTINUE
  2514. C
  2515. C       INITIALIZE ROW INDEX VECTOR
  2516.     DO 7 I=1,M
  2517. 7    IROW(I)=I
  2518. C
  2519. C       SET UP INTERNAL TOLERANCE
  2520.     TOL=ABS(EPS*PIV)
  2521. C
  2522. C       INITIALIZE ELIMINATION LOOP
  2523.     NM=N*M
  2524.     DO 19 NCOL=M,NM,M
  2525. C
  2526. C       TEST FOR FEASIBILITY OF PIVOT ELEMENT
  2527. 8    IF(ABS(PIV)-TOL)20,20,9
  2528. C
  2529. C       UPDATE RANK
  2530. 9    IRANK=IRANK+1
  2531. C
  2532. C       INTERCHANGE ROWS IF NECESSARY
  2533.     JJ=IR-IRANK
  2534.     IF(JJ)12,12,10
  2535. 10    DO 11 J=IRANK,NM,M
  2536.     I=J+JJ
  2537.     SAVE=A(J)
  2538.     A(J)=A(I)
  2539. 11    A(I)=SAVE
  2540. C
  2541. C       UPDATE ROW INDEX VECTOR
  2542.     JJ=IROW(IR)
  2543.     IROW(IR)=IROW(IRANK)
  2544.     IROW(IRANK)=JJ
  2545. C
  2546. C       INTERCHANGE COLUMNS IF NECESSARY
  2547. 12    JJ=(IC-IRANK)*M
  2548.     IF(JJ)15,15,13
  2549. 13    KK=NCOL
  2550.     DO 14 J=1,M
  2551.     I=KK+JJ
  2552.     SAVE=A(KK)
  2553.     A(KK)=A(I)
  2554.     KK=KK-1
  2555. 14    A(I)=SAVE
  2556. C
  2557. C       UPDATE COLUMN INDEX VECTOR
  2558.     JJ=ICOL(IC)
  2559.     ICOL(IC)=ICOL(IRANK)
  2560.     ICOL(IRANK)=JJ
  2561. 15    KK=IRANK+1
  2562.     MM=IRANK-M
  2563.     LL=NCOL+MM
  2564. C
  2565. C       TEST FOR LAST ROW
  2566.     IF(MM)16,25,25
  2567. C
  2568. C       TRANSFORM CURRENT SUBMATRIX AND SEARCH NEXT PIVOT
  2569. 16    JJ=LL
  2570.     SAVE=PIV
  2571.     PIV=0.
  2572.     DO 19 J=KK,M
  2573.     JJ=JJ+1
  2574.     HOLD=A(JJ)/SAVE
  2575.     A(JJ)=HOLD
  2576.     L=J-IRANK
  2577. C
  2578. C       TEST FOR LAST COLUMN
  2579.     IF(IRANK-N)17,19,19
  2580. 17    II=JJ
  2581.     DO 19 I=KK,N
  2582.     II=II+M
  2583.     MM=II-L
  2584.     A(II)=A(II)-HOLD*A(MM)
  2585.     IF(ABS(A(II))-ABS(PIV))19,19,18
  2586. 18    PIV=A(II)
  2587.     IR=J
  2588.     IC=I
  2589. 19    CONTINUE
  2590. C
  2591. C       SET UP MATRIX EXPRESSING ROW DEPENDENCIES
  2592. 20    IF(IRANK-1)3,25,21
  2593. 21    IR=LL
  2594.     DO 24 J=2,IRANK
  2595.     II=J-1
  2596.     IR=IR-M
  2597.     JJ=LL
  2598.     DO 23 I=KK,M
  2599.     HOLD=0.
  2600.     JJ=JJ+1
  2601.     MM=JJ
  2602.     IC=IR
  2603.     DO 22 L=1,II
  2604.     HOLD=HOLD+A(MM)*A(IC)
  2605.     IC=IC-1
  2606. 22    MM=MM-M
  2607. 23    A(MM)=A(MM)-HOLD
  2608. 24    CONTINUE
  2609. C
  2610. C       TEST FOR COLUMN REGULARITY
  2611. 25    IF(N-IRANK)3,3,26
  2612. C
  2613. C       SET UP MATRIX EXPRESSING BASIC VARIABLES IN TERMS OF FREE
  2614. C      PARAMETERS (HOMOGENEOUS SOLUTION).
  2615. 26    IR=LL
  2616.     KK=LL+M
  2617.     DO 30 J=1,IRANK
  2618.     DO 29 I=KK,NM,M
  2619.     JJ=IR
  2620.     LL=I
  2621.     HOLD=0.
  2622.     II=J
  2623. 27    II=II-1
  2624.     IF(II)29,29,28
  2625. 28    HOLD=HOLD-A(JJ)*A(LL)
  2626.     JJ=JJ-M
  2627.     LL=LL-1
  2628.     GOTO 27
  2629. 29    A(LL)=(HOLD-A(LL))/A(JJ)
  2630. 30    IR=IR-1
  2631.     RETURN
  2632.     END
  2633. C
  2634. C    ..................................................................
  2635. C
  2636. C       SUBROUTINE MFSD
  2637. C
  2638. C       PURPOSE
  2639. C          FACTOR A GIVEN SYMMETRIC POSITIVE DEFINITE MATRIX
  2640. C
  2641. C       USAGE
  2642. C          CALL MFSD(A,N,EPS,IER)
  2643. C
  2644. C       DESCRIPTION OF PARAMETERS
  2645. C          A      - UPPER TRIANGULAR PART OF THE GIVEN SYMMETRIC
  2646. C                   POSITIVE DEFINITE N BY N COEFFICIENT MATRIX.
  2647. C                   ON RETURN A CONTAINS THE RESULTANT UPPER
  2648. C                   TRIANGULAR MATRIX.
  2649. C          N      - THE NUMBER OF ROWS (COLUMNS) IN GIVEN MATRIX.
  2650. C          EPS    - AN INPUT CONSTANT WHICH IS USED AS RELATIVE
  2651. C                   TOLERANCE FOR TEST ON LOSS OF SIGNIFICANCE.
  2652. C          IER    - RESULTING ERROR PARAMETER CODED AS FOLLOWS
  2653. C                   IER=0  - NO ERROR
  2654. C                   IER=-1 - NO RESULT BECAUSE OF WRONG INPUT PARAME-
  2655. C                            TER N OR BECAUSE SOME RADICAND IS NON-
  2656. C                            POSITIVE (MATRIX A IS NOT POSITIVE
  2657. C                            DEFINITE, POSSIBLY DUE TO LOSS OF SIGNI-
  2658. C                            FICANCE)
  2659. C                   IER=K  - WARNING WHICH INDICATES LOSS OF SIGNIFI-
  2660. C                            CANCE. THE RADICAND FORMED AT FACTORIZA-
  2661. C                            TION STEP K+1 WAS STILL POSITIVE BUT NO
  2662. C                            LONGER GREATER THAN ABS(EPS*A(K+1,K+1)).
  2663. C
  2664. C       REMARKS
  2665. C          THE UPPER TRIANGULAR PART OF GIVEN MATRIX IS ASSUMED TO BE
  2666. C          STORED COLUMNWISE IN N*(N+1)/2 SUCCESSIVE STORAGE LOCATIONS.
  2667. C          IN THE SAME STORAGE LOCATIONS THE RESULTING UPPER TRIANGU-
  2668. C          LAR MATRIX IS STORED COLUMNWISE TOO.
  2669. C          THE PROCEDURE GIVES RESULTS IF N IS GREATER THAN 0 AND ALL
  2670. C          CALCULATED RADICANDS ARE POSITIVE.
  2671. C          THE PRODUCT OF RETURNED DIAGONAL TERMS IS EQUAL TO THE
  2672. C          SQUARE-ROOT OF THE DETERMINANT OF THE GIVEN MATRIX.
  2673. C
  2674. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  2675. C          NONE
  2676. C
  2677. C       METHOD
  2678. C          SOLUTION IS DONE USING THE SQUARE-ROOT METHOD OF CHOLESKY.
  2679. C          THE GIVEN MATRIX IS REPRESENTED AS PRODUCT OF TWO TRIANGULAR
  2680. C          MATRICES, WHERE THE LEFT HAND FACTOR IS THE TRANSPOSE OF
  2681. C          THE RETURNED RIGHT HAND FACTOR.
  2682. C
  2683. C    ..................................................................
  2684. C
  2685.     SUBROUTINE MFSD(A,N,EPS,IER)
  2686. C
  2687. C
  2688.     DIMENSION A(1)
  2689.     DOUBLE PRECISION DPIV,DSUM
  2690. C
  2691. C       TEST ON WRONG INPUT PARAMETER N
  2692.     IF(N-1) 12,1,1
  2693. 1    IER=0
  2694. C
  2695. C       INITIALIZE DIAGONAL-LOOP
  2696.     KPIV=0
  2697.     DO 11 K=1,N
  2698.     KPIV=KPIV+K
  2699.     IND=KPIV
  2700.     LEND=K-1
  2701. C
  2702. C       CALCULATE TOLERANCE
  2703.     TOL=ABS(EPS*A(KPIV))
  2704. C
  2705. C       START FACTORIZATION-LOOP OVER K-TH ROW
  2706.     DO 11 I=K,N
  2707.     DSUM=0.D0
  2708.     IF(LEND) 2,4,2
  2709. C
  2710. C       START INNER LOOP
  2711. 2    DO 3 L=1,LEND
  2712.     LANF=KPIV-L
  2713.     LIND=IND-L
  2714. 3    DSUM=DSUM+DBLE(A(LANF)*A(LIND))
  2715. C       END OF INNER LOOP
  2716. C
  2717. C       TRANSFORM ELEMENT A(IND)
  2718. 4    DSUM=DBLE(A(IND))-DSUM
  2719.     IF(I-K) 10,5,10
  2720. C
  2721. C       TEST FOR NEGATIVE PIVOT ELEMENT AND FOR LOSS OF SIGNIFICANCE
  2722. 5    IF(SNGL(DSUM)-TOL) 6,6,9
  2723. 6    IF(DSUM) 12,12,7
  2724. 7    IF(IER) 8,8,9
  2725. 8    IER=K-1
  2726. C
  2727. C       COMPUTE PIVOT ELEMENT
  2728. 9    DPIV=DSQRT(DSUM)
  2729.     A(KPIV)=DPIV
  2730.     DPIV=1.D0/DPIV
  2731.     GO TO 11
  2732. C
  2733. C       CALCULATE TERMS IN ROW
  2734. 10    A(IND)=DSUM*DPIV
  2735. 11    IND=IND+I
  2736. C
  2737. C       END OF DIAGONAL-LOOP
  2738.     RETURN
  2739. 12    IER=-1
  2740.     RETURN
  2741.     END
  2742. C
  2743. C    ..................................................................
  2744. C
  2745. C       SUBROUTINE MFSS
  2746. C
  2747. C       PURPOSE
  2748. C          GIVEN A SYMMETRIC POSITIVE SEMI DEFINITE MATRIX , MFSS WILL
  2749. C          (1) DETERMINE THE RANK AND LINEARLY INDEPENDENT ROWS AND
  2750. C              COLUMNS
  2751. C          (2) FACTOR A SYMMETRIC SUBMATRIX OF MAXIMAL RANK
  2752. C          (3) EXPRESS NONBASIC ROWS IN TERMS OF BASIC ONES,
  2753. C              EXPRESS NONBASIC COLUMNS IN TERMS OF BASIC ONES
  2754. C              EXPRESS BASIC VARIABLES IN TERMS OF FREE ONES
  2755. C          SUBROUTINE MFSS MAY BE USED AS A PREPARATORY STEP FOR THE
  2756. C          CALCULATION OF THE LEAST SQUARES SOLUTION OF MINIMAL
  2757. C          LENGTH OF A SYSTEM OF LINEAR EQUATIONS WITH SYMMETRIC
  2758. C          POSITIVE SEMI-DEFINITE COEFFICIENT MATRIX
  2759. C
  2760. C       USAGE
  2761. C          CALL MFSS(A,N,EPS,IRANK,TRAC)
  2762. C
  2763. C       DESCRIPTION OF PARAMETERS
  2764. C          A     - UPPER TRIANGULAR PART OF GIVEN SYMMETRIC SEMI-
  2765. C                  DEFINITE MATRIX STORED COLUMNWISE IN COMPRESSED FORM
  2766. C                  ON RETURN A CONTAINS THE MATRIX T AND, IF IRANK IS
  2767. C                  LESS THAN N, THE MATRICES U AND TU
  2768. C          N     - DIMENSION OF GIVEN MATRIX A
  2769. C          EPS   - TESTVALUE FOR ZERO AFFECTED BY ROUND-OFF NOISE
  2770. C          IRANK - RESULTANT VARIABLE, CONTAINING THE RANK OF GIVEN
  2771. C                  MATRIX A IF A IS SEMI-DEFINITE
  2772. C                  IRANK = 0 MEANS A HAS NO POSITIVE DIAGONAL ELEMENT
  2773. C                            AND/OR EPS IS NOT ABSOLUTELY LESS THAN ONE
  2774. C                  IRANK =-1 MEANS DIMENSION N IS NOT POSITIVE
  2775. C                  IRANK =-2 MEANS COMPLETE FAILURE, POSSIBLY DUE TO
  2776. C                            INADEQUATE RELATIVE TOLERANCE EPS
  2777. C          TRAC  - VECTOR OF DIMENSION N CONTAINING THE
  2778. C                  SOURCE INDEX OF THE I-TH PIVOT ROW IN ITS I-TH
  2779. C                  LOCATION, THIS MEANS THAT TRAC CONTAINS THE
  2780. C                  PRODUCT REPRESENTATION OF THE PERMUTATION WHICH
  2781. C                  IS APPLIED TO ROWS AND COLUMNS OF A IN TERMS OF
  2782. C                  TRANSPOSITIONS
  2783. C
  2784. C       REMARKS
  2785. C          EPS MUST BE ABSOLUTELY LESS THAN ONE. A SENSIBLE VALUE IS
  2786. C          SOMEWHERE IN BETWEEN 10**(-4) AND 10**(-6)
  2787. C          THE ABSOLUTE VALUE OF INPUT PARAMETER EPS IS USED AS
  2788. C          RELATIVE TOLERANCE.
  2789. C          IN ORDER TO PRESERVE SYMMETRY ONLY PIVOTING ALONG THE
  2790. C          DIAGONAL IS BUILT IN.
  2791. C          ALL PIVOTELEMENTS MUST BE GREATER THAN THE ABSOLUTE VALUE
  2792. C          OF EPS TIMES ORIGINAL DIAGONAL ELEMENT
  2793. C          OTHERWISE THEY ARE TREATED AS IF THEY WERE ZERO
  2794. C          MATRIX A REMAINS UNCHANGED IF THE RESULTANT VALUE IRANK
  2795. C          EQUALS ZERO
  2796. C
  2797. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  2798. C          NONE
  2799. C
  2800. C       METHOD
  2801. C          THE SQUARE ROOT METHOD WITH DIAGONAL PIVOTING IS USED FOR
  2802. C          CALCULATION OF THE RIGHT HAND TRIANGULAR FACTOR.
  2803. C          IN CASE OF AN ONLY SEMI-DEFINITE MATRIX THE SUBROUTINE
  2804. C          RETURNS THE IRANK X IRANK UPPER TRIANGULAR FACTOR T OF A
  2805. C          SUBMATRIX OF MAXIMAL RANK, THE IRANK X (N-IRANK) MATRIX U
  2806. C          AND THE (N-IRANK) X (N-IRANK) UPPER TRIANGULAR TU SUCH
  2807. C          THAT TRANSPOSE(TU)*TU=I+TRANSPOSE(U)*U
  2808. C
  2809. C    ..................................................................
  2810. C
  2811.     SUBROUTINE MFSS(A,N,EPS,IRANK,TRAC)
  2812. C
  2813. C
  2814. C       DIMENSIONED DUMMY VARIABLES
  2815.     DIMENSION A(1),TRAC(1)
  2816.     DOUBLE PRECISION SUM
  2817. C
  2818. C       TEST OF SPECIFIED DIMENSION
  2819.     IF(N)36,36,1
  2820. C
  2821. C       INITIALIZE TRIANGULAR FACTORIZATION
  2822. 1    IRANK=0
  2823.     ISUB=0
  2824.     KPIV=0
  2825.     J=0
  2826.     PIV=0.
  2827. C
  2828. C       SEARCH FIRST PIVOT ELEMENT
  2829.     DO 3 K=1,N
  2830.     J=J+K
  2831.     TRAC(K)=A(J)
  2832.     IF(A(J)-PIV)3,3,2
  2833. 2    PIV=A(J)
  2834.     KSUB=J
  2835.     KPIV=K
  2836. 3    CONTINUE
  2837. C
  2838. C       START LOOP OVER ALL ROWS OF A
  2839.     DO 32 I=1,N
  2840.     ISUB=ISUB+I
  2841.     IM1=I-1
  2842. 4    KMI=KPIV-I
  2843.     IF(KMI)35,9,5
  2844. C
  2845. C       PERFORM PARTIAL COLUMN INTERCHANGE
  2846. 5    JI=KSUB-KMI
  2847.     IDC=JI-ISUB
  2848.     JJ=ISUB-IM1
  2849.     DO 6 K=JJ,ISUB
  2850.     KK=K+IDC
  2851.     HOLD=A(K)
  2852.     A(K)=A(KK)
  2853. 6    A(KK)=HOLD
  2854. C
  2855. C       PERFORM PARTIAL ROW INTERCHANGE
  2856.     KK=KSUB
  2857.     DO 7 K=KPIV,N
  2858.     II=KK-KMI
  2859.     HOLD=A(KK)
  2860.     A(KK)=A(II)
  2861.     A(II)=HOLD
  2862. 7    KK=KK+K
  2863. C
  2864. C       PERFORM REMAINING INTERCHANGE
  2865.     JJ=KPIV-1
  2866.     II=ISUB
  2867.     DO 8 K=I,JJ
  2868.     HOLD=A(II)
  2869.     A(II)=A(JI)
  2870.     A(JI)=HOLD
  2871.     II=II+K
  2872. 8    JI=JI+1
  2873. 9    IF(IRANK)22,10,10
  2874. C
  2875. C       RECORD INTERCHANGE IN TRANSPOSITION VECTOR
  2876. 10    TRAC(KPIV)=TRAC(I)
  2877.     TRAC(I)=KPIV
  2878. C
  2879. C       MODIFY CURRENT PIVOT ROW
  2880.     KK=IM1-IRANK
  2881.     KMI=ISUB-KK
  2882.     PIV=0.
  2883.     IDC=IRANK+1
  2884.     JI=ISUB-1
  2885.     JK=KMI
  2886.     JJ=ISUB-I
  2887.     DO 19 K=I,N
  2888.     SUM=0.D0
  2889. C
  2890. C       BUILD UP SCALAR PRODUCT IF NECESSARY
  2891.     IF(KK)13,13,11
  2892. 11    DO 12 J=KMI,JI
  2893.     SUM=SUM-A(J)*A(JK)
  2894. 12    JK=JK+1
  2895. 13    JJ=JJ+K
  2896.     IF(K-I)14,14,16
  2897. 14    SUM=A(ISUB)+SUM
  2898. C
  2899. C       TEST RADICAND FOR LOSS OF SIGNIFICANCE
  2900.     IF(SUM-ABS(A(ISUB)*EPS))20,20,15
  2901. 15    A(ISUB)=DSQRT(SUM)
  2902.     KPIV=I+1
  2903.     GOTO 19
  2904. 16    SUM=(A(JK)+SUM)/A(ISUB)
  2905.     A(JK)=SUM
  2906. C
  2907. C       SEARCH FOR NEXT PIVOT ROW
  2908.     IF(A(JJ))19,19,17
  2909. 17    TRAC(K)=TRAC(K)-SUM*SUM
  2910.     HOLD=TRAC(K)/A(JJ)
  2911.     IF(PIV-HOLD)18,19,19
  2912. 18    PIV=HOLD
  2913.     KPIV=K
  2914.     KSUB=JJ
  2915. 19    JK=JJ+IDC
  2916.     GOTO 32
  2917. C
  2918. C       CALCULATE MATRIX OF DEPENDENCIES U
  2919. 20    IF(IRANK)21,21,37
  2920. 21    IRANK=-1
  2921.     GOTO 4
  2922. 22    IRANK=IM1
  2923.     II=ISUB-IRANK
  2924.     JI=II
  2925.     DO 26 K=1,IRANK
  2926.     JI=JI-1
  2927.     JK=ISUB-1
  2928.     JJ=K-1
  2929.     DO 26 J=I,N
  2930.     IDC=IRANK
  2931.     SUM=0.D0
  2932.     KMI=JI
  2933.     KK=JK
  2934.     IF(JJ)25,25,23
  2935. 23    DO 24 L=1,JJ
  2936.     IDC=IDC-1
  2937.     SUM=SUM-A(KMI)*A(KK)
  2938.     KMI=KMI-IDC
  2939. 24    KK=KK-1
  2940. 25    A(KK)=(SUM+A(KK))/A(KMI)
  2941. 26    JK=JK+J
  2942. C
  2943. C       CALCULATE I+TRANSPOSE(U)*U
  2944.     JJ=ISUB-I
  2945.     PIV=0.
  2946.     KK=ISUB-1
  2947.     DO 31 K=I,N
  2948.     JJ=JJ+K
  2949.     IDC=0
  2950.     DO 28 J=K,N
  2951.     SUM=0.D0
  2952.     KMI=JJ+IDC
  2953.     DO 27 L=II,KK
  2954.     JK=L+IDC
  2955. 27    SUM=SUM+A(L)*A(JK)
  2956.     A(KMI)=SUM
  2957. 28    IDC=IDC+J
  2958.     A(JJ)=A(JJ)+1.D0
  2959.     TRAC(K)=A(JJ)
  2960. C
  2961. C       SEARCH NEXT DIAGONAL ELEMENT
  2962.     IF(PIV-A(JJ))29,30,30
  2963. 29    KPIV=K
  2964.     KSUB=JJ
  2965.     PIV=A(JJ)
  2966. 30    II=II+K
  2967.     KK=KK+K
  2968. 31    CONTINUE
  2969.     GOTO 4
  2970. 32    CONTINUE
  2971. 33    IF(IRANK)35,34,35
  2972. 34    IRANK=N
  2973. 35    RETURN
  2974. C
  2975. C       ERROR RETURNS
  2976. C
  2977. C       RETURN IN CASE OF ILLEGAL DIMENSION
  2978. 36    IRANK=-1
  2979.     RETURN
  2980. C
  2981. C       INSTABLE FACTORIZATION OF I+TRANSPOSE(U)*U
  2982. 37    IRANK=-2
  2983.     RETURN
  2984.     END
  2985. C
  2986. C    ..................................................................
  2987. C
  2988. C       SUBROUTINE MFUN
  2989. C
  2990. C       PURPOSE
  2991. C          APPLY A FUNCTION TO EACH ELEMENT OF A MATRIX TO FORM A
  2992. C          RESULTANT MATRIX
  2993. C
  2994. C       USAGE
  2995. C          CALL MFUN (A,F,R,N,M,MS)
  2996. C          AN EXTERNAL STATEMENT MUST PRECEDE CALL STATEMENT IN ORDER
  2997. C          TO IDENTIFY PARAMETER F AS THE NAME OF A FUNCTION
  2998. C
  2999. C       DESCRIPTION OF PARAMETERS
  3000. C          A - NAME OF INPUT MATRIX
  3001. C          F - NAME OF FORTRAN-FURNISHED OR USER FUNCTION SUBPROGRAM
  3002. C          R - NAME OF OUTPUT MATRIX
  3003. C          N - NUMBER OF ROWS IN MATRIX A AND R
  3004. C          M - NUMBER OF COLUMNS IN MATRIX A AND R
  3005. C          MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A (AND R)
  3006. C                 0 - GENERAL
  3007. C                 1 - SYMMETRIC
  3008. C                 2 - DIAGONAL
  3009. C
  3010. C       REMARKS
  3011. C          PRECISION IS DEPENDENT UPON PRECISION OF FUNCTION USED
  3012. C
  3013. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  3014. C          LOC
  3015. C
  3016. C       METHOD
  3017. C          FUNCTION F IS APPLIED TO EACH ELEMENT OF MATRIX A
  3018. C          TO FORM MATRIX R
  3019. C
  3020. C    ..................................................................
  3021. C
  3022.     SUBROUTINE MFUN(A,F,R,N,M,MS)
  3023.     DIMENSION A(1),R(1)
  3024. C
  3025. C       COMPUTE VECTOR LENGTH, IT
  3026. C
  3027.     CALL LOC(N,M,IT,N,M,MS)
  3028. C
  3029. C       BUILD MATRIX R FOR ANY STORAGE MODE
  3030. C
  3031.     DO 5 I=1,IT
  3032. 5    R(I)=F(A(I))
  3033.     RETURN
  3034.     END
  3035. C
  3036. C    ..................................................................
  3037. C
  3038. C       SUBROUTINE MINV
  3039. C
  3040. C       PURPOSE
  3041. C          INVERT A MATRIX
  3042. C
  3043. C       USAGE
  3044. C          CALL MINV(A,N,D,L,M)
  3045. C
  3046. C       DESCRIPTION OF PARAMETERS
  3047. C          A - INPUT MATRIX, DESTROYED IN COMPUTATION AND REPLACED BY
  3048. C              RESULTANT INVERSE.
  3049. C          N - ORDER OF MATRIX A
  3050. C          D - RESULTANT DETERMINANT
  3051. C          L - WORK VECTOR OF LENGTH N
  3052. C          M - WORK VECTOR OF LENGTH N
  3053. C
  3054. C       REMARKS
  3055. C          MATRIX A MUST BE A GENERAL MATRIX
  3056. C
  3057. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  3058. C          NONE
  3059. C
  3060. C       METHOD
  3061. C          THE STANDARD GAUSS-JORDAN METHOD IS USED. THE DETERMINANT
  3062. C          IS ALSO CALCULATED. A DETERMINANT OF ZERO INDICATES THAT
  3063. C          THE MATRIX IS SINGULAR.
  3064. C
  3065. C    ..................................................................
  3066. C
  3067.     SUBROUTINE MINV(A,N,D,L,M)
  3068.     DIMENSION A(1),L(1),M(1)
  3069. C
  3070. C       ...............................................................
  3071. C
  3072. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  3073. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  3074. C       STATEMENT WHICH FOLLOWS.
  3075. C
  3076. C    DOUBLE PRECISION A,D,BIGA,HOLD
  3077. C
  3078. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  3079. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  3080. C       ROUTINE.
  3081. C
  3082. C       THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO
  3083. C       CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS.  ABS IN STATEMENT
  3084. C       10 MUST BE CHANGED TO DABS.
  3085. C
  3086. C       ...............................................................
  3087. C
  3088. C       SEARCH FOR LARGEST ELEMENT
  3089. C
  3090.     D=1.0
  3091.     NK=-N
  3092.     DO 80 K=1,N
  3093.     NK=NK+N
  3094.     L(K)=K
  3095.     M(K)=K
  3096.     KK=NK+K
  3097.     BIGA=A(KK)
  3098.     DO 20 J=K,N
  3099.     IZ=N*(J-1)
  3100.     DO 20 I=K,N
  3101.     IJ=IZ+I
  3102. 10    IF( ABS(BIGA)- ABS(A(IJ))) 15,20,20
  3103. 15    BIGA=A(IJ)
  3104.     L(K)=I
  3105.     M(K)=J
  3106. 20    CONTINUE
  3107. C
  3108. C       INTERCHANGE ROWS
  3109. C
  3110.     J=L(K)
  3111.     IF(J-K) 35,35,25
  3112. 25    KI=K-N
  3113.     DO 30 I=1,N
  3114.     KI=KI+N
  3115.     HOLD=-A(KI)
  3116.     JI=KI-K+J
  3117.     A(KI)=A(JI)
  3118. 30    A(JI) =HOLD
  3119. C
  3120. C       INTERCHANGE COLUMNS
  3121. C
  3122. 35    I=M(K)
  3123.     IF(I-K) 45,45,38
  3124. 38    JP=N*(I-1)
  3125.     DO 40 J=1,N
  3126.     JK=NK+J
  3127.     JI=JP+J
  3128.     HOLD=-A(JK)
  3129.     A(JK)=A(JI)
  3130. 40    A(JI) =HOLD
  3131. C
  3132. C       DIVIDE COLUMN BY MINUS PIVOT (VALUE OF PIVOT ELEMENT IS
  3133. C       CONTAINED IN BIGA)
  3134. C
  3135. 45    IF(BIGA) 48,46,48
  3136. 46    D=0.0
  3137.     RETURN
  3138. 48    DO 55 I=1,N
  3139.     IF(I-K) 50,55,50
  3140. 50    IK=NK+I
  3141.     A(IK)=A(IK)/(-BIGA)
  3142. 55    CONTINUE
  3143. C
  3144. C       REDUCE MATRIX
  3145. C
  3146.     DO 65 I=1,N
  3147.     IK=NK+I
  3148.     HOLD=A(IK)
  3149.     IJ=I-N
  3150.     DO 65 J=1,N
  3151.     IJ=IJ+N
  3152.     IF(I-K) 60,65,60
  3153. 60    IF(J-K) 62,65,62
  3154. 62    KJ=IJ-I+K
  3155.     A(IJ)=HOLD*A(KJ)+A(IJ)
  3156. 65    CONTINUE
  3157. C
  3158. C       DIVIDE ROW BY PIVOT
  3159. C
  3160.     KJ=K-N
  3161.     DO 75 J=1,N
  3162.     KJ=KJ+N
  3163.     IF(J-K) 70,75,70
  3164. 70    A(KJ)=A(KJ)/BIGA
  3165. 75    CONTINUE
  3166. C
  3167. C       PRODUCT OF PIVOTS
  3168. C
  3169.     D=D*BIGA
  3170. C
  3171. C       REPLACE PIVOT BY RECIPROCAL
  3172. C
  3173.     A(KK)=1.0/BIGA
  3174. 80    CONTINUE
  3175. C
  3176. C       FINAL ROW AND COLUMN INTERCHANGE
  3177. C
  3178.     K=N
  3179. 100    K=(K-1)
  3180.     IF(K) 150,150,105
  3181. 105    I=L(K)
  3182.     IF(I-K) 120,120,108
  3183. 108    JQ=N*(K-1)
  3184.     JR=N*(I-1)
  3185.     DO 110 J=1,N
  3186.     JK=JQ+J
  3187.     HOLD=A(JK)
  3188.     JI=JR+J
  3189.     A(JK)=-A(JI)
  3190. 110    A(JI) =HOLD
  3191. 120    J=M(K)
  3192.     IF(J-K) 100,100,125
  3193. 125    KI=K-N
  3194.     DO 130 I=1,N
  3195.     KI=KI+N
  3196.     HOLD=A(KI)
  3197.     JI=KI-K+J
  3198.     A(KI)=-A(JI)
  3199. 130    A(JI) =HOLD
  3200.     GO TO 100
  3201. 150    RETURN
  3202.     END
  3203. C
  3204. C    ..................................................................
  3205. C
  3206. C       SUBROUTINE MISR
  3207. C
  3208. C       PURPOSE
  3209. C          COMPUTE MEANS, STANDARD DEVIATIONS, SKEWNESS AND KURTOSIS,
  3210. C          CORRELATION COEFFICIENTS, REGRESSION COEFFICIENTS, AND
  3211. C          STANDARD ERRORS OF REGRESSION COEFFICIENTS WHEN THERE ARE
  3212. C          MISSING DATA POINTS.  THE USER IDENTIFIES THE MISSING DATA
  3213. C          BY MEANS OF A NUMERIC CODE.  THOSE VALUES HAVING THIS CODE
  3214. C          ARE SKIPPED IN COMPUTING THE STATISTICS.  IN THE CASE OF THE
  3215. C          CORRELATION COEFFICIENTS, ANY PAIR OF VALUES ARE SKIPPED IF
  3216. C          EITHER ONE OF THEM ARE MISSING.
  3217. C
  3218. C       USAGE
  3219. C          CALL MISR (NO,M,X,CODE,XBAR,STD,SKEW,CURT,R,N,A,B,S,IER)
  3220. C
  3221. C       DESCRIPTION OF PARAMETERS
  3222. C          NO   - NUMBER OF OBSERVATIONS
  3223. C          M    - NUMBER OF VARIABLES
  3224. C          X    - INPUT DATA MATRIX OF SIZE NO X M.
  3225. C          CODE - INPUT VECTOR OF LENGTH M, WHICH CONTAINS A NUMERIC
  3226. C                 MISSING DATA CODE FOR EACH VARIABLE. ANY OBSERVATION
  3227. C                 FOR A GIVEN VARIABLE HAVING A VALUE EQUAL TO THE CODE
  3228. C                 WILL BE DROPPED FOR THE COMPUTATIONS.
  3229. C          XBAR - OUTPUT VECTOR OF LENGTH M CONTAINING MEANS
  3230. C          STD  - OUTPUT VECTOR OF LENGTH M CONTAINING STANDARD DEVI-
  3231. C                 ATIONS
  3232. C          SKEW - OUTPUT VECTOR OF LENGTH M CONTAINING SKEWNESS
  3233. C          CURT - OUTPUT VECTOR OF LENGTH M CONTAINING KURTOSIS
  3234. C          R    - OUTPUT MATRIX OF PRODUCT-MOMENT CORRELATION
  3235. C                 COEFFICIENTS.  THIS WILL BE THE UPPER TRIANGULAR
  3236. C                 MATRIX ONLY, SINCE THE M X M MATRIX OF COEFFICIENTS
  3237. C                 IS SYMMETRIC. (STORAGE MODE 1)
  3238. C          N    - OUTPUT MATRIX OF NUMBER OF PAIRS OF OBSERVATIONS USED
  3239. C                 IN COMPUTING THE CORRELATION COEFFICIENTS.  ONLY THE
  3240. C                 UPPER TRIANGULAR PORTION OF THE MATRIX IS GIVEN.
  3241. C                 (STORAGE MODE 1)
  3242. C          A    - OUTPUT MATRIX (M BY M)  CONTAINING INTERCEPTS OF
  3243. C                 REGRESSION LINES (A) OF THE FORM Y=A+BX.  THE FIRST
  3244. C                 SUBSCRIPT OF THIS MATRIX REFERS TO THE INDEPENDENT
  3245. C                 VARIABLE AND THE SECOND TO THE DEPENDENT VARIABLE.
  3246. C                 FOR EXAMPLE, A(1,3) CONTAINS THE INTERCEPT OF THE
  3247. C                 REGRESSION LINE FOR TWO VARIABLES WHERE VARIABLE 1
  3248. C                 IS INDEPENDENT AND VARIABLE 3 IS DEPENDENT.  NOTE
  3249. C                 THAT MATRIX A IS STORED IN A VECTOR FORM.
  3250. C          B    - OUTPUT MATRIX (M BY M)  CONTAINING REGRESSION
  3251. C                 COEFFICIENTS (B) CORRESPONDING TO THE VALUES OF
  3252. C                 INTERCEPTS CONTAINED IN THE OUTPUT MATRIX A.
  3253. C          S    - OUTPUT MATRIX (M BY M)  CONTAINING STANDARD ERRORS
  3254. C                 OF REGRESSION COEFFICIENTS CORRESPONDING TO THE
  3255. C                 COEFFICIENTS CONTAINED IN THE OUTPUT MATRIX B.
  3256. C          IER  - 0, NO ERROR.
  3257. C                 1, IF NUMBER OF NON-MISSING DATA ELEMENTS FOR J-TH
  3258. C                    VARIABLE IS TWO OR LESS.  IN THIS CASE, STD(J),
  3259. C                    SKEW(J), AND CURT(J) ARE SET TO 10**75.  ALL
  3260. C                    VALUES OF R, A, B, AND S RELATED TO THIS VARIABLE
  3261. C                    ARE ALSO SET TO 10**75.
  3262. C                 2, IF VARIANCE OF J-TH VARIABLE IS LESS THAN
  3263. C                    10**(-20).  IN THIS CASE, STD(J), SKEW(J), AND
  3264. C                    CURT(J) ARE SET TO 10**75.  ALL VALUES OF R, A,
  3265. C                    B, AND S RELATED TO THIS VARIABLE ARE ALSO SET TO
  3266. C                    10**75.
  3267. C
  3268. C       REMARKS
  3269. C          THIS SUBROUTINE CANNOT DISTINGUISH A BLANK AND A ZERO.
  3270. C          THEREFORE, IF A BLANK IS SPECIFIED AS A MISSING DATA CODE IN
  3271. C          INPUT CARDS, IT WILL BE TREATED AS 0 (ZERO).
  3272. C
  3273. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  3274. C          NONE
  3275. C
  3276. C       METHOD
  3277. C          LEAST SQUARES REGRESSION LINES AND PRODUCT-MOMENT CORRE-
  3278. C          LATION COEFFICIENTS ARE COMPUTED.
  3279. C
  3280. C    ..................................................................
  3281. C
  3282.     SUBROUTINE MISR (NO,M,X,CODE,XBAR,STD,SKEW,CURT,R,N,A,B,S,IER)
  3283. C
  3284.     DIMENSION X(1),CODE(1),XBAR(1),STD(1),SKEW(1),CURT(1),R(1),N(1)
  3285.     DIMENSION A(1),B(1),S(1)
  3286. C
  3287. C       COMPUTE MEANS
  3288. C
  3289.     IER=0
  3290.     L=0
  3291.     DO 20 J=1,M
  3292.     FN=0.0
  3293.     XBAR(J)=0.0
  3294.     DO 15 I=1,NO
  3295.     L=L+1
  3296.     IF(X(L)-CODE(J)) 12, 15, 12
  3297. 12    FN=FN+1.0
  3298.     XBAR(J)=XBAR(J)+X(L)
  3299. 15    CONTINUE
  3300.     IF(FN) 16, 16, 17
  3301. 16    XBAR(J)=0.0
  3302.     GO TO 20
  3303. 17    XBAR(J)=XBAR(J)/FN
  3304. 20    CONTINUE
  3305. C
  3306. C       SET-UP WORK AREAS AND TEST WHETHER DATA IS MISSING
  3307. C
  3308.     L=0
  3309.     DO 55 J=1,M
  3310.     LJJ=NO*(J-1)
  3311.     SKEW(J)=0.0
  3312.     CURT(J)=0.0
  3313.     KI=M*(J-1)
  3314.     KJ=J-M
  3315.     DO 54 I=1,J
  3316.     KI=KI+1
  3317.     KJ=KJ+M
  3318.     SUMX=0.0
  3319.     SUMY=0.0
  3320.     TI=0.0
  3321.     TJ=0.0
  3322.     TII=0.0
  3323.     TJJ=0.0
  3324.     TIJ=0.0
  3325.     NIJ=0
  3326.     LI=NO*(I-1)
  3327.     LJ=LJJ
  3328.     L=L+1
  3329.     DO 38 K=1,NO
  3330.     LI=LI+1
  3331.     LJ=LJ+1
  3332.     IF(X(LI)-CODE(I)) 30, 38, 30
  3333. 30    IF(X(LJ)-CODE(J)) 35, 38, 35
  3334. C
  3335. C       BOTH DATA ARE PRESENT
  3336. C
  3337. 35    XX=X(LI)-XBAR(I)
  3338.     YY=X(LJ)-XBAR(J)
  3339.     TI=TI+XX
  3340.     TII=TII+XX**2
  3341.     TJ=TJ+YY
  3342.     TJJ=TJJ+YY**2
  3343.     TIJ=TIJ+XX*YY
  3344.     NIJ=NIJ+1
  3345.     SUMX=SUMX+X(LI)
  3346.     SUMY=SUMY+X(LJ)
  3347.     IF(I-J) 38, 37, 37
  3348. 37    SKEW(J)=SKEW(J)+YY**3
  3349.     CURT(J)=CURT(J)+YY**4
  3350. 38    CONTINUE
  3351. C
  3352. C       COMPUTE SUM OF CROSS-PRODUCTS OF DEVIATIONS
  3353. C
  3354.     IF(NIJ) 40, 40, 39
  3355. 39    FN=NIJ
  3356.     R(L)=TIJ-TI*TJ/FN
  3357.     N(L)=NIJ
  3358.     TII=TII-TI*TI/FN
  3359.     TJJ=TJJ-TJ*TJ/FN
  3360. C
  3361. C       COMPUTE STANDARD DEVIATION, SKEWNESS, AND KURTOSIS
  3362. C
  3363. 40    IF(I-J) 47, 41, 47
  3364. 41    IF(NIJ-2) 42,42,43
  3365. 42    IER=1
  3366.     R(L)=1.7E38
  3367.     A(KI)=1.7E38
  3368.     B(KI)=1.7E38
  3369.     S(KI)=1.7E38
  3370.     GO TO 45
  3371. C
  3372. 43    STD(J)=R(L)
  3373.     R(L)=1.0
  3374.     A(KI)=0.0
  3375.     B(KI)=1.0
  3376.     S(KI)=0.0
  3377. C
  3378.     IF(STD(J)-(1.0E-20)) 44,44,46
  3379. 44    IER=2
  3380. 45    STD(J)=1.7E38
  3381.     SKEW(J)=1.7E38
  3382.     CURT(J)=1.7E38
  3383.     GO TO 55
  3384. C
  3385. 46    WORK=STD(J)/FN
  3386.     SKEW(J)=(SKEW(J)/FN)/(WORK*SQRT(WORK))
  3387.     CURT(J)=((CURT(J)/FN)/WORK**2)-3.0
  3388.     STD(J)=SQRT(STD(J)/(FN-1.0))
  3389.     GO TO 55
  3390. C
  3391. C       COMPUTE REGRESSION COEFFICIENTS
  3392. C
  3393. 47    IF(NIJ-2) 48,48,50
  3394. 48    IER=1
  3395. 49    R(L)=1.7E38
  3396.     A(KI)=1.7E38
  3397.     B(KI)=1.7E38
  3398.     S(KI)=1.7E38
  3399.     A(KJ)=1.7E38
  3400.     B(KJ)=1.7E38
  3401.     S(KJ)=1.7E38
  3402.     GO TO 54
  3403. C
  3404. 50    IF(TII-(1.0E-20)) 52,52,51
  3405. 51    IF(TJJ-(1.0E-20)) 52,52,53
  3406. 52    IER=2
  3407.     GO TO 49
  3408. C
  3409. 53    SUMX=SUMX/FN
  3410.     SUMY=SUMY/FN
  3411.     B(KI)=R(L)/TII
  3412.     A(KI)=SUMY-B(KI)*SUMX
  3413.     B(KJ)=R(L)/TJJ
  3414.     A(KJ)=SUMX-B(KJ)*SUMY
  3415. C
  3416. C       COMPUTE CORRELATION COEFFICIENTS
  3417. C
  3418.     R(L)=R(L)/(SQRT(TII)*SQRT(TJJ))
  3419. C
  3420. C       COMPUTE STANDARD ERRORS OF REGRESSION COEFFICIENTS
  3421. C
  3422.     RR=R(L)**2
  3423.     SUMX=(TJJ-TJJ*RR)/(FN-2)
  3424.     S(KI)=SQRT(SUMX/TII)
  3425.     SUMY=(TII-TII*RR)/(FN-2)
  3426.     S(KJ)=SQRT(SUMY/TJJ)
  3427. C
  3428. 54    CONTINUE
  3429. 55    CONTINUE
  3430. C
  3431.     RETURN
  3432.     END
  3433. C
  3434. C    ..................................................................
  3435. C
  3436. C       SUBROUTINE MLSS
  3437. C
  3438. C       PURPOSE
  3439. C          SUBROUTINE MLSS IS THE SECOND STEP IN THE PROCEDURE FOR
  3440. C          CALCULATING THE LEAST SQUARES SOLUTION OF MINIMAL LENGTH
  3441. C          OF A SYSTEM OF SIMULTANEOUS LINEAR EQUATIONS WITH SYMMETRIC
  3442. C          POSITIVE SEMI-DEFINITE COEFFICIENT MATRIX.
  3443. C
  3444. C       USAGE
  3445. C          CALL MLSS(A,N,IRANK,TRAC,INC,RHS,IER)
  3446. C
  3447. C       DESCRIPTION OF PARAMETERS
  3448. C          A     - COEFFICIENT MATRIX IN FACTORED FORM AS GENERATED
  3449. C                  BY SUBROUTINE MFSS FROM INITIALLY GIVEN SYMMETRIC
  3450. C                  COEFFICIENT MATRIX A STORED IN N*(N+1)/2 LOCATIONS
  3451. C                  A REMAINS UNCHANGED
  3452. C          N     - DIMENSION OF COEFFICIENT MATRIX
  3453. C          IRANK - RANK OF COEFFICIENT MATRIX, CALCULATED BY MEANS OF
  3454. C                  SUBROUTINE MFSS
  3455. C          TRAC  - VECTOR OF DIMENSION N CONTAINING THE
  3456. C                  SUBSCRIPTS OF PIVOT ROWS AND COLUMNS, I.E. THE
  3457. C                  PRODUCT REPRESENTATION IN TRANSPOSITIONS OF THE
  3458. C                  PERMUTATION WHICH WAS APPLIED TO ROWS AND COLUMNS
  3459. C                  OF A IN THE FACTORIZATION PROCESS
  3460. C                  TRAC IS A RESULTANT ARRAY OF SUBROUTINE MFSS
  3461. C          INC   - INPUT VARIABLE WHICH SHOULD CONTAIN THE VALUE ZERO
  3462. C                  IF THE SYSTEM OF SIMULTANEOUS EQUATIONS IS KNOWN
  3463. C                  TO BE COMPATIBLE AND A NONZERO VALUE OTHERWISE
  3464. C          RHS   - VECTOR OF DIMENSION N CONTAINING THE RIGHT HAND SIDE
  3465. C                  ON RETURN RHS CONTAINS THE MINIMAL LENGTH SOLUTION
  3466. C          IER   - RESULTANT ERROR PARAMETER
  3467. C                  IER = 0 MEANS NO ERRORS
  3468. C                  IER =-1 MEANS N AND/OR IRANK IS NOT POSITIVE AND/OR
  3469. C                          IRANK IS GREATER THAN N
  3470. C                  IER = 1 MEANS THE FACTORIZATION CONTAINED IN A HAS
  3471. C                          ZERO DIVISORS AND/OR TRAC CONTAINS
  3472. C                          VALUES OUTSIDE THE FEASIBLE RANGE 1 UP TO N
  3473. C
  3474. C       REMARKS
  3475. C          THE MINIMAL LENGTH SOLUTION IS PRODUCED IN THE STORAGE
  3476. C          LOCATIONS OCCUPIED BY THE RIGHT HAND SIDE.
  3477. C          SUBROUTINE MLSS DOES TAKE CARE OF THE PERMUTATION
  3478. C          WHICH WAS APPLIED TO ROWS AND COLUMNS OF A.
  3479. C          OPERATION IS BYPASSED IN CASE OF A NON POSITIVE VALUE
  3480. C          OF IRANK
  3481. C
  3482. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  3483. C          NONE
  3484. C
  3485. C       METHOD
  3486. C          LET T, U, TU BE THE COMPONENTS OF THE FACTORIZATION OF A,
  3487. C          AND LET THE RIGHT HAND SIDE BE PARTITIONED INTO A FIRST
  3488. C          PART X1 OF DIMENSION IRANK AND A SECOND PART X2 OF DIMENSION
  3489. C          N-IRANK. THEN THE FOLLOWING OPERATIONS ARE APPLIED IN
  3490. C          SEQUENCE
  3491. C          (1) INTERCHANGE RIGHT HAND SIDE
  3492. C          (2) X1 = X1 + U * X2
  3493. C          (3) X2 =-TRANSPOSE(U) * X1
  3494. C          (4) X2 = INVERSE(TU) * INVERSE(TRANSPOSE(TU)) * X2
  3495. C          (5) X1 = X1 + U * X2
  3496. C          (6) X1 = INVERSE(T) * INVERSE(TRANSPOSE(T)) * X1
  3497. C          (7) X2 =-TRANSPOSE(U) * X1
  3498. C          (8) X2 = INVERSE(TU) * INVERSE(TRANSPOSE(TU)) * X2
  3499. C          (9) X1 = X1 + U * X2
  3500. C          (10)X2 = TRANSPOSE(U) * X1
  3501. C          (11) REINTERCHANGE CALCULATED SOLUTION
  3502. C          IF THE SYSTEM OF SIMULTANEOUS LINEAR EQUATIONS IS SPECIFIED
  3503. C          TO BE COMPATIBLE THEN STEPS (2), (3), (4) AND (5) ARE
  3504. C          CANCELLED.
  3505. C          IF THE COEFFICIENT MATRIX HAS RANK N, THEN THE ONLY STEPS
  3506. C          PERFORMED ARE (1), (6) AND (11).
  3507. C
  3508. C    ..................................................................
  3509. C
  3510.     SUBROUTINE MLSS(A,N,IRANK,TRAC,INC,RHS,IER)
  3511. C
  3512. C
  3513. C       DIMENSIONED DUMMY VARIABLES
  3514.     DIMENSION A(1),TRAC(1),RHS(1)
  3515.     DOUBLE PRECISION SUM
  3516. C
  3517. C       TEST OF SPECIFIED DIMENSIONS
  3518.     IDEF=N-IRANK
  3519.     IF(N)33,33,1
  3520. 1    IF(IRANK)33,33,2
  3521. 2    IF(IDEF)33,3,3
  3522. C
  3523. C       CALCULATE AUXILIARY VALUES
  3524. 3    ITE=IRANK*(IRANK+1)/2
  3525.     IX2=IRANK+1
  3526.     NP1=N+1
  3527.     IER=0
  3528. C
  3529. C       INTERCHANGE RIGHT HAND SIDE
  3530.     JJ=1
  3531.     II=1
  3532. 4    DO 6 I=1,N
  3533.     J=TRAC(II)
  3534.     IF(J)31,31,5
  3535. 5    HOLD=RHS(II)
  3536.     RHS(II)=RHS(J)
  3537.     RHS(J)=HOLD
  3538. 6    II=II+JJ
  3539.     IF(JJ)32,7,7
  3540. C
  3541. C       PERFORM STEP 2 IF NECESSARY
  3542. 7    ISW=1
  3543.     IF(INC*IDEF)8,28,8
  3544. C
  3545. C       CALCULATE X1 = X1 + U * X2
  3546. 8    ISTA=ITE
  3547.     DO 10 I=1,IRANK
  3548.     ISTA=ISTA+1
  3549.     JJ=ISTA
  3550.     SUM=0.D0
  3551.     DO 9 J=IX2,N
  3552.     SUM=SUM+A(JJ)*RHS(J)
  3553. 9    JJ=JJ+J
  3554. 10    RHS(I)=RHS(I)+SUM
  3555.     GOTO(11,28,11),ISW
  3556. C
  3557. C       CALCULATE X2 = TRANSPOSE(U) * X1
  3558. 11    ISTA=ITE
  3559.     DO 15 I=IX2,N
  3560.     JJ=ISTA
  3561.     SUM=0.D0
  3562.     DO 12 J=1,IRANK
  3563.     JJ=JJ+1
  3564. 12    SUM=SUM+A(JJ)*RHS(J)
  3565.     GOTO(13,13,14),ISW
  3566. 13    SUM=-SUM
  3567. 14    RHS(I)=SUM
  3568. 15    ISTA=ISTA+I
  3569.     GOTO(16,29,30),ISW
  3570. C
  3571. C       INITIALIZE STEP (4) OR STEP (8)
  3572. 16    ISTA=IX2
  3573.     IEND=N
  3574.     JJ=ITE+ISTA
  3575. C
  3576. C       DIVISION OF X1 BY TRANSPOSE OF TRIANGULAR MATRIX
  3577. 17    SUM=0.D0
  3578.     DO 20 I=ISTA,IEND
  3579.     IF(A(JJ))18,31,18
  3580. 18    RHS(I)=(RHS(I)-SUM)/A(JJ)
  3581.     IF(I-IEND)19,21,21
  3582. 19    JJ=JJ+ISTA
  3583.     SUM=0.D0
  3584.     DO 20 J=ISTA,I
  3585.     SUM=SUM+A(JJ)*RHS(J)
  3586. 20    JJ=JJ+1
  3587. C
  3588. C       DIVISION OF X1 BY TRIANGULAR MATRIX
  3589. 21    SUM=0.D0
  3590.     II=IEND
  3591.     DO 24 I=ISTA,IEND
  3592.     RHS(II)=(RHS(II)-SUM)/A(JJ)
  3593.     IF(II-ISTA)25,25,22
  3594. 22    KK=JJ-1
  3595.     SUM=0.D0
  3596.     DO 23 J=II,IEND
  3597.     SUM=SUM+A(KK)*RHS(J)
  3598. 23    KK=KK+J
  3599.     JJ=JJ-II
  3600. 24    II=II-1
  3601. 25    IF(IDEF)26,30,26
  3602. 26    GOTO(27,11,8),ISW
  3603. C
  3604. C       PERFORM STEP (5)
  3605. 27    ISW=2
  3606.     GOTO 8
  3607. C
  3608. C       PERFORM STEP (6)
  3609. 28    ISTA=1
  3610.     IEND=IRANK
  3611.     JJ=1
  3612.     ISW=2
  3613.     GOTO 17
  3614. C
  3615. C       PERFORM STEP (8)
  3616. 29    ISW=3
  3617.     GOTO 16
  3618. C
  3619. C       REINTERCHANGE CALCULATED SOLUTION
  3620. 30    II=N
  3621.     JJ=-1
  3622.     GOTO 4
  3623. C
  3624. C       ERROR RETURN IN CASE OF ZERO DIVISOR
  3625. 31    IER=1
  3626. 32    RETURN
  3627. C
  3628. C       ERROR RETURN IN CASE OF ILLEGAL DIMENSION
  3629. 33    IER=-1
  3630.     RETURN
  3631.     END
  3632. C
  3633. C    ..................................................................
  3634. C
  3635. C       SUBROUTINE MOMEN
  3636. C
  3637. C       PURPOSE
  3638. C          TO FIND THE THE FIRST FOUR MOMENTS FOR GROUPED DATA ON
  3639. C          EQUAL CLASS INTERVALS.
  3640. C
  3641. C       USAGE
  3642. C          CALL MOMEN (F,UBO,NOP,ANS)
  3643. C
  3644. C       DESCRIPTION OF PARAMETERS
  3645. C          F   - GROUPED DATA (FREQUENCIES).  GIVEN AS A VECTOR OF
  3646. C                LENGTH (UBO(3)-UBO(1))/UBO(2)
  3647. C          UBO - 3 CELL VECTOR, UBO(1) IS LOWER BOUND AND UBO(3) UPPER
  3648. C                BOUND ON DATA.  UBO(2) IS CLASS INTERVAL.  NOTE THAT
  3649. C                UBO(3) MUST BE GREATER THAN UBO(1).
  3650. C          NOP - OPTION PARAMETER.  IF NOP = 1, ANS(1) = MEAN.  IF
  3651. C                NOP = 2, ANS(2) = SECOND MOMENT.  IF NOP = 3, ANS(3) =
  3652. C                THIRD MOMENT.  IF NOP = 4, ANS(4) = FOURTH MOMENT.
  3653. C                IF NOP = 5, ALL FOUR MOMENTS ARE FILLED IN.
  3654. C          ANS - OUTPUT VECTOR OF LENGTH 4 INTO WHICH MOMENTS ARE PUT.
  3655. C
  3656. C       REMARKS
  3657. C          NOTE THAT THE FIRST MOMENT IS NOT CENTRAL BUT THE VALUE OF
  3658. C          THE MEAN ITSELF.  THE MEAN IS ALWAYS CALCULATED.  MOMENTS
  3659. C          ARE BIASED AND NOT CORRECTED FOR GROUPING.
  3660. C
  3661. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  3662. C          NONE
  3663. C
  3664. C       METHOD
  3665. C          REFER TO M. G. KENDALL, 'THE ADVANCED THEORY OF STATISTICS',
  3666. C          V.1, HAFNER PUBLISHING COMPANY, 1958, CHAPTER 3.
  3667. C
  3668. C    ..................................................................
  3669. C
  3670.     SUBROUTINE MOMEN (F,UBO,NOP,ANS)
  3671.     DIMENSION F(1),UBO(1),ANS(1)
  3672. C
  3673.     DO 100 I=1,4
  3674. 100    ANS(I)=0.0
  3675. C
  3676. C    CALCULATE THE NUMBER OF CLASS INTERVALS
  3677. C
  3678.     N=(UBO(3)-UBO(1))/UBO(2)+0.5
  3679. C
  3680. C    CALCULATE TOTAL FREQUENCY
  3681. C
  3682.     T=0.0
  3683.     DO 110 I=1,N
  3684. 110    T=T+F(I)
  3685. C
  3686.     IF(NOP-5) 130, 120, 115
  3687. 115    NOP=5
  3688. 120    JUMP=1
  3689.     GO TO 150
  3690. 130    JUMP=2
  3691. C
  3692. C       FIRST MOMENT
  3693. C
  3694. 150    DO 160 I=1,N
  3695.     FI=I
  3696. 160    ANS(1)=ANS(1)+F(I)*(UBO(1)+(FI-0.5)*UBO(2))
  3697.     ANS(1)=ANS(1)/T
  3698. C
  3699.     GO TO (350,200,250,300,200), NOP
  3700. C
  3701. C       SECOND MOMENT
  3702. C
  3703. 200    DO 210 I=1,N
  3704.     FI=I
  3705. 210    ANS(2)=ANS(2)+F(I)*(UBO(1)+(FI-0.5)*UBO(2)-ANS(1))**2
  3706.     ANS(2)=ANS(2)/T
  3707.     GO TO (250,350), JUMP
  3708. C
  3709. C       THIRD MOMENT
  3710. C
  3711. 250    DO 260 I=1,N
  3712.     FI=I
  3713. 260    ANS(3)=ANS(3)+F(I)*(UBO(1)+(FI-0.5)*UBO(2)-ANS(1))**3
  3714.     ANS(3)=ANS(3)/T
  3715.     GO TO (300,350), JUMP
  3716. C
  3717. C       FOURTH MOMENT
  3718. C
  3719. 300    DO 310 I=1,N
  3720.     FI=I
  3721. 310    ANS(4)=ANS(4)+F(I)*(UBO(1)+(FI-0.5)*UBO(2)-ANS(1))**4
  3722.     ANS(4)=ANS(4)/T
  3723. 350    RETURN
  3724.     END
  3725. C
  3726. C    ..................................................................
  3727. C
  3728. C       SUBROUTINE MPAIR
  3729. C
  3730. C       PURPOSE
  3731. C          PERFORM THE WILCOXON MATCHED-PAIRS SIGNED-RANKS TEST, GIVEN
  3732. C          TWO VECTORS OF N OBSERVATIONS OF THE MATCHED SAMPLES.
  3733. C
  3734. C       USAGE
  3735. C          CALL MPAIR (N,A,B,K,T,Z,P,D,E,L,IE)
  3736. C
  3737. C       DESCRIPTION OF PARAMETERS
  3738. C          N - NUMBER OF OBSERVATIONS IN THE VECTORS A AND B
  3739. C          A - INPUT VECTOR OF LENGTH N CONTAINING DATA FROM THE FIRST
  3740. C              SAMPLE
  3741. C          B - INPUT VECTOR OF LENGTH N CONTAINING DATA FROM THE SECOND
  3742. C              SAMPLE
  3743. C          K - OUTPUT VARIABLE CONTAINING THE NUMBER OF PAIRS OF THE
  3744. C              MATCHED SAMPLES WHOSE DIFFERENCES ARE NON ZERO (0)
  3745. C          T - OUTPUT VARIABLE CONTAINING THE SUM OF THE RANKS OF PLUS
  3746. C              OR MINUS DIFFERENCES, WHICHEVER IS SMALLER
  3747. C          Z - VALUE OF THE STANDARDIZED NORMAL SCORE COMPUTED FOR THE
  3748. C              WILCOXON MATCHED-PAIRS SIGNED-RANKS TEST
  3749. C          P - COMPUTED PROBABILITY OF OBTAINING A VALUE OF Z AS
  3750. C              EXTREME AS THE ONE FOUND BY THE TEST
  3751. C          D - WORKING VECTOR OF LENGTH N
  3752. C          E - WORKING VECTOR OF LENGTH N
  3753. C          L - WORKING VECTOR OF LENGTH N
  3754. C          IE- 1, IF SAMPLES A AND B ARE IDENTICAL.
  3755. C              0 OTHERWISE.  IF IE=1, THEN T=P=0, AND Z=-10**75
  3756. C
  3757. C       REMARKS
  3758. C          THE COMPUTED PROBABILTY IS FOR A ONE-TAILED TEST.
  3759. C          MULTIPLYING P BY 2 WILL GIVE THE VALUE FOR A TWO-TAILED
  3760. C          TEST.
  3761. C
  3762. C       SUBROUTINES AND FUNCTIONS SUBPROGRAMS REQUIRED
  3763. C          RANK
  3764. C          NDTR
  3765. C
  3766. C       METHOD
  3767. C          REFER TO DIXON AND MASSEY, AN INTRODUCTION TO STATISTICAL
  3768. C          ANALYSIS (MC GRAW-HILL, 1957)
  3769. C
  3770. C    ..................................................................
  3771. C
  3772.     SUBROUTINE MPAIR (N,A,B,K,T,Z,P,D,E,L,IE)
  3773. C
  3774.     DIMENSION A(1),B(1),D(1),E(1),L(1)
  3775. C
  3776.     IE=0
  3777.     K=N
  3778. C
  3779. C       FIND DIFFERENCES OF MATCHED-PAIRS
  3780. C
  3781.     BIG=0.0
  3782.     DO 55 I=1,N
  3783.     DIF=A(I)-B(I)
  3784.     IF(DIF) 10, 20, 30
  3785. C
  3786. C       DIFFERENCE HAS A NEGATIVE SIGN (-)
  3787. C
  3788. 10    L(I)=1
  3789.     GO TO 40
  3790. C
  3791. C       DIFFERENCE IS ZERO (0)
  3792. C
  3793. 20    L(I)=2
  3794.     K=K-1
  3795.     GO TO 40
  3796. C
  3797. C       DIFFERENCE HAS A POSITIVE SIGN (+)
  3798. C
  3799. 30    L(I)=3
  3800. C
  3801. 40    DIF= ABS(DIF)
  3802.     IF(BIG-DIF) 45, 50, 50
  3803. 45    BIG=DIF
  3804. 50    D(I)=DIF
  3805. C
  3806. 55    CONTINUE
  3807.     IF(K) 57,57,59
  3808. 57    IE=1
  3809.     T=0.0
  3810.     Z=-1.7E38
  3811.     P=0
  3812.     GO TO 100
  3813. C
  3814. C       STORE A LARGE VALUE IN PLACE OF 0 DIFFERENCE IN ORDER TO
  3815. C       ASSIGN A LARGE RANK (LARGER THAN K), SO THAT ABSOLUTE VALUES
  3816. C       OF SIGNED DIFFERENCES WILL BE PROPERLY RANKED
  3817. C
  3818. 59    BIG=BIG*2.0
  3819.     DO 65 I=1,N
  3820.     IF(L(I)-2) 65, 60, 65
  3821. 60    D(I)=BIG
  3822. 65    CONTINUE
  3823. C
  3824.     CALL RANK (D,E,N)
  3825. C
  3826. C       FIND SUMS OF RANKS OF (+) DIFFERENCES AND (-) DIFFERENCES
  3827. C
  3828.     SUMP=0.0
  3829.     SUMM=0.0
  3830.     DO 80 I=1,N
  3831.     IF(L(I)-2) 70, 80, 75
  3832. 70    SUMM=SUMM+E(I)
  3833.     GO TO 80
  3834. 75    SUMP=SUMP+E(I)
  3835. 80    CONTINUE
  3836. C
  3837. C       SET T = SMALLER SUM
  3838. C
  3839.     IF(SUMP-SUMM) 85, 85, 90
  3840. 85    T=SUMP
  3841.     GO TO 95
  3842. 90    T=SUMM
  3843. C
  3844. C       COMPUTE MEAN, STANDARD DEVIATION, AND Z
  3845. C
  3846. 95    FK=K
  3847.     U=FK*(FK+1.0)/4.0
  3848.     S= SQRT((FK*(FK+1.0)*(2.0*FK+1.0))/24.0)
  3849.     Z=(T-U)/S
  3850. C
  3851. C       COMPUTE THE PROBABILITY OF A VALUE AS EXTREME AS Z
  3852. C
  3853.     CALL NDTR (Z,P,BIG)
  3854. C
  3855. 100    RETURN
  3856.     END
  3857. C
  3858. C    ..................................................................
  3859. C
  3860. C       SUBROUTINE MPRC
  3861. C
  3862. C       PURPOSE
  3863. C          TO PERMUTE THE ROWS OR COLUMNS OF A GIVEN MATRIX ACCORDING
  3864. C          TO A GIVEN TRANSPOSITION VECTOR OR ITS INVERSE.  (SEE THE
  3865. C          DISCUSSION ON PERMUTATIONS FOR DEFINITIONS AND NOTATION.)
  3866. C
  3867. C       USAGE
  3868. C          CALL MPRC(A,M,N,ITRA,INV,IROCO,IER)
  3869. C
  3870. C       DESCRIPTION OF PARAMETERS
  3871. C          A     - GIVEN M BY N MATRIX AND RESULTING PERMUTED MATRIX
  3872. C          M     - NUMBER OF ROWS OF A
  3873. C          N     - NUMBER OF COLUMNS OF A
  3874. C          ITRA  - GIVEN TRANSPOSITION VECTOR (DIMENSION M IF ROWS ARE
  3875. C                  PERMUTED, N IF COLUMNS ARE PERMUTED)
  3876. C          INV   - INPUT PARAMETER
  3877. C                  INV NON-ZERO  -  PERMUTE ACCORDING TO ITRA
  3878. C                  INV    =   0  -  PERMUTE ACCORDING TO ITRA INVERSE
  3879. C          IROCO - INPUT PARAMETER
  3880. C                  IROCO NON-ZERO  -  PERMUTE THE COLUMNS OF A
  3881. C                  IROCO    =   0  -  PERMUTE THE ROWS OF A
  3882. C          IER   - RESULTING ERROR PARAMETER
  3883. C                  IER = -1  -  M AND N ARE NOT BOTH POSITIVE
  3884. C                  IER =  0  -  NO ERROR
  3885. C                  IER =  1  -  ITRA IS NOT A TRANSPOSITION VECTOR ON
  3886. C                               1,...,M IF ROWS ARE PERMUTED, 1,...,N
  3887. C                               IF COLUMNS ARE PERMUTED
  3888. C
  3889. C       REMARKS
  3890. C          (1)  IF IER=-1 THERE IS NO COMPUTATION.
  3891. C          (2)  IF IER= 1, THEN COMPUTATION HAS BEEN UNSUCCESSFUL DUE
  3892. C               TO ERROR, BUT THE MATRIX A WILL REFLECT THE ROW OR
  3893. C               COLUMN INTERCHANGES PERFORMED BEFORE THE ERROR WAS
  3894. C               DETECTED.
  3895. C          (3)  THE MATRIX A IS ASSUMED TO BE STORED COLUMNWISE.
  3896. C
  3897. C       SUBROUTINES AND SUBPROGRAMS REQUIRED
  3898. C          NONE
  3899. C
  3900. C       METHOD
  3901. C          THE ROWS OR COLUMNS ARE PERMUTED ELEMENTWISE, INTERCHANGING
  3902. C          ROW OR COLUMN 1 AND ITRA(1),...,ROW OR COLUMN K AND ITRA(K)
  3903. C          IN THAT ORDER IF INV=0, AND OTHERWISE INTERCHANGING ROW OR
  3904. C          COLUMN K AND ITRA(K),...,ROW OR COLUMN 1 AND ITRA(1), WHERE
  3905. C          K IS M OR N DEPENDING ON WHETHER WE PERMUTE ROWS OR COLUMNS.
  3906. C
  3907. C    ..................................................................
  3908. C
  3909.     SUBROUTINE MPRC(A,M,N,ITRA,INV,IROCO,IER)
  3910. C
  3911. C
  3912.     DIMENSION A(1),ITRA(1)
  3913. C
  3914. C       TEST OF DIMENSIONS
  3915.     IF(M)14,14,1
  3916. 1    IF(N)14,14,2
  3917. C
  3918. C       DETERMINE WHICH ARE TO BE PERMUTED-THE ROWS OR THE COLUMNS
  3919. 2    IF(IROCO)3,4,3
  3920. C
  3921. C       INITIALIZE FOR COLUMN INTERCHANGES
  3922. 3    MM=M
  3923.     MMM=-1
  3924.     L=M
  3925.     LL=N
  3926.     GO TO 5
  3927. C
  3928. C       INITIALIZE FOR ROW INTERCHANGES
  3929. 4    MM=1
  3930.     MMM=M
  3931.     L=N
  3932.     LL=M
  3933. C
  3934. C       INITIALIZE LOOP OVER ALL ROWS OR COLUMNS
  3935. 5    IA=1
  3936.     ID=1
  3937. C
  3938. C       TEST FOR INVERSE OPERATION
  3939.     IF(INV)6,7,6
  3940. 6    IA=LL
  3941.     ID=-1
  3942. 7    DO 12 I=1,LL
  3943.     K=ITRA(IA)
  3944.     IF(K-IA)8,12,9
  3945. 8    IF(K)13,13,10
  3946. 9    IF(LL-K)13,10,10
  3947. C
  3948. C       INITIALIZE ROW OR COLUMN INTERCHANGE
  3949. 10    IL=IA*MM
  3950.     K=K*MM
  3951. C
  3952. C       PERFORM ROW OR COLUMN INTERCHANGE
  3953.     DO 11 J=1,L
  3954.     SAVE=A(IL)
  3955.     A(IL)=A(K)
  3956.     A(K)=SAVE
  3957.     K=K+MMM
  3958. 11    IL=IL+MMM
  3959. C
  3960. C       ADDRESS NEXT INTERCHANGE STEP
  3961. 12    IA=IA+ID
  3962. C
  3963. C       NORMAL EXIT
  3964.     IER=0
  3965.     RETURN
  3966. C
  3967. C       ERROR RETURN IN CASE ITRA IS NOT A TRANSPOSITION VECTOR
  3968. 13    IER=1
  3969.     RETURN
  3970. C
  3971. C       ERROR RETURN IN CASE OF ILLEGAL DIMENSIONS
  3972. 14    IER=-1
  3973.     RETURN
  3974.     END
  3975. C
  3976. C    ..................................................................
  3977. C
  3978. C       SUBROUTINE MPRD
  3979. C
  3980. C       PURPOSE
  3981. C          MULTIPLY TWO MATRICES TO FORM A RESULTANT MATRIX
  3982. C
  3983. C       USAGE
  3984. C          CALL MPRD(A,B,R,N,M,MSA,MSB,L)
  3985. C
  3986. C       DESCRIPTION OF PARAMETERS
  3987. C          A - NAME OF FIRST INPUT MATRIX
  3988. C          B - NAME OF SECOND INPUT MATRIX
  3989. C          R - NAME OF OUTPUT MATRIX
  3990. C          N - NUMBER OF ROWS IN A AND R
  3991. C          M - NUMBER OF COLUMNS IN A AND ROWS IN B
  3992. C          MSA - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  3993. C                 0 - GENERAL
  3994. C                 1 - SYMMETRIC
  3995. C                 2 - DIAGONAL
  3996. C          MSB - SAME AS MSA EXCEPT FOR MATRIX B
  3997. C          L - NUMBER OF COLUMNS IN B AND R
  3998. C
  3999. C       REMARKS
  4000. C          MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRICES A OR B
  4001. C          NUMBER OF COLUMNS OF MATRIX A MUST BE EQUAL TO NUMBER OF ROW
  4002. C          OF MATRIX B
  4003. C
  4004. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  4005. C          LOC
  4006. C
  4007. C       METHOD
  4008. C          THE M BY L MATRIX B IS PREMULTIPLIED BY THE N BY M MATRIX A
  4009. C          AND THE RESULT IS STORED IN THE N BY L MATRIX R. THIS IS A
  4010. C          ROW INTO COLUMN PRODUCT.
  4011. C          THE FOLLOWING TABLE SHOWS THE STORAGE MODE OF THE OUTPUT
  4012. C          MATRIX FOR ALL COMBINATIONS OF INPUT MATRICES
  4013. C                        A                B                R
  4014. C                     GENERAL          GENERAL          GENERAL
  4015. C                     GENERAL          SYMMETRIC        GENERAL
  4016. C                     GENERAL          DIAGONAL         GENERAL
  4017. C                     SYMMETRIC        GENERAL          GENERAL
  4018. C                     SYMMETRIC        SYMMETRIC        GENERAL
  4019. C                     SYMMETRIC        DIAGONAL         GENERAL
  4020. C                     DIAGONAL         GENERAL          GENERAL
  4021. C                     DIAGONAL         SYMMETRIC        GENERAL
  4022. C                     DIAGONAL         DIAGONAL         DIAGONAL
  4023. C
  4024. C    ..................................................................
  4025. C
  4026.     SUBROUTINE MPRD(A,B,R,N,M,MSA,MSB,L)
  4027.     DIMENSION A(1),B(1),R(1)
  4028. C
  4029. C       SPECIAL CASE FOR DIAGONAL BY DIAGONAL
  4030. C
  4031.     MS=MSA*10+MSB
  4032.     IF(MS-22) 30,10,30
  4033. 10    DO 20 I=1,N
  4034. 20    R(I)=A(I)*B(I)
  4035.     RETURN
  4036. C
  4037. C       ALL OTHER CASES
  4038. C
  4039. 30    IR=1
  4040.     DO 90 K=1,L
  4041.     DO 90 J=1,N
  4042.     R(IR)=0
  4043.     DO 80 I=1,M
  4044.     IF(MS) 40,60,40
  4045. 40    CALL LOC(J,I,IA,N,M,MSA)
  4046.     CALL LOC(I,K,IB,M,L,MSB)
  4047.     IF(IA) 50,80,50
  4048. 50    IF(IB) 70,80,70
  4049. 60    IA=N*(I-1)+J
  4050.     IB=M*(K-1)+I
  4051. 70    R(IR)=R(IR)+A(IA)*B(IB)
  4052. 80    CONTINUE
  4053. 90    IR=IR+1
  4054.     RETURN
  4055.     END
  4056. C
  4057. C    ..................................................................
  4058. C
  4059. C       SUBROUTINE MSTR
  4060. C
  4061. C       PURPOSE
  4062. C          CHANGE STORAGE MODE OF A MATRIX
  4063. C
  4064. C       USAGE
  4065. C          CALL MSTR(A,R,N,MSA,MSR)
  4066. C
  4067. C       DESCRIPTION OF PARAMETERS
  4068. C          A - NAME OF INPUT MATRIX
  4069. C          R - NAME OF OUTPUT MATRIX
  4070. C          N - NUMBER OF ROWS AND COLUMNS IN A AND R
  4071. C          MSA - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  4072. C                 0 - GENERAL
  4073. C                 1 - SYMMETRIC
  4074. C                 2 - DIAGONAL
  4075. C          MSR - SAME AS MSA EXCEPT FOR MATRIX R
  4076. C
  4077. C       REMARKS
  4078. C          MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRIX A
  4079. C          MATRIX A MUST BE A SQUARE MATRIX
  4080. C
  4081. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  4082. C          LOC
  4083. C
  4084. C       METHOD
  4085. C          MATRIX A IS RESTRUCTURED TO FORM MATRIX R.
  4086. C           MSA MSR
  4087. C            0   0  MATRIX A IS MOVED TO MATRIX R
  4088. C            0   1  THE UPPER TRIANGLE ELEMENTS OF A GENERAL MATRIX
  4089. C                   ARE USED TO FORM A SYMMETRIC MATRIX
  4090. C            0   2  THE DIAGONAL ELEMENTS OF A GENERAL MATRIX ARE USED
  4091. C                   TO FORM A DIAGONAL MATRIX
  4092. C            1   0  A SYMMETRIC MATRIX IS EXPANDED TO FORM A GENERAL
  4093. C                   MATRIX
  4094. C            1   1  MATRIX A IS MOVED TO MATRIX R
  4095. C            1   2  THE DIAGONAL ELEMENTS OF A SYMMETRIC MATRIX ARE
  4096. C                   USED TO FORM A DIAGONAL MATRIX
  4097. C            2   0  A DIAGONAL MATRIX IS EXPANDED BY INSERTING MISSING
  4098. C                   ZERO ELEMENTS TO FORM A GENERAL MATRIX
  4099. C            2   1  A DIAGONAL MATRIX IS EXPANDED BY INSERTING MISSING
  4100. C                   ZERO ELEMENTS TO FORM A SYMMETRIC MATRIX
  4101. C            2   2  MATRIX A IS MOVED TO MATRIX R
  4102. C
  4103. C    ..................................................................
  4104. C
  4105.     SUBROUTINE MSTR(A,R,N,MSA,MSR)
  4106.     DIMENSION A(1),R(1)
  4107. C
  4108. C    ..................................................................
  4109. C
  4110. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  4111. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  4112. C       STATEMENT WHICH FOLLOWS.
  4113. C
  4114. C    DOUBLE PRECISION A,R
  4115. C
  4116. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  4117. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  4118. C       ROUTINE.
  4119. C
  4120. C    ..................................................................
  4121. C
  4122.     DO 20 I=1,N
  4123.     DO 20 J=1,N
  4124. C
  4125. C       IF R IS GENERAL, FORM ELEMENT
  4126. C
  4127.     IF(MSR) 5,10,5
  4128. C
  4129. C       IF IN LOWER TRIANGLE OF SYMMETRIC OR DIAGONAL R, BYPASS
  4130. C
  4131. 5    IF(I-J) 10,10,20
  4132. 10    CALL LOC(I,J,IR,N,N,MSR)
  4133. C
  4134. C       IF IN UPPER AND OFF DIAGONAL  OF DIAGONAL R, BYPASS
  4135. C
  4136.     IF(IR) 20,20,15
  4137. C
  4138. C       OTHERWISE, FORM R(I,J)
  4139. C
  4140. 15    R(IR)=0.0
  4141.     CALL LOC(I,J,IA,N,N,MSA)
  4142. C
  4143. C       IF THERE IS NO A(I,J), LEAVE R(I,J) AT 0.0
  4144. C
  4145.     IF(IA) 20,20,18
  4146. 18    R(IR)=A(IA)
  4147. 20    CONTINUE
  4148.     RETURN
  4149.     END
  4150. C
  4151. C    ..................................................................
  4152. C
  4153. C       SUBROUTINE MSUB
  4154. C
  4155. C       PURPOSE
  4156. C          SUBTRACT TWO MATRICES ELEMENT BY ELEMENT TO FORM RESULTANT
  4157. C          MATRIX
  4158. C
  4159. C       USAGE
  4160. C          CALL MSUB(A,B,R,N,M,MSA,MSB)
  4161. C
  4162. C       DESCRIPTION OF PARAMETERS
  4163. C          A - NAME OF INPUT MATRIX
  4164. C          B - NAME OF INPUT MATRIX
  4165. C          R - NAME OF OUTPUT MATRIX
  4166. C          N - NUMBER OF ROWS IN A,B,R
  4167. C          M - NUMBER OF COLUMNS IN A,B,R
  4168. C          MSA - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  4169. C                 0 - GENERAL
  4170. C                 1 - SYMMETRIC
  4171. C                 2 - DIAGONAL
  4172. C          MSB - SAME AS MSA EXCEPT FOR MATRIX B
  4173. C
  4174. C       REMARKS
  4175. C          NONE
  4176. C
  4177. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  4178. C          LOC
  4179. C
  4180. C       METHOD
  4181. C          STRUCTURE OF OUTPUT MATRIX IS FIRST DETERMINED. SUBTRACTION
  4182. C          OF MATRIX B ELEMENTS FROM CORRESPONDING MATRIX A ELEMENTS
  4183. C          IS THEN PERFORMED.
  4184. C          THE FOLLOWING TABLE SHOWS THE STORAGE MODE OF THE OUTPUT
  4185. C          MATRIX FOR ALL COMBINATIONS OF INPUT MATRICES
  4186. C                        A                B                 R
  4187. C                     GENERAL          GENERAL          GENERAL
  4188. C                     GENERAL          SYMMETRIC        GENERAL
  4189. C                     GENERAL          DIAGONAL         GENERAL
  4190. C                     SYMMETRIC        GENERAL          GENERAL
  4191. C                     SYMMETRIC        SYMMETRIC        SYMMETRIC
  4192. C                     SYMMETRIC        DIAGONAL         SYMMETRIC
  4193. C                     DIAGONAL         GENERAL          GENERAL
  4194. C                     DIAGONAL         SYMMETRIC        SYMMETRIC
  4195. C                     DIAGONAL         DIAGONAL         DIAGONAL
  4196. C
  4197. C    ..................................................................
  4198. C
  4199.     SUBROUTINE MSUB(A,B,R,N,M,MSA,MSB)
  4200.     DIMENSION A(1),B(1),R(1)
  4201. C
  4202. C       DETERMINE STORAGE MODE OF OUTPUT MATRIX
  4203. C
  4204.     IF(MSA-MSB) 7,5,7
  4205. 5    CALL LOC(N,M,NM,N,M,MSA)
  4206.     GO TO 100
  4207. 7    MTEST=MSA*MSB
  4208.     MSR=0
  4209.     IF(MTEST) 20,20,10
  4210. 10    MSR=1
  4211. 20    IF(MTEST-2) 35,35,30
  4212. 30    MSR=2
  4213. C
  4214. C       LOCATE ELEMENTS AND PERFORM SUBTRACTION
  4215. C
  4216. 35    DO 90 J=1,M
  4217.     DO 90 I=1,N
  4218.     CALL LOC(I,J,IJR,N,M,MSR)
  4219.     IF(IJR) 40,90,40
  4220. 40    CALL LOC(I,J,IJA,N,M,MSA)
  4221.     AEL=0.0
  4222.     IF(IJA) 50,60,50
  4223. 50    AEL=A(IJA)
  4224. 60    CALL LOC(I,J,IJB,N,M,MSB)
  4225.     BEL=0.0
  4226.     IF(IJB) 70,80,70
  4227. 70    BEL=B(IJB)
  4228. 80    R(IJR)=AEL-BEL
  4229. 90    CONTINUE
  4230.     RETURN
  4231. C
  4232. C       SUBTRACT MATRICES FOR OTHER CASES
  4233. C
  4234. 100    DO 110 I=1,NM
  4235. 110    R(I)=A(I)-B(I)
  4236.     RETURN
  4237.     END
  4238. C
  4239. C    ..................................................................
  4240. C
  4241. C       SUBROUTINE MTDS
  4242. C
  4243. C       PURPOSE
  4244. C          MULTIPLY A GENERAL MATRIX A ON THE LEFT OR RIGHT BY
  4245. C          INVERSE(T),INVERSE(TRANSPOSE(T)) OR INVERSE(TRANSPOSE(T*T))
  4246. C          THE TRIANGULAR MATRIX T IS STORED COLUMNWISE IN COMPRESSED
  4247. C          FORM, I.E. UPPER TRIANGULAR PART ONLY.
  4248. C
  4249. C       USAGE
  4250. C          CALL MTDS(A,M,N,T,IOP,IER)
  4251. C
  4252. C       DESCRIPTION OF PARAMETERS
  4253. C          A     - GIVEN GENERAL MATRIX WHITH M ROWS AND N COLUMNS.
  4254. C          M     - NUMBER OF ROWS OF MATRIX A
  4255. C          N     - NUMBER OF COLUMNS OF MATRIX A
  4256. C          T     - GIVEN TRIANGULAR MATRIX STORED COLUMNWISE UPPER
  4257. C                  TRIANGULAR PART ONLY. ITS NUMBER OF ROWS AND
  4258. C                  COLUMNS K IS IMPLIED BY COMPATIBILITY.
  4259. C                  K = M IF IOP IS POSITIVE,
  4260. C                  K = N IF IOP IS NEGATIVE.
  4261. C                  T OCCUPIES K*(K+1)/2 STORAGE POSITIONS.
  4262. C          IOP   - INPUT VARIABLE FOR SELECTION OF OPERATION
  4263. C                  IOP = 1 - A IS REPLACED BY INVERSE(T)*A
  4264. C                  IOP =-1 - A IS REPLACED BY A*INVERSE(T)
  4265. C                  IOP = 2 - A IS REPLACED BY INVERSE(TRANSPOSE(T))*A
  4266. C                  IOP =-2 - A IS REPLACED BY A*INVERSE(TRANSPOSE(T))
  4267. C                  IOP = 3 - A IS REPLACED BY INVERSE(TRANSPOSE(T)*T)*A
  4268. C                  IOP =-3 - A IS REPLACED BY A*INVERSE(TRANSPOSE(T)*T)
  4269. C          IER   - RESULTING ERROR PARAMETER
  4270. C                  IER =-1 MEANS M AND N ARE NOT BOTH POSITIVE
  4271. C                                AND/OR IOP IS ILLEGAL
  4272. C                  IER = 0 MEANS OPERATION WAS SUCCESSFUL
  4273. C                  IER = 1 MEANS TRIANGULAR MATRIX T IS SINGULAR
  4274. C
  4275. C       REMARKS
  4276. C          SUBROUTINE MTDS MAY BE USED TO CALCULATE THE SOLUTION OF
  4277. C          A SYSTEM OF EQUATIONS WITH SYMMETRIC POSITIVE DEFINITE
  4278. C          COEFFICIENT MATRIX. THE FIRST STEP TOWARDS THE SOLUTION
  4279. C          IS TRIANGULAR FACTORIZATION BY MEANS OF MFSD, THE SECOND
  4280. C          STEP IS APPLICATION OF MTDS.
  4281. C          SUBROUTINES MFSD AND MTDS MAY BE USED IN ORDER TO CALCULATE
  4282. C          THE PRODUCT TRANSPOSE(A)*INVERSE(B)*A WITH GIVEN SYMMETRIC
  4283. C          POSITIVE DEFINITE B AND GIVEN A EFFICIENTLY IN THREE STEPS
  4284. C          1) TRIANGULAR FACTORIZATION OF B (B=TRANSPOSE(T)*T)
  4285. C          2) MULTIPLICATION OF A ON THE LEFT BY INVERSE(TRANSPOSE(T))
  4286. C             A IS REPLACED BY C=INVERSE(TRANSPOSE(T))*A
  4287. C          3) CALCULATION OF THE RESULT FORMING TRANSPOSE(C)*C
  4288. C
  4289. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  4290. C          NONE
  4291. C
  4292. C       METHOD
  4293. C          CALCULATION OF X = INVERSE(T)*A IS DONE USING BACKWARD
  4294. C          SUBSTITUTION TO OBTAIN X FROM T*X = A.
  4295. C          CALCULATION OF Y = INVERSE(TRANSPOSE(T))*A IS DONE USING
  4296. C          FORWARD SUBSTITUTION TO OBTAIN Y FROM TRANSPOSE(T)*Y = A.
  4297. C          CALCULATION OF Z = INVERSE(TRANSPOSE(T)*T)*A IS DONE
  4298. C          SOLVING FIRST TRANSPOSE(T)*Y = A AND THEN T*Z = Y, IE.
  4299. C          USING THE ABOVE TWO STEPS IN REVERSE ORDER
  4300. C
  4301. C    ..................................................................
  4302. C
  4303.     SUBROUTINE MTDS(A,M,N,T,IOP,IER)
  4304. C
  4305. C
  4306.     DIMENSION A(1),T(1)
  4307.     DOUBLE PRECISION DSUM
  4308. C
  4309. C       TEST OF DIMENSION
  4310.     IF(M)2,2,1
  4311. 1    IF(N)2,2,4
  4312. C
  4313. C       ERROR RETURN IN CASE OF ILLEGAL DIMENSIONS
  4314. 2    IER=-1
  4315.     RETURN
  4316. C
  4317. C       ERROR RETURN IN CASE OF SINGULAR MATRIX T
  4318. 3    IER=1
  4319.     RETURN
  4320. C
  4321. C       INITIALIZE DIVISION PROCESS
  4322. 4    MN=M*N
  4323.     MM=M*(M+1)/2
  4324.     MM1=M-1
  4325.     IER=0
  4326.     ICS=M
  4327.     IRS=1
  4328.     IMEND=M
  4329. C
  4330. C       TEST SPECIFIED OPERATION
  4331.     IF(IOP)5,2,6
  4332. 5    MM=N*(N+1)/2
  4333.     MM1=N-1
  4334.     IRS=M
  4335.     ICS=1
  4336.     IMEND=MN-M+1
  4337.     MN=M
  4338. 6    IOPE=MOD(IOP+3,3)
  4339.     IF(IABS(IOP)-3)7,7,2
  4340. 7    IF(IOPE-1)8,18,8
  4341. C
  4342. C       INITIALIZE SOLUTION OF TRANSPOSE(T)*X = A
  4343. 8    MEND=1
  4344.     LLD=IRS
  4345.     MSTA=1
  4346.     MDEL=1
  4347.     MX=1
  4348.     LD=1
  4349.     LX=0
  4350. C
  4351. C       TEST FOR NONZERO DIAGONAL TERM IN T
  4352. 9    IF(T(MSTA))10,3,10
  4353. 10    DO 11 I=MEND,MN,ICS
  4354. 11    A(I)=A(I)/DBLE(T(MSTA))
  4355. C
  4356. C       IS M EQUAL 1
  4357.     IF(MM1)2,15,12
  4358. 12    DO 14 J=1,MM1
  4359.     MSTA=MSTA+MDEL
  4360.     MDEL=MDEL+MX
  4361.     DO 14 I=MEND,MN,ICS
  4362.     DSUM=0.D0
  4363.     L=MSTA
  4364.     LDX=LD
  4365.     LL=I
  4366.     DO 13 K=1,J
  4367.     DSUM=DSUM-T(L)*A(LL)
  4368.     LL=LL+LLD
  4369.     L=L+LDX
  4370. 13    LDX=LDX+LX
  4371.     IF(T(L))14,3,14
  4372. 14    A(LL)=(DSUM+A(LL))/T(L)
  4373. C
  4374. C       TEST END OF OPERATION
  4375. 15    IF(IER)16,17,16
  4376. 16    IER=0
  4377.     RETURN
  4378. 17    IF(IOPE)18,18,16
  4379. C
  4380. C       INITIALIZE SOLUTION OF T*X = A
  4381. 18    IER=1
  4382.     MEND=IMEND
  4383.     MN=M*N
  4384.     LLD=-IRS
  4385.     MSTA=MM
  4386.     MDEL=-1
  4387.     MX=0
  4388.     LD=-MM1
  4389.     LX=1
  4390.     GOTO 9
  4391.     END
  4392. C
  4393. C    ..................................................................
  4394. C
  4395. C       SUBROUTINE MTRA
  4396. C
  4397. C       PURPOSE
  4398. C          TRANSPOSE A MATRIX
  4399. C
  4400. C       USAGE
  4401. C          CALL MTRA(A,R,N,M,MS)
  4402. C
  4403. C       DESCRIPTION OF PARAMETERS
  4404. C          A - NAME OF MATRIX TO BE TRANSPOSED
  4405. C          R - NAME OF OUTPUT MATRIX
  4406. C          N - NUMBER OF ROWS OF A AND COLUMNS OF R
  4407. C          M - NUMBER OF COLUMNS OF A AND ROWS OF R
  4408. C          MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A (AND R)
  4409. C                 0 - GENERAL
  4410. C                 1 - SYMMETRIC
  4411. C                 2 - DIAGONAL
  4412. C
  4413. C       REMARKS
  4414. C          MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRIX A
  4415. C
  4416. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  4417. C          MCPY
  4418. C
  4419. C       METHOD
  4420. C          TRANSPOSE N BY M MATRIX A TO FORM M BY N MATRIX R BY MOVING
  4421. C          EACH ROW OF A INTO THE CORRESPONDING COLUMN OF R. IF MATRIX
  4422. C          A IS SYMMETRIC OR DIAGONAL, MATRIX R IS THE SAME AS A.
  4423. C
  4424. C    ..................................................................
  4425. C
  4426.     SUBROUTINE MTRA(A,R,N,M,MS)
  4427.     DIMENSION A(1),R(1)
  4428. C
  4429. C       IF MS IS 1 OR 2, COPY A
  4430. C
  4431.     IF(MS) 10,20,10
  4432. 10    CALL MCPY(A,R,N,N,MS)
  4433.     RETURN
  4434. C
  4435. C       TRANSPOSE GENERAL MATRIX
  4436. C
  4437. 20    IR=0
  4438.     DO 30 I=1,N
  4439.     IJ=I-N
  4440.     DO 30 J=1,M
  4441.     IJ=IJ+N
  4442.     IR=IR+1
  4443. 30    R(IR)=A(IJ)
  4444.     RETURN
  4445.     END
  4446. C
  4447. C    ..................................................................
  4448. C
  4449. C       SUBROUTINE MULTR
  4450. C
  4451. C       PURPOSE
  4452. C          PERFORM A MULTIPLE LINEAR REGRESSION ANALYSIS FOR A
  4453. C          DEPENDENT VARIABLE AND A SET OF INDEPENDENT VARIABLES.  THIS
  4454. C          SUBROUTINE IS NORMALLY USED IN THE PERFORMANCE OF MULTIPLE
  4455. C          AND POLYNOMIAL REGRESSION ANALYSES.
  4456. C
  4457. C       USAGE
  4458. C          CALL MULTR (N,K,XBAR,STD,D,RX,RY,ISAVE,B,SB,T,ANS)
  4459. C
  4460. C       DESCRIPTION OF PARAMETERS
  4461. C          N     - NUMBER OF OBSERVATIONS.
  4462. C          K     - NUMBER OF INDEPENDENT VARIABLES IN THIS REGRESSION.
  4463. C          XBAR  - INPUT VECTOR OF LENGTH M CONTAINING MEANS OF ALL
  4464. C                  VARIABLES. M IS NUMBER OF VARIABLES IN OBSERVATIONS.
  4465. C          STD   - INPUT VECTOR OF LENGTH M CONTAINING STANDARD DEVI-
  4466. C                  ATIONS OF ALL VARIABLES.
  4467. C          D     - INPUT VECTOR OF LENGTH M CONTAINING THE DIAGONAL OF
  4468. C                  THE MATRIX OF SUMS OF CROSS-PRODUCTS OF DEVIATIONS
  4469. C                  FROM MEANS FOR ALL VARIABLES.
  4470. C          RX    - INPUT MATRIX (K X K) CONTAINING THE INVERSE OF
  4471. C                  INTERCORRELATIONS AMONG INDEPENDENT VARIABLES.
  4472. C          RY    - INPUT VECTOR OF LENGTH K CONTAINING INTERCORRELA-
  4473. C                  TIONS OF INDEPENDENT VARIABLES WITH DEPENDENT
  4474. C                  VARIABLE.
  4475. C          ISAVE - INPUT VECTOR OF LENGTH K+1 CONTAINING SUBSCRIPTS OF
  4476. C                  INDEPENDENT VARIABLES IN ASCENDING ORDER.  THE
  4477. C                  SUBSCRIPT OF THE DEPENDENT VARIABLE IS STORED IN
  4478. C                  THE LAST, K+1, POSITION.
  4479. C          B     - OUTPUT VECTOR OF LENGTH K CONTAINING REGRESSION
  4480. C                  COEFFICIENTS.
  4481. C          SB    - OUTPUT VECTOR OF LENGTH K CONTAINING STANDARD
  4482. C                  DEVIATIONS OF REGRESSION COEFFICIENTS.
  4483. C          T     - OUTPUT VECTOR OF LENGTH K CONTAINING T-VALUES.
  4484. C          ANS   - OUTPUT VECTOR OF LENGTH 10 CONTAINING THE FOLLOWING
  4485. C                  INFORMATION..
  4486. C                  ANS(1)  INTERCEPT
  4487. C                  ANS(2)  MULTIPLE CORRELATION COEFFICIENT
  4488. C                  ANS(3)  STANDARD ERROR OF ESTIMATE
  4489. C                  ANS(4)  SUM OF SQUARES ATTRIBUTABLE TO REGRES-
  4490. C                          SION (SSAR)
  4491. C                  ANS(5)  DEGREES OF FREEDOM ASSOCIATED WITH SSAR
  4492. C                  ANS(6)  MEAN SQUARE OF SSAR
  4493. C                  ANS(7)  SUM OF SQUARES OF DEVIATIONS FROM REGRES-
  4494. C                          SION (SSDR)
  4495. C                  ANS(8)  DEGREES OF FREEDOM ASSOCIATED WITH SSDR
  4496. C                  ANS(9)  MEAN SQUARE OF SSDR
  4497. C                  ANS(10) F-VALUE
  4498. C
  4499. C       REMARKS
  4500. C          N MUST BE GREATER THAN K+1.
  4501. C
  4502. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  4503. C          NONE
  4504. C
  4505. C       METHOD
  4506. C          THE GAUSS-JORDAN METHOD IS USED IN THE SOLUTION OF THE
  4507. C          NORMAL EQUATIONS.  REFER TO W. W. COOLEY AND P. R. LOHNES,
  4508. C          'MULTIVARIATE PROCEDURES FOR THE BEHAVIORAL SCIENCES',
  4509. C          JOHN WILEY AND SONS, 1962, CHAPTER 3, AND B. OSTLE,
  4510. C          'STATISTICS IN RESEARCH', THE IOWA STATE COLLEGE PRESS,
  4511. C          1954, CHAPTER 8.
  4512. C
  4513. C    ..................................................................
  4514. C
  4515.     SUBROUTINE MULTR (N,K,XBAR,STD,D,RX,RY,ISAVE,B,SB,T,ANS)
  4516.     DIMENSION XBAR(1),STD(1),D(1),RX(1),RY(1),ISAVE(1),B(1),SB(1),
  4517.      1          T(1),ANS(1)
  4518. C
  4519. C       ...............................................................
  4520. C
  4521. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  4522. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  4523. C       STATEMENT WHICH FOLLOWS.
  4524. C
  4525. C    DOUBLE PRECISION XBAR,STD,D,RX,RY,B,SB,T,ANS,RM,BO,SSAR,SSDR,SY,
  4526. C    1                 FN,FK,SSARM,SSDRM,F
  4527. C
  4528. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  4529. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  4530. C       ROUTINE.
  4531. C
  4532. C       THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO
  4533. C       CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS.  SQRT AND ABS IN
  4534. C       STATEMENTS 122, 125, AND 135 MUST BE CHANGED TO DSQRT AND DABS.
  4535. C
  4536. C       ...............................................................
  4537. C
  4538.     MM=K+1
  4539. C
  4540. C       BETA WEIGHTS
  4541. C
  4542.     DO 100 J=1,K
  4543. 100    B(J)=0.0
  4544.     DO 110 J=1,K
  4545.     L1=K*(J-1)
  4546.     DO 110 I=1,K
  4547.     L=L1+I
  4548. 110    B(J)=B(J)+RY(I)*RX(L)
  4549.     RM=0.0
  4550.     BO=0.0
  4551.     L1=ISAVE(MM)
  4552. C
  4553. C       COEFFICIENT OF DETERMINATION
  4554. C
  4555.     DO 120 I=1,K
  4556.     RM=RM+B(I)*RY(I)
  4557. C
  4558. C       REGRESSION COEFFICIENTS
  4559. C
  4560.     L=ISAVE(I)
  4561.     B(I)=B(I)*(STD(L1)/STD(L))
  4562. C
  4563. C       INTERCEPT
  4564. C
  4565. 120    BO=BO+B(I)*XBAR(L)
  4566.     BO=XBAR(L1)-BO
  4567. C
  4568. C       SUM OF SQUARES ATTRIBUTABLE TO REGRESSION
  4569. C
  4570.     SSAR=RM*D(L1)
  4571. C
  4572. C       MULTIPLE CORRELATION COEFFICIENT
  4573. C
  4574. 122    RM= SQRT( ABS(RM))
  4575. C
  4576. C       SUM OF SQUARES OF DEVIATIONS FROM REGRESSION
  4577. C
  4578.     SSDR=D(L1)-SSAR
  4579. C
  4580. C       VARIANCE OF ESTIMATE
  4581. C
  4582.     FN=N-K-1
  4583.     SY=SSDR/FN
  4584. C
  4585. C       STANDARD DEVIATIONS OF REGRESSION COEFFICIENTS
  4586. C
  4587.     DO 130 J=1,K
  4588.     L1=K*(J-1)+J
  4589.     L=ISAVE(J)
  4590. 125    SB(J)= SQRT( ABS((RX(L1)/D(L))*SY))
  4591. C
  4592. C       COMPUTED T-VALUES
  4593. C
  4594. 130    T(J)=B(J)/SB(J)
  4595. C
  4596. C       STANDARD ERROR OF ESTIMATE
  4597. C
  4598. 135    SY= SQRT( ABS(SY))
  4599. C
  4600. C       F VALUE
  4601. C
  4602.     FK=K
  4603.     SSARM=SSAR/FK
  4604.     SSDRM=SSDR/FN
  4605.     F=SSARM/SSDRM
  4606. C
  4607.     ANS(1)=BO
  4608.     ANS(2)=RM
  4609.     ANS(3)=SY
  4610.     ANS(4)=SSAR
  4611.     ANS(5)=FK
  4612.     ANS(6)=SSARM
  4613.     ANS(7)=SSDR
  4614.     ANS(8)=FN
  4615.     ANS(9)=SSDRM
  4616.     ANS(10)=F
  4617.     RETURN
  4618.     END
  4619. C
  4620. C    ..................................................................
  4621. C
  4622. C       SUBROUTINE MXOUT
  4623. C
  4624. C       PURPOSE
  4625. C          PRODUCES AN OUTPUT LISTING OF ANY SIZED ARRAY ON
  4626. C          LOGICAL UNIT 6
  4627. C
  4628. C       USAGE
  4629. C          CALL MXOUT(ICODE,A,N,M,MS,LINS,IPOS,ISP)
  4630. C
  4631. C       DESCRIPTION OF PARAMETERS
  4632. C          ICODE- INPUT CODE NUMBER TO BE PRINTED ON EACH OUTPUT PAGE
  4633. C          A-NAME OF OUTPUT MATRIX
  4634. C          N-NUMBER OF ROWS IN A
  4635. C          M-NUMBER OF COLUMNS IN A
  4636. C          MS-STORAGE MODE OF A WHERE MS=
  4637. C                 0-GENERAL
  4638. C                 1-SYMMETRIC
  4639. C                 2-DIAGONAL
  4640. C          LINS-NUMBER OF PRINT LINES ON THE PAGE (USUALLY 60)
  4641. C          IPOS-NUMBER OF PRINT POSITIONS ACROSS THE PAGE (USUALLY 132)
  4642. C          ISP-LINE SPACING CODE, 1 FOR SINGLE SPACE, 2 FOR DOUBLE
  4643. C              SPACE
  4644. C
  4645. C       REMARKS
  4646. C          NONE
  4647. C
  4648. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  4649. C          LOC
  4650. C
  4651. C       METHOD
  4652. C          THIS SUBROUTINE CREATES A STANDARD OUTPUT LISTING OF ANY
  4653. C          SIZED ARRAY WITH ANY STORAGE MODE. EACH PAGE IS HEADED WITH
  4654. C          THE CODE NUMBER,DIMENSIONS AND STORAGE MODE OF THE ARRAY.
  4655. C          EACH COLUMN AND ROW IS ALSO HEADED WITH ITS RESPECTIVE
  4656. C          NUMBER.
  4657. C
  4658. C    ..................................................................
  4659. C
  4660.     SUBROUTINE MXOUT (ICODE,A,N,M,MS,LINS,IPOS,ISP)
  4661.     DIMENSION A(1),B(8)
  4662. 1    FORMAT(1H1,5X, 7HMATRIX ,I5,6X,I3,5H ROWS,6X,I3,8H COLUMNS,
  4663.      18X,13HSTORAGE MODE ,I1,8X,5HPAGE ,I2,/)
  4664. 2    FORMAT(12X,8HCOLUMN  ,7(3X,I3,10X))
  4665. 3    FORMAT(1H )
  4666. 4    FORMAT(1H ,7X,4HROW ,I3,7(E16.6))
  4667. 5    FORMAT(1H0,7X,4HROW ,I3,7(E16.6))
  4668. C
  4669.     J=1
  4670. C
  4671. C       WRITE HEADING
  4672. C
  4673.     NEND=IPOS/16-1
  4674.     LEND=(LINS/ISP)-2
  4675.     IPAGE=1
  4676. 10    LSTRT=1
  4677. 20    WRITE(6,1)ICODE,N,M,MS,IPAGE
  4678.     JNT=J+NEND-1
  4679.     IPAGE=IPAGE+1
  4680. 31    IF(JNT-M)33,33,32
  4681. 32    JNT=M
  4682. 33    CONTINUE
  4683.     WRITE(6,2)(JCUR,JCUR=J,JNT)
  4684.     IF(ISP-1) 35,35,40
  4685. 35    WRITE(6,3)
  4686. 40    LTEND=LSTRT+LEND-1
  4687.     DO 80 L=LSTRT,LTEND
  4688. C
  4689. C       FORM OUTPUT ROW LINE
  4690. C
  4691.     DO 55 K=1,NEND
  4692.     KK=K
  4693.     JT = J+K-1
  4694.     CALL LOC(L,JT,IJNT,N,M,MS)
  4695.     B(K)=0.0
  4696.     IF(IJNT)50,50,45
  4697. 45    B(K)=A(IJNT)
  4698. 50    CONTINUE
  4699. C
  4700. C       CHECK IF LAST COLUMN.  IF YES GO TO 60
  4701. C
  4702.     IF(JT-M) 55,60,60
  4703. 55    CONTINUE
  4704. C
  4705. C       END OF LINE, NOW WRITE
  4706. C
  4707. 60    IF(ISP-1)65,65,70
  4708. 65    WRITE(6,4)L,(B(JW),JW=1,KK)
  4709.     GO TO 75
  4710. 70    WRITE(6,5)L,(B(JW),JW=1,KK)
  4711. C
  4712. C       IF END OF ROWS,GO CHECK COLUMNS
  4713. C
  4714. 75    IF(N-L)85,85,80
  4715. 80    CONTINUE
  4716. C
  4717. C       END OF PAGE, NOW CHECK FOR MORE OUTPUT
  4718. C
  4719.     LSTRT=LSTRT+LEND
  4720.     GO TO 20
  4721. C
  4722. C       END OF COLUMNS, THEN RETURN
  4723. C
  4724. 85    IF(JT-M)90,95,95
  4725. 90    J=JT+1
  4726.     GO TO 10
  4727. 95    RETURN
  4728.     END
  4729. C
  4730. C.......................................................................
  4731. C
  4732. C       SUBROUTINE NDTR
  4733. C
  4734. C       PURPOSE
  4735. C          COMPUTES Y = P(X) = PROBABILITY THAT THE RANDOM VARIABLE  U,
  4736. C          DISTRIBUTED NORMALLY(0,1), IS LESS THAN OR EQUAL TO X.
  4737. C          F(X), THE ORDINATE OF THE NORMAL DENSITY AT X, IS ALSO
  4738. C          COMPUTED.
  4739. C
  4740. C       USAGE
  4741. C          CALL NDTR(X,P,D)
  4742. C
  4743. C       DESCRIPTION OF PARAMETERS
  4744. C          X--INPUT SCALAR FOR WHICH P(X) IS COMPUTED.
  4745. C          P--OUTPUT PROBABILITY.
  4746. C          D--OUTPUT DENSITY.
  4747. C
  4748. C       REMARKS
  4749. C          MAXIMUM ERROR IS 0.0000007.
  4750. C
  4751. C       SUBROUTINES AND SUBPROGRAMS REQUIRED
  4752. C          NONE
  4753. C
  4754. C       METHOD
  4755. C          BASED ON APPROXIMATIONS IN C. HASTINGS, APPROXIMATIONS FOR
  4756. C          DIGITAL COMPUTERS, PRINCETON UNIV. PRESS, PRINCETON, N.J.,
  4757. C          1955.  SEE EQUATION 26.2.17, HANDBOOK OF MATHEMATICAL
  4758. C          FUNCTIONS, ABRAMOWITZ AND STEGUN, DOVER PUBLICATIONS, INC.,
  4759. C          NEW YORK.
  4760. C
  4761. C.......................................................................
  4762. C
  4763.     SUBROUTINE NDTR(X,P,D)
  4764. C
  4765.     AX=ABS(X)
  4766.     T=1.0/(1.0+.2316419*AX)
  4767.     D=0.3989423*EXP(-X*X/2.0)
  4768.     P = 1.0 - D*T*((((1.330274*T - 1.821256)*T + 1.781478)*T -
  4769.      1  0.3565638)*T + 0.3193815)
  4770.     IF(X)1,2,2
  4771. 1    P=1.0-P
  4772. 2    RETURN
  4773.     END
  4774. C
  4775. C.......................................................................
  4776. C
  4777. C       SUBROUTINE NDTRI
  4778. C
  4779. C       PURPOSE
  4780. C         COMPUTES X = P**(-1)(Y), THE ARGUMENT X SUCH THAT Y= P(X) =
  4781. C         THE PROBABILITY THAT THE RANDOM VARIABLE U, DISTRIBUTED
  4782. C         NORMALLY(0,1), IS LESS THAN OR EQUAL TO X.  F(X), THE
  4783. C         ORDINATE OF THE NORMAL DENSITY, AT X, IS ALSO COMPUTED.
  4784. C
  4785. C       USAGE
  4786. C         CALL NDTRI(P,X,D,IER)
  4787. C
  4788. C       DESCRIPTION OF PARAMETERS
  4789. C         P   - INPUT PROBABILITY.
  4790. C         X   - OUTPUT ARGUMENT SUCH THAT P = Y = THE PROBABILITY THAT
  4791. C                  U, THE RANDOM VARIABLE, IS LESS THAN OR EQUAL TO X.
  4792. C         D   - OUTPUT DENSITY, F(X).
  4793. C         IER - OUTPUT ERROR CODE
  4794. C               = -1 IF P IS NOT IN THE INTERVAL (0,1), INCLUSIVE.
  4795. C                 X=D=.99999E38 IN THIS CASE                          N
  4796. C               = 0 IF THERE IS NO ERROR.  SEE REMARKS, BELOW.
  4797. C
  4798. C       REMARKS
  4799. C         MAXIMUM ERROR IS 0.00045.
  4800. C         IF P = 0, X IS SET TO -(10)**74.  D IS SET TO 0.
  4801. C         IF P = 1, X IS SET TO  (10)**74.  D IS SET TO 0.
  4802. C
  4803. C       SUBROUTINES AND SUBPROGRAMS REQUIRED
  4804. C         NONE
  4805. C
  4806. C       METHOD
  4807. C         BASED ON APPROXIMATIONS IN C. HASTINGS, APPROXIMATIONS FOR
  4808. C         DIGITAL COMPUTERS, PRINCETON UNIV. PRESS, PRINCETON, N.J.,
  4809. C         1955.  SEE EQUATION 26.2.23, HANDBOOK OF MATHEMATICAL
  4810. C         FUNCTIONS, ABRAMOWITZ AND STEGUN, DOVER PUBLICATIONS, INC.,
  4811. C         NEW YORK.
  4812. C
  4813. C.......................................................................
  4814. C
  4815.     SUBROUTINE NDTRI(P,X,D,IE)
  4816. C
  4817.     IE=0
  4818.     X=.99999E38
  4819.     D=X
  4820.     IF(P)1,4,2
  4821. 1    IE=-1
  4822.     GO TO 12
  4823. 2    IF (P-1.0)7,5,1
  4824. 4    X=-.999999E38
  4825. 5    D=0.0
  4826.     GO TO 12
  4827. C
  4828. C
  4829. 7    D=P
  4830.     IF(D-0.5)9,9,8
  4831. 8    D=1.0-D
  4832. 9    T2=ALOG(1.0/(D*D))
  4833.     T=SQRT(T2)
  4834.     X=T-(2.515517+0.802853*T+0.010328*T2)/(1.0+1.432788*T+0.189269*T2
  4835.      1  +0.001308*T*T2)
  4836.     IF(P-0.5)10,10,11
  4837. 10    X=-X
  4838. 11    D=0.3989423*EXP(-X*X/2.0)
  4839. 12    RETURN
  4840.     END
  4841. C
  4842. C    ..................................................................
  4843. C
  4844. C       SUBROUTINE NROOT
  4845. C
  4846. C       PURPOSE
  4847. C          COMPUTE EIGENVALUES AND EIGENVECTORS OF A REAL NONSYMMETRIC
  4848. C          MATRIX OF THE FORM B-INVERSE TIMES A.  THIS SUBROUTINE IS
  4849. C          NORMALLY CALLED BY SUBROUTINE CANOR IN PERFORMING A
  4850. C          CANONICAL CORRELATION ANALYSIS.
  4851. C
  4852. C       USAGE
  4853. C          CALL NROOT (M,A,B,XL,X)
  4854. C
  4855. C       DESCRIPTION OF PARAMETERS
  4856. C          M  - ORDER OF SQUARE MATRICES A, B, AND X.
  4857. C          A  - INPUT MATRIX (M X M).
  4858. C          B  - INPUT MATRIX (M X M).
  4859. C          XL - OUTPUT VECTOR OF LENGTH M CONTAINING EIGENVALUES OF
  4860. C               B-INVERSE TIMES A.
  4861. C          X  - OUTPUT MATRIX (M X M) CONTAINING EIGENVECTORS COLUMN-
  4862. C               WISE.
  4863. C
  4864. C       REMARKS
  4865. C          NONE
  4866. C
  4867. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  4868. C          EIGEN
  4869. C
  4870. C       METHOD
  4871. C          REFER TO W. W. COOLEY AND P. R. LOHNES, 'MULTIVARIATE PRO-
  4872. C          CEDURES FOR THE BEHAVIORAL SCIENCES', JOHN WILEY AND SONS,
  4873. C          1962, CHAPTER 3.
  4874. C
  4875. C    ..................................................................
  4876. C
  4877.     SUBROUTINE NROOT (M,A,B,XL,X)
  4878.     DIMENSION A(1),B(1),XL(1),X(1)
  4879. C
  4880. C       ...............................................................
  4881. C
  4882. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  4883. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  4884. C       STATEMENT WHICH FOLLOWS.
  4885. C
  4886. C    DOUBLE PRECISION A,B,XL,X,SUMV
  4887. C
  4888. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  4889. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  4890. C       ROUTINE.
  4891. C
  4892. C       THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO
  4893. C       CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS.  SQRT IN STATEMENTS
  4894. C       110 AND 175 MUST BE CHANGED TO DSQRT.  ABS IN STATEMENT 110
  4895. C       MUST BE CHANGED TO DABS.
  4896. C
  4897. C       ...............................................................
  4898. C
  4899. C    COMPUTE EIGENVALUES AND EIGENVECTORS OF B
  4900. C
  4901.     K=1
  4902.     DO 100 J=2,M
  4903.     L=M*(J-1)
  4904.     DO 100 I=1,J
  4905.     L=L+1
  4906.     K=K+1
  4907. 100    B(K)=B(L)
  4908. C
  4909. C       THE MATRIX B IS A REAL SYMMETRIC MATRIX.
  4910. C
  4911.     MV=0
  4912.     CALL EIGEN (B,X,M,MV)
  4913. C
  4914. C    FORM RECIPROCALS OF SQUARE ROOT OF EIGENVALUES.  THE RESULTS
  4915. C    ARE PREMULTIPLIED BY THE ASSOCIATED EIGENVECTORS.
  4916. C
  4917.     L=0
  4918.     DO 110 J=1,M
  4919.     L=L+J
  4920. 110    XL(J)=1.0/ SQRT( ABS(B(L)))
  4921.     K=0
  4922.     DO 115 J=1,M
  4923.     DO 115 I=1,M
  4924.     K=K+1
  4925. 115    B(K)=X(K)*XL(J)
  4926. C
  4927. C    FORM (B**(-1/2))PRIME * A * (B**(-1/2))
  4928. C
  4929.     DO 120 I=1,M
  4930.     N2=0
  4931.     DO 120 J=1,M
  4932.     N1=M*(I-1)
  4933.     L=M*(J-1)+I
  4934.     X(L)=0.0
  4935.     DO 120 K=1,M
  4936.     N1=N1+1
  4937.     N2=N2+1
  4938. 120    X(L)=X(L)+B(N1)*A(N2)
  4939.     L=0
  4940.     DO 130 J=1,M
  4941.     DO 130 I=1,J
  4942.     N1=I-M
  4943.     N2=M*(J-1)
  4944.     L=L+1
  4945.     A(L)=0.0
  4946.     DO 130 K=1,M
  4947.     N1=N1+M
  4948.     N2=N2+1
  4949. 130    A(L)=A(L)+X(N1)*B(N2)
  4950. C
  4951. C    COMPUTE EIGENVALUES AND EIGENVECTORS OF A
  4952. C
  4953.     CALL EIGEN (A,X,M,MV)
  4954.     L=0
  4955.     DO 140 I=1,M
  4956.     L=L+I
  4957. 140    XL(I)=A(L)
  4958. C
  4959. C    COMPUTE THE NORMALIZED EIGENVECTORS
  4960. C
  4961.     DO 150 I=1,M
  4962.     N2=0
  4963.     DO 150 J=1,M
  4964.     N1=I-M
  4965.     L=M*(J-1)+I
  4966.     A(L)=0.0
  4967.     DO 150 K=1,M
  4968.     N1=N1+M
  4969.     N2=N2+1
  4970. 150    A(L)=A(L)+B(N1)*X(N2)
  4971.     L=0
  4972.     K=0
  4973.     DO 180 J=1,M
  4974.     SUMV=0.0
  4975.     DO 170 I=1,M
  4976.     L=L+1
  4977. 170    SUMV=SUMV+A(L)*A(L)
  4978. 175    SUMV= SQRT(SUMV)
  4979.     DO 180 I=1,M
  4980.     K=K+1
  4981. 180    X(K)=A(K)/SUMV
  4982.     RETURN
  4983.     END
  4984. C    NUMINT
  4985. C    NUMERICAL INTEGRATION BY OVERLAPPING PARABOLAS
  4986. C    AS MODIFIED FOR PROGRAMMA BY REA
  4987. C    ARGUMENTS
  4988. C    N    NUMBER OF POINTS IN THE VECTORS
  4989. C    A    OUTPUT VECTOR OF INTEGRALS (A(2)=INT(X(1)-X(2)) ETC
  4990. C    X    INPUT X-VALUES
  4991. C    Y    INPUT Y VALUES
  4992. C
  4993. C    MARS 74
  4994. C    LIMITED TO POSITIVE AREAS
  4995.     SUBROUTINE NUMINT(N,X,Y,A)
  4996.     DIMENSION X(1),Y(1),A(1)
  4997.     N1=N-1
  4998.     DO 100 I=2,N1
  4999.     HI1=(Y(I+1)-Y(I))/(X(I+1)-X(I))
  5000.     HI=(Y(I)-Y(I-1))/(X(I)-X(I-1))
  5001.     A(I)=(HI1-HI)/(X(I+1)-X(I-1))
  5002. 100    CONTINUE
  5003.     DO 200 I=2,N
  5004.     J=N-I+2
  5005.     IF(J.EQ.N)AI=A(N-1)
  5006.     IF(J.EQ.2)AI=A(2)
  5007.     IF(J.NE.N.AND.J.NE.2)AI=0.5*(A(J)+A(J-1))
  5008. 160    D=X(J)-X(J-1)
  5009.     A(J)=D*(0.5*(Y(J)+Y(J-1))-D*D*AI/6.)
  5010. 200    IF(A(J).LT.0)A(J)=0
  5011.     A(1)=0.
  5012.     RETURN
  5013.     END
  5014. C
  5015. C    ..................................................................
  5016. C
  5017. C       SUBROUTINE ORDER
  5018. C
  5019. C       PURPOSE
  5020. C          CONSTRUCT FROM A LARGER MATRIX OF CORRELATION COEFFICIENTS
  5021. C          A SUBSET MATRIX OF INTERCORRELATIONS AMONG INDEPENDENT
  5022. C          VARIABLES AND A VECTOR OF INTERCORRELATIONS OF INDEPENDENT
  5023. C          VARIABLES WITH DEPENDENT VARIABLE.  THIS SUBROUTINE IS
  5024. C          NORMALLY USED IN THE PERFORMANCE OF MULTIPLE AND POLYNOMIAL
  5025. C          REGRESSION ANALYSES.
  5026. C
  5027. C       USAGE
  5028. C          CALL ORDER (M,R,NDEP,K,ISAVE,RX,RY)
  5029. C
  5030. C       DESCRIPTION OF PARAMETERS
  5031. C          M     - NUMBER OF VARIABLES AND ORDER OF MATRIX R.
  5032. C          R     - INPUT MATRIX CONTAINING CORRELATION COEFFICIENTS.
  5033. C                  THIS SUBROUTINE EXPECTS ONLY UPPER TRIANGULAR
  5034. C                  PORTION OF THE SYMMETRIC MATRIX TO BE STORED (BY
  5035. C                  COLUMN) IN R.  (STORAGE MODE OF 1)
  5036. C          NDEP  - THE SUBSCRIPT NUMBER OF THE DEPENDENT VARIABLE.
  5037. C          K     - NUMBER OF INDEPENDENT VARIABLES TO BE INCLUDED
  5038. C                  IN THE FORTHCOMING REGRESSION. K MUST BE GREATER
  5039. C                  THAN OR EQUAL TO 1.
  5040. C          ISAVE - INPUT VECTOR OF LENGTH K+1 CONTAINING, IN ASCENDING
  5041. C                  ORDER, THE SUBSCRIPT NUMBERS OF K INDEPENDENT
  5042. C                  VARIABLES TO BE INCLUDED IN THE FORTHCOMING REGRES-
  5043. C                  SION.
  5044. C                  UPON RETURNING TO THE CALLING ROUTINE, THIS VECTOR
  5045. C                  CONTAINS, IN ADDITION, THE SUBSCRIPT NUMBER OF
  5046. C                  THE DEPENDENT VARIABLE IN K+1 POSITION.
  5047. C          RX    - OUTPUT MATRIX (K X K) CONTAINING INTERCORRELATIONS
  5048. C                  AMONG INDEPENDENT VARIABLES TO BE USED IN FORTH-
  5049. C                  COMING REGRESSION.
  5050. C          RY    - OUTPUT VECTOR OF LENGTH K CONTAINING INTERCORRELA-
  5051. C                  TIONS OF INDEPENDENT VARIABLES WITH DEPENDENT
  5052. C                  VARIABLES.
  5053. C
  5054. C       REMARKS
  5055. C          NONE
  5056. C
  5057. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5058. C          NONE
  5059. C
  5060. C       METHOD
  5061. C          FROM THE SUBSCRIPT NUMBERS OF THE VARIABLES TO BE INCLUDED
  5062. C          IN THE FORTHCOMING REGRESSION, THE SUBROUTINE CONSTRUCTS THE
  5063. C          MATRIX RX AND THE VECTOR RY.
  5064. C
  5065. C    ..................................................................
  5066. C
  5067.     SUBROUTINE ORDER (M,R,NDEP,K,ISAVE,RX,RY)
  5068.     DIMENSION R(1),ISAVE(1),RX(1),RY(1)
  5069. C
  5070. C       ...............................................................
  5071. C
  5072. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  5073. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  5074. C       STATEMENT WHICH FOLLOWS.
  5075. C
  5076. C    DOUBLE PRECISION R,RX,RY
  5077. C
  5078. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  5079. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  5080. C       ROUTINE.
  5081. C
  5082. C       ...............................................................
  5083. C
  5084. C    COPY INTERCORRELATIONS OF INDEPENDENT VARIABLES
  5085. C    WITH DEPENDENT VARIABLE
  5086. C
  5087.     MM=0
  5088.     DO 130 J=1,K
  5089.     L2=ISAVE(J)
  5090.     IF(NDEP-L2) 122, 123, 123
  5091. 122    L=NDEP+(L2*L2-L2)/2
  5092.     GO TO 125
  5093. 123    L=L2+(NDEP*NDEP-NDEP)/2
  5094. 125    RY(J)=R(L)
  5095. C
  5096. C    COPY A SUBSET MATRIX OF INTERCORRELATIONS AMONG
  5097. C    INDEPENDENT VARIABLES
  5098. C
  5099.     DO 130 I=1,K
  5100.     L1=ISAVE(I)
  5101.     IF(L1-L2) 127, 128, 128
  5102. 127    L=L1+(L2*L2-L2)/2
  5103.     GO TO 129
  5104. 128    L=L2+(L1*L1-L1)/2
  5105. 129    MM=MM+1
  5106. 130    RX(MM)=R(L)
  5107. C
  5108. C    PLACE THE SUBSCRIPT NUMBER OF THE DEPENDENT
  5109. C    VARIABLE IN ISAVE(K+1)
  5110. C
  5111.     ISAVE(K+1)=NDEP
  5112.     RETURN
  5113.     END
  5114. C
  5115. C    ..................................................................
  5116. C
  5117. C       SUBROUTINE PADD
  5118. C
  5119. C       PURPOSE
  5120. C          ADD TWO POLYNOMIALS
  5121. C
  5122. C       USAGE
  5123. C          CALL PADD(Z,IDIMZ,X,IDIMX,Y,IDIMY)
  5124. C
  5125. C       DESCRIPTION OF PARAMETERS
  5126. C          Z     - VECTOR OF RESULTANT COEFFICIENTS, ORDERED FROM
  5127. C                  SMALLEST TO LARGEST POWER
  5128. C          IDIMZ - DIMENSION OF Z (CALCULATED)
  5129. C          X     - VECTOR OF COEFFICIENTS FOR FIRST POLYNOMIAL, ORDERED
  5130. C                  FROM SMALLEST TO LARGEST POWER
  5131. C          IDIMX - DIMENSION OF X (DEGREE IS IDIMX-1)
  5132. C          Y     - VECTOR OF COEFFICIENTS FOR SECOND POLYNOMIAL,
  5133. C                  ORDERED FROM SMALLEST TO LARGEST POWER
  5134. C          IDIMY - DIMENSION OF Y (DEGREE IS IDIMY-1)
  5135. C
  5136. C       REMARKS
  5137. C          VECTOR Z MAY BE IN SAME LOCATION AS EITHER VECTOR X OR
  5138. C          VECTOR Y ONLY IF THE DIMENSION OF THAT VECTOR IS NOT LESS
  5139. C          THAN THE OTHER INPUT VECTOR
  5140. C          THE RESULTANT POLYNOMIAL MAY HAVE TRAILING ZERO COEFFICIENTS
  5141. C
  5142. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5143. C          NONE
  5144. C
  5145. C       METHOD
  5146. C          DIMENSION OF RESULTANT VECTOR IDIMZ IS CALCULATED AS THE
  5147. C          LARGER OF THE TWO INPUT VECTOR DIMENSIONS. CORRESPONDING
  5148. C          COEFFICIENTS ARE THEN ADDED TO FORM Z.
  5149. C
  5150. C    ..................................................................
  5151. C
  5152.     SUBROUTINE PADD(Z,IDIMZ,X,IDIMX,Y,IDIMY)
  5153.     DIMENSION Z(1),X(1),Y(1)
  5154. C
  5155. C    TEST DIMENSIONS OF SUMMANDS
  5156. C
  5157.     NDIM=IDIMX
  5158.     IF (IDIMX-IDIMY) 10,20,20
  5159. 10    NDIM=IDIMY
  5160. 20    IF(NDIM) 90,90,30
  5161. 30    DO 80 I=1,NDIM
  5162.     IF(I-IDIMX) 40,40,60
  5163. 40    IF(I-IDIMY) 50,50,70
  5164. 50    Z(I)=X(I)+Y(I)
  5165.     GO TO 80
  5166. 60    Z(I)=Y(I)
  5167.     GO TO 80
  5168. 70    Z(I)=X(I)
  5169. 80    CONTINUE
  5170. 90    IDIMZ=NDIM
  5171.     RETURN
  5172.     END
  5173. C
  5174. C    ..................................................................
  5175. C
  5176. C       SUBROUTINE PADDM
  5177. C
  5178. C       PURPOSE
  5179. C          ADD COEFFICIENTS OF ONE POLYNOMIAL TO THE PRODUCT OF A
  5180. C          FACTOR BY COEFFICIENTS OF ANOTHER POLYNOMIAL
  5181. C
  5182. C       USAGE
  5183. C          CALL PADDM(Z,IDIMZ,X,IDIMX,FACT,Y,IDIMY)
  5184. C
  5185. C       DESCRIPTION OF PARAMETERS
  5186. C          Z     - VECTOR OF RESULTANT COEFFICIENTS, ORDERED FROM
  5187. C                  SMALLEST TO LARGEST POWER
  5188. C          IDIMZ - DIMENSION OF Z (CALCULATED)
  5189. C          X     - VECTOR OF COEFFICIENTS FOR FIRST POLYNOMIAL, ORDERED
  5190. C                  FROM SMALLEST TO LARGEST POWER
  5191. C          IDIMX - DIMENSION OF X (DEGREE IS IDIMX-1)
  5192. C          FACT  - FACTOR TO BE MULTIPLIED BY VECTOR Y
  5193. C          Y     - VECTOR OF COEFFICIENTS FOR SECOND POLYNOMIAL,
  5194. C                  ORDERED FROM SMALLEST TO LARGEST POWER
  5195. C          IDIMY - DIMENSION OF Y (DEGREE IS IDIMY-1)
  5196. C
  5197. C       REMARKS
  5198. C          VECTOR Z MAY BE IN SAME LOCATION AS EITHER VECTOR X OR
  5199. C          VECTOR Y ONLY IF THE DIMENSION OF THAT VECTOR IS NOT LESS
  5200. C          THAN THE OTHER INPUT VECTOR
  5201. C          THE RESULTANT POLYNOMIAL MAY HAVE TRAILING ZERO COEFFICIENTS
  5202. C
  5203. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5204. C          NONE
  5205. C
  5206. C       METHOD
  5207. C          DIMENSION OF RESULTANT VECTOR IDIMZ IS CALCULATED AS THE
  5208. C          LARGER OF THE TWO INPUT VECTOR DIMENSIONS. COEFFICIENT IN
  5209. C          VECTOR X IS THEN ADDED TO COEFFICIENT IN VECTOR Y MULTIPLIED
  5210. C          BY FACTOR TO FORM Z.
  5211. C
  5212. C    ..................................................................
  5213. C
  5214.     SUBROUTINE PADDM(Z,IDIMZ,X,IDIMX,FACT,Y,IDIMY)
  5215.     DIMENSION Z(1),X(1),Y(1)
  5216. C
  5217. C    TEST DIMENSIONS OF SUMMANDS
  5218. C
  5219.     NDIM=IDIMX
  5220.     IF(IDIMX-IDIMY) 10,20,20
  5221. 10    NDIM=IDIMY
  5222. 20    IF(NDIM) 90,90,30
  5223. 30    DO 80 I=1,NDIM
  5224.     IF(I-IDIMX) 40,40,60
  5225. 40    IF(I-IDIMY) 50,50,70
  5226. 50    Z(I)=FACT*Y(I)+X(I)
  5227.     GO TO 80
  5228. 60    Z(I)=FACT*Y(I)
  5229.     GO TO 80
  5230. 70    Z(I)=X(I)
  5231. 80    CONTINUE
  5232. 90    IDIMZ=NDIM
  5233.     RETURN
  5234.     END
  5235. C
  5236. C    ..................................................................
  5237. C
  5238. C       SUBROUTINE PCLA
  5239. C
  5240. C       PURPOSE
  5241. C          MOVE POLYNOMIAL X TO Y
  5242. C
  5243. C       USAGE
  5244. C          CALL PCLA(Y,IDIMY,X,IDIMX)
  5245. C
  5246. C       DESCRIPTION OF PARAMETERS
  5247. C          Y     - VECTOR OF RESULTANT COEFFICIENTS, ORDERED FROM
  5248. C                  SMALLEST TO LARGEST POWER
  5249. C          IDIMY - DIMENSION OF Y
  5250. C          X     - VECTOR OF COEFFICIENTS FOR POLYNOMIAL, ORDERED
  5251. C                  FROM SMALLEST TO LARGEST POWER
  5252. C          IDIMX - DIMENSION OF X
  5253. C
  5254. C       REMARKS
  5255. C          NONE
  5256. C
  5257. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5258. C          NONE
  5259. C
  5260. C       METHOD
  5261. C          IDIMY IS REPLACED BY IDIMX AND VECTOR X IS MOVED TO Y
  5262. C
  5263. C    ..................................................................
  5264. C
  5265.     SUBROUTINE PCLA (Y,IDIMY,X,IDIMX)
  5266.     DIMENSION X(1),Y(1)
  5267. C
  5268.     IDIMY=IDIMX
  5269.     IF(IDIMX) 30,30,10
  5270. 10    DO 20 I=1,IDIMX
  5271. 20    Y(I)=X(I)
  5272. 30    RETURN
  5273.     END
  5274. C
  5275. C    ..................................................................
  5276. C
  5277. C       SUBROUTINE PCLD
  5278. C
  5279. C       PURPOSE
  5280. C          SHIFT OF ORIGIN (COMPLETE LINEAR SYNTHETIC DIVISION)
  5281. C
  5282. C       USAGE
  5283. C          CALL PCLD(X,IDIMX,U)
  5284. C
  5285. C       DESCRIPTION OF PARAMETERS
  5286. C          X     - VECTOR OF COEFFICIENTS, ORDERED FROM SMALLEST TO
  5287. C                  LARGEST POWER. IT IS REPLACED BY VECTOR OF
  5288. C                  TRANSFORMED COEFFICIENTS.
  5289. C          IDIMX - DIMENSION OF X
  5290. C          U     - SHIFT PARAMETER
  5291. C
  5292. C       REMARKS
  5293. C          NONE
  5294. C
  5295. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5296. C          NONE
  5297. C
  5298. C       METHOD
  5299. C          COEFFICIENT VECTOR X(I) OF POLYNOMIAL P(Z) IS TRANSFORMED
  5300. C          SUCH THAT Q(Z)=P(Z-U) WHERE Q(Z) DENOTES THE POLYNOMIAL
  5301. C          WITH TRANSFORMED COEFFICIENT VECTOR.
  5302. C
  5303. C    ..................................................................
  5304. C
  5305.     SUBROUTINE PCLD (X,IDIMX,U)
  5306.     DIMENSION X(1)
  5307. C
  5308.     K=1
  5309. 1    J=IDIMX
  5310. 2    IF (J-K) 4,4,3
  5311. 3    X(J-1)=X(J-1)+U*X(J)
  5312.     J=J-1
  5313.     GO TO 2
  5314. 4    K=K+1
  5315.     IF (IDIMX-K) 5,5,1
  5316. 5    RETURN
  5317.     END
  5318. C
  5319. C    ..................................................................
  5320. C
  5321. C       SUBROUTINE PDER
  5322. C
  5323. C       PURPOSE
  5324. C          FIND DERIVATIVE OF A POLYNOMIAL
  5325. C
  5326. C       USAGE
  5327. C          CALL PDER(Y,IDIMY,X,IDIMX)
  5328. C
  5329. C       DESCRIPTION OF PARAMETERS
  5330. C          Y     - VECTOR OF COEFFICIENTS FOR DERIVATIVE, ORDERED FROM
  5331. C                  SMALLEST TO LARGEST POWER
  5332. C          IDIMY - DIMENSION OF Y (EQUAL TO IDIMX-1)
  5333. C          X     - VECTOR OF COEFFICIENTS FOR ORIGINAL POLYNOMIAL,
  5334. C                  ORDERED FROM SMALLEST TO LARGEST POWER
  5335. C          IDIMX - DIMENSION OF X
  5336. C
  5337. C       REMARKS
  5338. C          NONE
  5339. C
  5340. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5341. C          NONE
  5342. C
  5343. C       METHOD
  5344. C          DIMENSION OF Y IS SET AT DIMENSION OF X LESS ONE. DERIVATIVE
  5345. C          IS THEN CALCULATED BY MULTIPLYING COEFFICIENTS BY THEIR
  5346. C          RESPECTIVE EXPONENTS.
  5347. C
  5348. C    ..................................................................
  5349. C
  5350.     SUBROUTINE PDER(Y,IDIMY,X,IDIMX)
  5351.     DIMENSION X(1),Y(1)
  5352. C
  5353. C    TEST OF DIMENSION
  5354.     IF (IDIMX-1) 3,3,1
  5355. 1    IDIMY=IDIMX-1
  5356.     EXPT=0.
  5357.     DO 2 I=1,IDIMY
  5358.     EXPT=EXPT+1.
  5359. 2    Y(I)=X(I+1)*EXPT
  5360.     GO TO 4
  5361. 3    IDIMY=0
  5362. 4    RETURN
  5363.     END
  5364. C
  5365. C    ..................................................................
  5366. C
  5367. C       SUBROUTINE PDIV
  5368. C
  5369. C       PURPOSE
  5370. C          DIVIDE ONE POLYNOMIAL BY ANOTHER
  5371. C
  5372. C       USAGE
  5373. C          CALL PDIV(P,IDIMP,X,IDIMX,Y,IDIMY,TOL,IER)
  5374. C
  5375. C       DESCRIPTION OF PARAMETERS
  5376. C          P     - RESULTANT VECTOR OF INTEGRAL PART
  5377. C          IDIMP - DIMENSION OF P
  5378. C          X     - VECTOR OF COEFFICIENTS FOR DIVIDEND POLYNOMIAL,
  5379. C                  ORDERED FROM SMALLEST TO LARGEST POWER. IT IS
  5380. C                  REPLACED BY REMAINDER AFTER DIVISION.
  5381. C          IDIMX - DIMENSION OF X
  5382. C          Y     - VECTOR OF COEFFICIENTS FOR DIVISOR POLYNOMIAL,
  5383. C                  ORDERED FROM SMALLEST TO LARGEST POWER
  5384. C          IDIMY - DIMENSION OF Y
  5385. C          TOL   - TOLERANCE VALUE BELOW WHICH COEFFICIENTS ARE
  5386. C                  ELIMINATED DURING NORMALIZATION
  5387. C          IER   - ERROR CODE. 0 IS NORMAL, 1 IS FOR ZERO DIVISOR
  5388. C
  5389. C       REMARKS
  5390. C          THE REMAINDER R REPLACES X.
  5391. C          THE DIVISOR Y REMAINS UNCHANGED.
  5392. C          IF DIMENSION OF Y EXCEEDS DIMENSION OF X, IDIMP IS SET TO
  5393. C          ZERO AND CALCULATION IS BYPASSED
  5394. C
  5395. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5396. C          PNORM
  5397. C
  5398. C       METHOD
  5399. C          POLYNOMIAL X IS DIVIDED BY POLYNOMIAL Y GIVING INTEGER PART
  5400. C          P AND REMAINDER R SUCH THAT X = P*Y + R.
  5401. C          DIVISOR Y AND REMAINDER  VECTOR GET NORMALIZED.
  5402. C
  5403. C    ..................................................................
  5404. C
  5405.     SUBROUTINE PDIV(P,IDIMP,X,IDIMX,Y,IDIMY,TOL,IER)
  5406.     DIMENSION P(1),X(1),Y(1)
  5407. C
  5408.     CALL PNORM (Y,IDIMY,TOL)
  5409.     IF(IDIMY) 50,50,10
  5410. 10    IDIMP=IDIMX-IDIMY+1
  5411.     IF(IDIMP) 20,30,60
  5412. C
  5413. C    DEGREE OF DIVISOR WAS GREATER THAN DEGREE OF DIVIDEND
  5414. C
  5415. 20    IDIMP=0
  5416. 30    IER=0
  5417. 40    RETURN
  5418. C
  5419. C    Y IS ZERO POLYNOMIAL
  5420. C
  5421. 50    IER=1
  5422.     GO TO 40
  5423. C
  5424. C    START REDUCTION
  5425. C
  5426. 60    IDIMX=IDIMY-1
  5427.     I=IDIMP
  5428. 70    II=I+IDIMX
  5429.     P(I)=X(II)/Y(IDIMY)
  5430. C
  5431. C    SUBTRACT MULTIPLE OF DIVISOR
  5432. C
  5433.     DO 80 K=1,IDIMX
  5434.     J=K-1+I
  5435.     X(J)=X(J)-P(I)*Y(K)
  5436. 80    CONTINUE
  5437.     I=I-1
  5438.     IF(I) 90,90,70
  5439. C
  5440. C    NORMALIZE REMAINDER POLYNOMIAL
  5441. C
  5442. 90    CALL PNORM(X,IDIMX,TOL)
  5443.     GO TO 30
  5444.     END
  5445. C
  5446. C    ..................................................................
  5447. C
  5448. C       SUBROUTINE PECN
  5449. C
  5450. C       PURPOSE
  5451. C          ECONOMIZE A POLYNOMIAL FOR SYMMETRIC RANGE
  5452. C
  5453. C       USAGE
  5454. C          CALL PECN (P,N,BOUND,EPS,TOL,WORK)
  5455. C
  5456. C       DESCRIPTION OF PARAMETERS
  5457. C          P     - COEFFICIENT VECTOR OF GIVEN POLYNOMIAL
  5458. C                  ON RETURN P CONTAINS THE ECONOMIZED POLYNOMIAL
  5459. C          N     - DIMENSION OF COEFFICIENT VECTOR P
  5460. C                  ON RETURN N CONTAINS DIMENSION OF ECONOMIZED
  5461. C                  POLYNOMIAL
  5462. C          BOUND - RIGHT HAND BOUNDARY OF RANGE
  5463. C          EPS   - INITIAL ERROR BOUND
  5464. C                  ON RETURN EPS CONTAINS AN ERROR BOUND FOR THE
  5465. C                  ECONOMIZED POLYNOMIAL
  5466. C          TOL   - TOLERANCE FOR ERROR
  5467. C                  FINAL VALUE OF EPS MUST BE LESS THAN TOL
  5468. C          WORK  - WORKING STORAGE OF DIMENSION N (STARTING VALUE
  5469. C                  OF N RATHER THAN FINAL VALUE)
  5470. C
  5471. C       REMARKS
  5472. C          THE OPERATION IS BYPASSED IN CASE OF N LESS THAN 1.
  5473. C          IN CASE OF AN ARBITRARY INTERVAL (XL,XR) IT IS NECESSARY
  5474. C          FIRST TO CALCULATE THE EXPANSION OF THE GIVEN POLYNOMIAL
  5475. C          WITH ARGUMENT X IN POWERS OF T = (X-(XR-XL)/2).
  5476. C          THIS IS ACCOMPLISHED THROUGH SUBROUTINE PCLD.
  5477. C
  5478. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5479. C          NONE
  5480. C
  5481. C       METHOD
  5482. C          SUBROUTINE PECN TAKES AN (N-1)ST DEGREE POLYNOMIAL
  5483. C          APPROXIMATION TO A FUNCTION F(X) VALID WITHIN A TOLERANCE
  5484. C          EPS OVER THE INTERVAL (-BOUND,BOUND) AND REDUCES IT IF
  5485. C          POSSIBLE TO A POLYNOMIAL OF LOWER DEGREE VALID WITHIN
  5486. C          THE GIVEN TOLERANCE TOL.
  5487. C          THE INITIAL COEFFICIENT VECTOR P IS REPLACED BY THE FINAL
  5488. C          VECTOR. THE INITIAL ERROR BOUND EPS IS REPLACED BY A FINAL
  5489. C          ERROR BOUND.
  5490. C          N IS REPLACED BY THE DIMENSION OF THE REDUCED POLYNOMIAL.
  5491. C          THE COEFFICIENT VECTOR OF THE N-TH CHEBYSHEV POLYNOMIAL
  5492. C          IS CALCULATED FROM THE RECURSION FORMULA
  5493. C          A(K-1)=-A(K+1)*K*L*L*(K-1)/((N+K-2)*(N-K+2))
  5494. C          REFERENCE
  5495. C          K. A. BRONS, ALGORITHM 38, TELESCOPE 2, CACM VOL. 4, 1961,
  5496. C          NO. 3, PP. 151-152.
  5497. C
  5498. C    ..................................................................
  5499. C
  5500.     SUBROUTINE PECN(P,N,BOUND,EPS,TOL,WORK)
  5501. C
  5502.     DIMENSION P(1),WORK(1)
  5503.     FL=BOUND*BOUND
  5504. C
  5505. C    TEST OF DIMENSION
  5506. C
  5507. 1    IF(N-1)2,3,6
  5508. 2    RETURN
  5509. 3    IF(EPS+ABS(P(1))-TOL)4,4,5
  5510. 4    N=0
  5511.     EPS=EPS+ABS(P(1))
  5512. 5    RETURN
  5513. C
  5514. C    CALCULATE EXPANSION OF CHEBYSHEV POLYNOMIAL
  5515. C
  5516. 6    NEND=N-2
  5517.     WORK(N)=-P(N)
  5518.     DO 7 J=1,NEND,2
  5519.     K=N-J
  5520.     FN=(NEND-1+K)*(NEND+3-K)
  5521.     FK=K*(K-1)
  5522. 7    WORK(K-1)=-WORK(K+1)*FK*FL/FN
  5523. C
  5524. C    TEST FOR FEASIBILITY OF REDUCTION
  5525. C
  5526.     IF(K-2)8,8,9
  5527. 8    FN=ABS(WORK(1))
  5528.     GOTO 10
  5529. 9    FN=N-1
  5530.     FN=ABS(WORK(2)/FN)
  5531. 10    IF(EPS+FN-TOL)11,11,5
  5532. C
  5533. C    REDUCE POLYNOMIAL
  5534. C
  5535. 11    EPS=EPS+FN
  5536.     N=N-1
  5537.     DO 12 J=K,N,2
  5538. 12    P(J-1)=P(J-1)+WORK(J-1)
  5539.     GOTO 1
  5540.     END
  5541. C
  5542. C    ..................................................................
  5543. C
  5544. C       SUBROUTINE PECS
  5545. C
  5546. C       PURPOSE
  5547. C          ECONOMIZATION OF A POLYNOMIAL FOR UNSYMMETRIC RANGE
  5548. C
  5549. C       USAGE
  5550. C          CALL PECS (P,N,BOUND,EPS,TOL,WORK)
  5551. C
  5552. C       DESCRIPTION OF PARAMETERS
  5553. C          P     - COEFFICIENT VECTOR OF GIVEN POLYNOMIAL
  5554. C          N     - DIMENSION OF COEFFICIENT VECTOR
  5555. C          BOUND - RIGHT HAND BOUNDARY OF INTERVAL
  5556. C          EPS   - INITIAL ERROR BOUND
  5557. C          TOL   - TOLERANCE FOR ERROR
  5558. C          WORK  - WORKING STORAGE OF DIMENSION N
  5559. C
  5560. C       REMARKS
  5561. C          THE INITIAL COEFFICIENT VECTOR P IS REPLACED BY THE
  5562. C          ECONOMIZED VECTOR.
  5563. C          THE INITIAL ERROR BOUND EPS IS REPLACED BY A FINAL
  5564. C          ERROR BOUND.
  5565. C          N IS REPLACED BY THE DIMENSION OF THE REDUCED POLYNOMIAL.
  5566. C          IN CASE OF AN ARBITRARY INTERVAL (XL,XR) IT IS NECESSARY
  5567. C          FIRST TO CALCULATE THE EXPANSION OF THE GIVEN POLYNOMIAL
  5568. C          WITH ARGUMENT X IN POWERS OF T = (X-XL).
  5569. C          THIS IS ACCOMPLISHED THROUGH SUBROUTINE PCLD.
  5570. C          OPERATION IS BYPASSED IN CASE OF N LESS THAN 1.
  5571. C
  5572. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5573. C          NONE
  5574. C
  5575. C       METHOD
  5576. C          SUBROUTINE PECS TAKES AN (N-1)ST DEGREE POLYNOMIAL
  5577. C          APPROXIMATION TO A FUNCTION F(X) VALID WITHIN A TOLERANCE
  5578. C          EPS OVER THE INTERVAL (0,BOUND) AND REDUCES IT IF POSSIBLE
  5579. C          TO A POLYNOMIAL OF LOWER DEGREE VALID WITHIN TOLERANCE
  5580. C          TOL.
  5581. C          THE COEFFICIENT VECTOR OF THE N-TH SHIFTED CHEBYSHEV
  5582. C          POLYNOMIAL IS CALCULATED FROM THE RECURSION FORMULA
  5583. C          A(K) = -A(K+1)*K*L*(2*K-1)/(2*(N+K-1)*(N-K+1)).
  5584. C          REFERENCE
  5585. C          K. A. BRONS, ALGORITHM 37, TELESCOPE 1, CACM VOL. 4, 1961,
  5586. C          NO. 3, PP. 151.
  5587. C
  5588. C    ..................................................................
  5589. C
  5590.     SUBROUTINE PECS(P,N,BOUND,EPS,TOL,WORK)
  5591. C
  5592.     DIMENSION P(1),WORK(1)
  5593.     FL=BOUND*0.5
  5594. C
  5595. C    TEST OF DIMENSION
  5596. C
  5597. 1    IF(N-1)2,3,6
  5598. 2    RETURN
  5599. 3    IF(EPS+ABS(P(1))-TOL)4,4,5
  5600. 4    N=0
  5601.     EPS=EPS+ABS(P(1))
  5602. 5    RETURN
  5603. C
  5604. C    CALCULATE EXPANSION OF CHEBYSHEV POLYNOMIAL
  5605. C
  5606. 6    NEND=N-1
  5607.     WORK(N)=-P(N)
  5608.     DO 7 J=1,NEND
  5609.     K=N-J
  5610.     FN=(NEND-1+K)*(N-K)
  5611.     FK=K*(K+K-1)
  5612. 7    WORK(K)=-WORK(K+1)*FK*FL/FN
  5613. C
  5614. C       TEST FOR FEASIBILITY OF REDUCTION
  5615. C
  5616.     FN=ABS(WORK(1))
  5617.     IF(EPS+FN-TOL)8,8,5
  5618. C
  5619. C    REDUCE POLYNOMIAL
  5620. C
  5621. 8    EPS=EPS+FN
  5622.     N=NEND
  5623.     DO 9 J=1,NEND
  5624. 9    P(J)=P(J)+WORK(J)
  5625.     GOTO 1
  5626.     END
  5627. C
  5628. C    ..................................................................
  5629. C
  5630. C       SUBROUTINE PERM
  5631. C
  5632. C       PURPOSE
  5633. C          TO COMPUTE THE PERMUTATION VECTOR THAT IS INVERSE TO A GIVEN
  5634. C          PERMUTATION VECTOR, THE PERMUTATION VECTOR THAT IS EQUIVA-
  5635. C          LENT TO A GIVEN TRANSPOSITION VECTOR AND A TRANSPOSITION
  5636. C          VECTOR THAT IS EQUIVALENT TO A GIVEN PERMUTATION VECTOR.
  5637. C          (SEE THE GENERAL DISCUSSION FOR DEFINITIONS AND NOTATION.)
  5638. C
  5639. C       USAGE
  5640. C          CALL PERM(IP1,IP2,N,IPAR,IER)
  5641. C
  5642. C       DESCRIPTION OF PARAMETERS
  5643. C          IP1  - GIVEN PERMUTATION OR TRANSPOSITION VECTOR
  5644. C                 (DIMENSION N)
  5645. C          IP2  - RESULTING PERMUTATION OR TRANSPOSITION VECTOR
  5646. C                 (DIMENSION N)
  5647. C          N    - DIMENSION OF VECTORS IP1 AND IP2
  5648. C          IPAR - INPUT PARAMETER
  5649. C                 IPAR NEGATIVE - COMPUTE THE PERMUTATION VECTOR IP2
  5650. C                                 THAT IS THE INVERSE OF THE PERMUTA-
  5651. C                                 TION VECTOR IP1
  5652. C                 IPAR  =  ZERO - COMPUTE THE PERMUTATION VECTOR IP2
  5653. C                                 THAT IS EQUIVALENT TO THE TRANSPOSI-
  5654. C                                 TION VECTOR IP1
  5655. C                 IPAR POSITIVE - COMPUTE A TRANSPOSITION VECTOR IP2
  5656. C                                 THAT IS EQUIVALENT TO THE PERMUTATION
  5657. C                                 VECTOR IP1
  5658. C          IER  - RESULTING ERROR PARAMETER
  5659. C                 IER=-1  -  N IS NOT POSITIVE
  5660. C                 IER= 0  -  NO ERROR
  5661. C                 IER= 1  -  IP1 IS EITHER NOT A PERMUTATION VECTOR OR
  5662. C                            NOT A TRANSPOSITION VECTOR ON 1,...,N,
  5663. C                            DEPENDING ON WHETHER IPAR IS NON-ZERO OR
  5664. C                            ZERO, RESPECTIVELY
  5665. C
  5666. C       REMARKS
  5667. C          (1)  IF IER=-1 THERE HAS BEEN NO COMPUTATION.
  5668. C          (2)  IF IER=1, THEN COMPUTATION HAS BEEN UNSUCCESSFUL DUE TO
  5669. C               ERROR AND THE PARTIAL RESULTS FOUND IN IP2 ARE USELESS.
  5670. C          (3)  IP2 CANNOT HAVE THE SAME STORAGE ALLOCATION AS IP1.
  5671. C
  5672. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5673. C          NONE
  5674. C
  5675. C       METHOD
  5676. C          (1)  IPAR NEGATIVE - FOR EACH I, I=1,...,N, IP2(IP1(I)) IS
  5677. C                               SET TO I.
  5678. C          (2)  IPAR  =  ZERO - INITIALLY IP2(I) IS SET TO I FOR
  5679. C                               I=1,...,N.  THEN, FOR I=1,...,N IN THAT
  5680. C                               ORDER, IP2(I) AND IP2(IP1(I)) ARE
  5681. C                               INTERCHANGED.
  5682. C          (3)  IPAR POSITIVE - INITIALLY IP1 IS MOVED TO IP2.  THEN
  5683. C                               THE FOLLOWING TWO STEPS ARE REPEATED
  5684. C                               FOR I SUCCESSIVELY EQUAL TO 1,...,N.
  5685. C                               (A) FIND THE SMALLEST J GREATER THAN OR
  5686. C                                   EQUAL TO I SUCH THAT IP2(J)=I.
  5687. C                               (B) SET IP2(J) TO IP2(I).
  5688. C
  5689. C    ..................................................................
  5690. C
  5691.     SUBROUTINE PERM(IP1,IP2,N,IPAR,IER)
  5692. C
  5693. C
  5694.     DIMENSION IP1(1),IP2(1)
  5695. C
  5696. C       TEST DIMENSION
  5697.     IF(N)19,19,1
  5698. C
  5699. C       TEST IPAR TO DETERMINE WHETHER IP1 IS TO BE INTERPRETED AS
  5700. C       A PERMUTATION VECTOR OR AS A TRANSPOSITION VECTOR
  5701. 1    IF(IPAR)2,13,2
  5702. C
  5703. C       CHECK THAT IP1 IS A PERMUTATION VECTOR AND COMPUTE IP1 INVERSE
  5704. 2    DO 3 I=1,N
  5705. 3    IP2(I)=0
  5706.     DO 6 I=1,N
  5707.     K=IP1(I)
  5708.     IF(K-N)4,5,20
  5709. 4    IF(K)20,20,5
  5710. 5    IF(IP2(K))20,6,20
  5711. 6    IP2(K)=I
  5712. C
  5713. C       TEST IPAR FOR THE DESIRED OPERATION
  5714.     IF(IPAR)12,7,7
  5715. C
  5716. C       COMPUTE TRANSPOSITION VECTOR IP2 FOR PERMUTATION VECTOR IP1
  5717. 7    DO 8 I=1,N
  5718. 8    IP2(I)=IP1(I)
  5719.     NN=N-1
  5720.     IF(NN)12,12,9
  5721. 9    DO 11 I=1,NN
  5722.     DO 10 J=1,NN
  5723.     IF(IP2(J)-I)10,11,10
  5724. 10    CONTINUE
  5725.     J=N
  5726. 11    IP2(J)=IP2(I)
  5727. C
  5728. C       NORMAL RETURN - NO ERROR
  5729. 12    IER=0
  5730.     RETURN
  5731. C
  5732. C       COMPUTE PERMUTATION VECTOR IP2 FOR TRANSPOSITION VECTOR IP1
  5733. 13    DO 14 I=1,N
  5734. 14    IP2(I)=I
  5735.     DO 18 I=1,N
  5736.     K=IP1(I)
  5737.     IF(K-I)15,18,16
  5738. 15    IF(K)20,20,17
  5739. 16    IF(N-K)20,17,17
  5740. 17    J=IP2(I)
  5741.     IP2(I)=IP2(K)
  5742.     IP2(K)=J
  5743. 18    CONTINUE
  5744.     GO TO 12
  5745. C
  5746. C       ERROR RETURN - N IS NOT POSITIVE
  5747. 19    IER=-1
  5748.     RETURN
  5749. C
  5750. C       ERROR RETURN - IP1 IS EITHER NOT A PERMUTATION VECTOR
  5751. C                      OR NOT A TRANSPOSITION VECTOR
  5752. 20    IER=1
  5753.     RETURN
  5754.     END
  5755. C
  5756. C    ..................................................................
  5757. C
  5758. C       SUBROUTINE PGCD
  5759. C
  5760. C       PURPOSE
  5761. C          DETERMINE GREATEST COMMON DIVISOR OF TWO POLYNOMIALS
  5762. C
  5763. C       USAGE
  5764. C          CALL PGCD(X,IDIMX,Y,IDIMY,WORK,EPS,IER)
  5765. C
  5766. C       DESCRIPTION OF PARAMETERS
  5767. C          X     -  VECTOR OF COEFFICIENTS FOR FIRST POLYNOMIAL,
  5768. C                   ORDERED FROM SMALLEST TO LARGEST POWER
  5769. C          IDIMX -  DIMENSION OF X
  5770. C          Y     -  VECTOR OF COEFFICIENTS FOR SECOND POLYNOMIAL,
  5771. C                   ORDERED FROM SMALLEST TO LARGEST POWER.
  5772. C                   THIS IS REPLACED BY GREATEST COMMON DIVISOR
  5773. C          IDIMY -  DIMENSION OF Y
  5774. C          WORK  -  WORKING STORAGE ARRAY
  5775. C          EPS   -  TOLERANCE VALUE BELOW WHICH COEFFICIENT IS
  5776. C                   ELIMINATED DURING NORMALIZATION
  5777. C          IER   -  RESULTANT ERROR CODE WHERE
  5778. C                   IER=0  NO ERROR
  5779. C                   IER=1  X OR Y IS ZERO POLYNOMIAL
  5780. C
  5781. C       REMARKS
  5782. C          IDIMX MUST BE GREATER THAN IDIMY
  5783. C          IDIMY=1 ON RETURN MEANS X AND Y ARE PRIME, THE GCD IS A
  5784. C          CONSTANT. IDIMX IS DESTROYED DURING COMPUTATION.
  5785. C
  5786. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5787. C          PDIV
  5788. C          PNORM
  5789. C
  5790. C       METHOD
  5791. C          GREATEST COMMON DIVISOR OF TWO POLYNOMIALS X AND Y IS
  5792. C          DETERMINED BY MEANS OF EUCLIDEAN ALGORITHM. COEFFICIENT
  5793. C          VECTORS X AND Y ARE DESTROYED AND GREATEST COMMON
  5794. C          DIVISOR IS GENERATED IN Y.
  5795. C
  5796. C    ..................................................................
  5797. C
  5798.     SUBROUTINE PGCD(X,IDIMX,Y,IDIMY,WORK,EPS,IER)
  5799.     DIMENSION X(1),Y(1),WORK(1)
  5800. C
  5801. C    DIMENSION REQUIRED FOR VECTOR NAMED  WORK  IS   IDIMX-IDIMY+1
  5802. C
  5803. 1    CALL PDIV(WORK,NDIM,X,IDIMX,Y,IDIMY,EPS,IER)
  5804.     IF(IER) 5,2,5
  5805. 2    IF(IDIMX) 5,5,3
  5806. C
  5807. C    INTERCHANGE X AND Y
  5808. C
  5809. 3    DO 4 J=1,IDIMY
  5810.     WORK(1)=X(J)
  5811.     X(J)=Y(J)
  5812. 4    Y(J)=WORK(1)
  5813.     NDIM=IDIMX
  5814.     IDIMX=IDIMY
  5815.     IDIMY=NDIM
  5816.     GO TO 1
  5817. 5    RETURN
  5818.     END
  5819. C
  5820. C    ..................................................................
  5821. C
  5822. C       SUBROUTINE PHI
  5823. C
  5824. C       PURPOSE
  5825. C          TO COMPUTE THE PHI COEFFICIENT BETWEEN TWO VARIABLES  WHICH
  5826. C          ARE DICHOTOMOUS.
  5827. C
  5828. C       USAGE
  5829. C          CALL PHI (N,U,V,HU,HV,P,CH,XP,IE)
  5830. C
  5831. C       DESCRIPTION OF PARAMETERS
  5832. C          N  - NUMBER OF OBSERVATIONS
  5833. C          U  - INPUT VECTOR OF LENGTH N CONTAINING THE FIRST DICHOTO-
  5834. C               MOUS VARIABLE
  5835. C          V  - INPUT VECTOR OF LENGTH N CONTAINING THE SECOND DICHOTO-
  5836. C               MOUS VARIABLE
  5837. C          HU - INPUT NUMERICAL CODE WHICH INDICATES THE HIGHER
  5838. C               CATEGORY OF THE FIRST VARIABLE.  ANY OBSERVATION IN
  5839. C               VECTOR U WHICH HAS A VALUE EQUAL TO OR GREATER THAN HU
  5840. C               WILL BE CLASSIFIED IN THE HIGHER CATEGORY.
  5841. C          HV - INPUT NUMERICAL CODE FOR VECTOR V, SIMILAR TO HU
  5842. C          P  - PHI COEFFICIENT COMPUTED
  5843. C          CH - CHI-SQUARE COMPUTED AS A FUNCTION OF PHI COEFFICIENT
  5844. C               (DEGREES OF FREEDOM FOR CHI-SQUARE = 1)
  5845. C          XP - COMPUTED VALUE OF THE MAXIMAL PHI COEFFICIENT THAT
  5846. C               CAN BE ATTAINED IN THE PROBLEM
  5847. C          IE - IF IE IS NON-ZERO, SOME CELL IN THE 2 BY 2 TABLE IS
  5848. C               NULL.  IF SO, P, CH, AND XP ARE SET TO 10**75.
  5849. C
  5850. C       REMARKS
  5851. C          VARIABLES U AND V MUST BE SPECIFIED NUMERIC.
  5852. C          THE PHI COEFFICIENT IS A SPECIAL CASE OF THE
  5853. C          PEARSON PRODUCT-MOMENT CORRELATION WHEN BOTH VARIABLES ARE
  5854. C          BINARY.
  5855. C
  5856. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5857. C          NONE
  5858. C
  5859. C       METHOD
  5860. C          REFER TO P. HORST, 'PYSCHOLOGICAL MEASUREMENT AND
  5861. C          PREDICTION', P. 94 (WADSWORTH, 1966).
  5862. C
  5863. C    ..................................................................
  5864. C
  5865.     SUBROUTINE PHI (N,U,V,HU,HV,P,CH,XP,IE)
  5866. C
  5867.     DIMENSION U(1),V(1)
  5868. C
  5869. C       CONSTRUCT A 2X2 CONTINGENCY TABLE
  5870. C
  5871.     IE=0
  5872.     A=0.0
  5873.     B=0.0
  5874.     C=0.0
  5875.     D=0.0
  5876. C
  5877.     DO 40 I=1,N
  5878.     IF(U(I)-HU) 10,25,25
  5879. 10    IF(V(I)-HV) 15,20,20
  5880. 15    D=D+1.0
  5881.     GO TO 40
  5882. 20    B=B+1.0
  5883.     GO TO 40
  5884. 25    IF(V(I)-HV) 30,35,35
  5885. 30    C=C+1.0
  5886.     GO TO 40
  5887. 35    A=A+1.0
  5888. 40    CONTINUE
  5889.     IF(A) 100,100,41
  5890. 41    IF(B) 100,100,42
  5891. 42    IF(C) 100,100,43
  5892. 43    IF(D) 100,100,44
  5893. C
  5894. C       COMPUTE THE PHI COEFFICIENT
  5895. C
  5896. 44    P=(A*D-B*C)/ SQRT((A+B)*(C+D)*(A+C)*(B+D))
  5897. C
  5898. C       COMPUTE CHI-SQURE
  5899. C
  5900.     T=N
  5901.     CH=T*P*P
  5902. C
  5903. C       COMPUTE THE MAXIMAL PHI COEFFICIENT
  5904. C
  5905.     P1=(A+C)/T
  5906.     P2=(B+D)/T
  5907.     P3=(A+B)/T
  5908.     P4=(C+D)/T
  5909.     IF(P1-P2) 75, 45, 45
  5910. 45    IF(P3-P4) 65, 50, 50
  5911. 50    IF(P1-P3) 60, 55, 55
  5912. 55    XP=SQRT((P3/P4)*(P2/P1))
  5913.     GO TO 95
  5914. 60    XP=SQRT((P1/P2)*(P4/P3))
  5915.     GO TO 95
  5916. 65    IF(P1-P4) 70, 55, 55
  5917. 70    XP=SQRT((P2/P1)*(P3/P4))
  5918.     GO TO 95
  5919. 75    IF(P3-P4) 90, 80, 80
  5920. 80    IF(P2-P3) 60, 85, 85
  5921. 85    XP=SQRT((P4/P3)*(P1/P2))
  5922.     GO TO 95
  5923. 90    IF(P2-P4) 70, 85, 85
  5924. C
  5925. 95    RETURN
  5926. 100    IE=1
  5927.     P=1.7E38                                                                  0
  5928.     CH=1.7E38                                                                 0
  5929.     XP=1.7E38                                                                 0
  5930.     GO TO 95
  5931.     END
  5932. C
  5933. C    ..................................................................
  5934. C
  5935. C       SUBROUTINE PILD
  5936. C
  5937. C       PURPOSE
  5938. C          EVALUATE POLYNOMIAL AND ITS FIRST DERIVATIVE FOR A GIVEN
  5939. C          ARGUMENT
  5940. C
  5941. C       USAGE
  5942. C          CALL PILD(POLY,DVAL,ARGUM,X,IDIMX)
  5943. C
  5944. C       DESCRIPTION OF PARAMETERS
  5945. C          POLY  - VALUE OF POLYNOMIAL
  5946. C          DVAL  - DERIVATIVE
  5947. C          ARGUM - ARGUMENT
  5948. C          X     - VECTOR OF COEFFICIENTS FOR POLYNOMIAL, ORDERED
  5949. C                  FROM SMALLEST TO LARGEST POWER
  5950. C          IDIMX - DIMENSION OF X
  5951. C
  5952. C       REMARKS
  5953. C          NONE
  5954. C
  5955. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  5956. C          PQSD
  5957. C
  5958. C       METHOD
  5959. C          EVALUATION IS DONE BY MEANS OF SUBROUTINE PQSD (QUADRATIC
  5960. C          SYNTHETIC DIVISION)
  5961. C
  5962. C    ..................................................................
  5963. C
  5964.     SUBROUTINE PILD (POLY,DVAL,ARGUM,X,IDIMX)
  5965.     DIMENSION X(1)
  5966. C
  5967.     P=ARGUM+ARGUM
  5968.     Q=-ARGUM*ARGUM
  5969. C
  5970.     CALL PQSD (DVAL,POLY,P,Q,X,IDIMX)
  5971. C
  5972.     POLY=ARGUM*DVAL+POLY
  5973. C
  5974.     RETURN
  5975.     END
  5976. C
  5977. C    ..................................................................
  5978. C
  5979. C       SUBROUTINE PINT
  5980. C
  5981. C       PURPOSE
  5982. C          FIND INTEGRAL OF A POLYNOMIAL WITH CONSTANT OF INTEGRATION
  5983. C          EQUAL TO ZERO
  5984. C
  5985. C       USAGE
  5986. C          CALL PINT(Y,IDIMY,X,IDIMX)
  5987. C
  5988. C       DESCRIPTION OF PARAMETERS
  5989. C          Y     - VECTOR OF COEFFICIENTS FOR INTEGRAL, ORDERED FROM
  5990. C                  SMALLEST TO LARGEST POWER
  5991. C          IDIMY - DIMENSION OF Y (EQUAL TO IDIMX+1)
  5992. C          X     - VECTOR OF COEFFICIENTS FOR ORIGINAL POLYNOMIAL,
  5993. C                  ORDERED FROM SMALLEST TO LARGEST POWER
  5994. C          IDIMX - DIMENSION OF X
  5995. C
  5996. C       REMARKS
  5997. C          NONE
  5998. C
  5999. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  6000. C          NONE
  6001. C
  6002. C       METHOD
  6003. C          DIMENSION OF Y IS SET AT DIMENSION OF X PLUS ONE, AND THE
  6004. C          CONSTANT TERM IS SET TO ZERO. INTEGRAL IS THEN CALCULATED
  6005. C          BY DIVIDING COEFFICIENTS BY THEIR RESPECTIVE EXPONENTS.
  6006. C
  6007. C    ..................................................................
  6008. C
  6009.     SUBROUTINE PINT(Y,IDIMY,X,IDIMX)
  6010.     DIMENSION X(1),Y(1)
  6011. C
  6012.     IDIMY=IDIMX+1
  6013.     Y(1)=0.
  6014.     IF(IDIMX)1,1,2
  6015. 1    RETURN
  6016. 2    EXPT=1.
  6017.     DO 3 I=2,IDIMY
  6018.     Y(I)=X(I-1)/EXPT
  6019. 3    EXPT=EXPT+1.
  6020.     GO TO 1
  6021.     END
  6022. C
  6023. C    ..................................................................
  6024. C
  6025. C       SUBROUTINE PLOT
  6026. C
  6027. C       PURPOSE
  6028. C          PLOT SEVERAL CROSS-VARIABLES VERSUS A BASE VARIABLE
  6029. C
  6030. C       USAGE
  6031. C          CALL PLOT (NO,A,N,M,NL,NS)
  6032. C
  6033. C       DESCRIPTION OF PARAMETERS
  6034. C          NO - CHART NUMBER (3 DIGITS MAXIMUM)
  6035. C          A  - MATRIX OF DATA TO BE PLOTTED. FIRST COLUMN REPRESENTS
  6036. C               BASE VARIABLE AND SUCCESSIVE COLUMNS ARE THE CROSS-
  6037. C               VARIABLES (MAXIMUM IS 9).
  6038. C          N  - NUMBER OF ROWS IN MATRIX A
  6039. C          M  - NUMBER OF COLUMNS IN MATRIX A (EQUAL TO THE TOTAL
  6040. C               NUMBER OF VARIABLES). MAXIMUM IS 10.
  6041. C          NL - NUMBER OF LINES IN THE PLOT. IF 0 IS SPECIFIED, 50
  6042. C               LINES ARE USED.
  6043. C          NS - CODE FOR SORTING THE BASE VARIABLE DATA IN ASCENDING
  6044. C               ORDER
  6045. C                 0  SORTING IS NOT NECESSARY (ALREADY IN ASCENDING
  6046. C                    ORDER).
  6047. C                 1  SORTING IS NECESSARY.
  6048. C
  6049. C       REMARKS
  6050. C          NONE
  6051. C
  6052. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  6053. C          NONE
  6054. C
  6055. C    ..................................................................
  6056. C
  6057.     SUBROUTINE PLOT(NO,A,N,M,NL,NS)
  6058.     DIMENSION OUT(101),YPR(11),ANG(9),A(1)
  6059. C
  6060. 1    FORMAT(1H1,60X,7H CHART ,I3,//)
  6061. 2    FORMAT(1H ,F11.4,5X,101A1)
  6062. 3    FORMAT(1H )
  6063. 4    FORMAT(10H 123456789)
  6064. 5    FORMAT(10A1)
  6065. 7     FORMAT(1H ,16X,101H.         .         .         .         .      
  6066.      1   .         .         .         .         .         .)
  6067. 8    FORMAT(1H0,9X,11F10.4)
  6068. C
  6069. C    ..................................................................
  6070. C
  6071.     NLL=NL
  6072. C
  6073.     IF(NS) 16, 16, 10
  6074. C
  6075. C       SORT BASE VARIABLE DATA IN ASCENDING ORDER
  6076. C
  6077. 10    DO 15 I=1,N
  6078.     DO 14 J=I,N
  6079.     IF(A(I)-A(J)) 14, 14, 11
  6080. 11    L=I-N
  6081.     LL=J-N
  6082.     DO 12 K=1,M
  6083.     L=L+N
  6084.     LL=LL+N
  6085.     F=A(L)
  6086.     A(L)=A(LL)
  6087. 12    A(LL)=F
  6088. 14    CONTINUE
  6089. 15    CONTINUE
  6090. C
  6091. C       TEST NLL
  6092. C
  6093. 16    IF(NLL) 20, 18, 20
  6094. 18    NLL=50
  6095. C
  6096. C       PRINT TITLE
  6097. C
  6098. 20    WRITE(6,1)NO
  6099. C
  6100. C       DEVELOP BLANK AND DIGITS FOR PRINTING
  6101. C
  6102.     REWIND 13
  6103.     WRITE (13,4)
  6104.     REWIND 13
  6105.     READ (13,5) BLANK,(ANG(I),I=1,9)
  6106.     REWIND 13
  6107. C
  6108. C       FIND SCALE FOR BASE VARIABLE
  6109. C
  6110.     XSCAL=(A(N)-A(1))/(FLOAT(NLL-1))
  6111. C
  6112. C       FIND SCALE FOR CROSS-VARIABLES
  6113. C
  6114.     M1=N+1
  6115.     YMIN=A(M1)
  6116.     YMAX=YMIN
  6117.     M2=M*N
  6118.     DO 40 J=M1,M2
  6119.     IF(A(J)-YMIN) 28,26,26
  6120. 26    IF(A(J)-YMAX) 40,40,30
  6121. 28    YMIN=A(J)
  6122.     GO TO 40
  6123. 30    YMAX=A(J)
  6124. 40    CONTINUE
  6125.     YSCAL=(YMAX-YMIN)/100.0
  6126. C
  6127. C       FIND BASE VARIABLE PRINT POSITION
  6128. C
  6129.     XB=A(1)
  6130.     L=1
  6131.     MY=M-1
  6132.     I=1
  6133. 45    F=I-1
  6134.     XPR=XB+F*XSCAL
  6135.     IF(A(L)-XPR) 50,50,70
  6136. C
  6137. C       FIND CROSS-VARIABLES
  6138. C
  6139. 50    DO 55 IX=1,101
  6140. 55    OUT(IX)=BLANK
  6141.     DO 60 J=1,MY
  6142.     LL=L+J*N
  6143.     JP=((A(LL)-YMIN)/YSCAL)+1.0
  6144.     OUT(JP)=ANG(J)
  6145. 60    CONTINUE
  6146. C
  6147. C       PRINT LINE AND CLEAR, OR SKIP
  6148. C
  6149.     WRITE(6,2)XPR,(OUT(IZ),IZ=1,101)
  6150.     L=L+1
  6151.     GO TO 80
  6152. 70    WRITE(6,3)
  6153. 80    I=I+1
  6154.     IF(I-NLL) 45, 84, 86
  6155. 84    XPR=A(N)
  6156.     GO TO 50
  6157. C
  6158. C       PRINT CROSS-VARIABLES NUMBERS
  6159. C
  6160. 86    WRITE(6,7)
  6161.     YPR(1)=YMIN
  6162.     DO 90 KN=1,9
  6163. 90    YPR(KN+1)=YPR(KN)+YSCAL*10.0
  6164.     YPR(11)=YMAX
  6165.     WRITE(6,8)(YPR(IP),IP=1,11)
  6166.     RETURN
  6167.     END
  6168. C
  6169. C    ..................................................................
  6170. C
  6171. C       SUBROUTINE PMPY
  6172. C
  6173. C       PURPOSE
  6174. C          MULTIPLY TWO POLYNOMIALS
  6175. C
  6176. C       USAGE
  6177. C          CALL PMPY(Z,IDIMZ,X,IDIMX,Y,IDIMY)
  6178. C
  6179. C       DESCRIPTION OF PARAMETERS
  6180. C          Z     - VECTOR OF RESULTANT COEFFICIENTS, ORDERED FROM
  6181. C                  SMALLEST TO LARGEST POWER
  6182. C          IDIMZ - DIMENSION OF Z (CALCULATED)
  6183. C          X     - VECTOR OF COEFFICIENTS FOR FIRST POLYNOMIAL, ORDERED
  6184. C                  FROM SMALLEST TO LARGEST POWER
  6185. C          IDIMX - DIMENSION OF X (DEGREE IS IDIMX-1)
  6186. C          Y     - VECTOR OF COEFFICIENTS FOR SECOND POLYNOMIAL,
  6187. C                  ORDERED FROM SMALLEST TO LARGEST POWER
  6188. C          IDIMY - DIMENSION OF Y (DEGREE IS IDIMY-1)
  6189. C
  6190. C       REMARKS
  6191. C          Z CANNOT BE IN THE SAME LOCATION AS X
  6192. C          Z CANNOT BE IN THE SAME LOCATION AS Y
  6193. C
  6194. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  6195. C          NONE
  6196. C
  6197. C       METHOD
  6198. C          DIMENSION OF Z IS CALCULATED AS IDIMX+IDIMY-1
  6199. C          THE COEFFICIENTS OF Z ARE CALCULATED AS SUM OF PRODUCTS
  6200. C          OF COEFFICIENTS OF X AND Y , WHOSE EXPONENTS ADD UP TO THE
  6201. C          CORRESPONDING EXPONENT OF Z.
  6202. C
  6203. C    ..................................................................
  6204. C
  6205.     SUBROUTINE PMPY(Z,IDIMZ,X,IDIMX,Y,IDIMY)
  6206.     DIMENSION Z(1),X(1),Y(1)
  6207. C
  6208.     IF(IDIMX*IDIMY)10,10,20
  6209. 10    IDIMZ=0
  6210.     GO TO 50
  6211. 20    IDIMZ=IDIMX+IDIMY-1
  6212.     DO 30 I=1,IDIMZ
  6213. 30    Z(I)=0.
  6214.     DO 40 I=1,IDIMX
  6215.     DO 40 J=1,IDIMY
  6216.     K=I+J-1
  6217. 40    Z(K)=X(I)*Y(J)+Z(K)
  6218. 50    RETURN
  6219.     END
  6220. C
  6221. C    ..................................................................
  6222. C
  6223. C       SUBROUTINE PNORM
  6224. C
  6225. C       PURPOSE
  6226. C          NORMALIZE COEFFICIENT VECTOR OF A POLYNOMIAL
  6227. C
  6228. C       USAGE
  6229. C          CALL PNORM(X,IDIMX,EPS)
  6230. C
  6231. C       DESCRIPTION OF PARAMETERS
  6232. C          X      - VECTOR OF ORIGINAL COEFFICIENTS, ORDERED FROM
  6233. C                   SMALLEST TO LARGEST POWER. IT REMAINS UNCHANGED
  6234. C          IDIMX  - DIMENSION OF X. IT IS REPLACED BY FINAL DIMENSION
  6235. C          EPS    - TOLERANCE BELOW WHICH COEFFICIENT IS ELIMINATED
  6236. C
  6237. C       REMARKS
  6238. C          IF ALL COEFFICIENTS ARE LESS THAN EPS, RESULT IS A ZERO
  6239. C          POLYNOMIAL WITH IDIMX=0 BUT VECTOR X REMAINS INTACT
  6240. C
  6241. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  6242. C          NONE
  6243. C
  6244. C       METHOD
  6245. C          DIMENSION OF VECTOR X IS REDUCED BY ONE FOR EACH TRAILING
  6246. C          COEFFICIENT WITH AN ABSOLUTE VALUE LESS THAN OR EQUAL TO EPS
  6247. C
  6248. C    ..................................................................
  6249. C
  6250.     SUBROUTINE PNORM(X,IDIMX,EPS)
  6251.     DIMENSION X(1)
  6252. C
  6253. 1    IF(IDIMX) 4,4,2
  6254. 2    IF(ABS(X(IDIMX))-EPS) 3,3,4
  6255. 3    IDIMX=IDIMX-1
  6256.     GO TO 1
  6257. 4    RETURN
  6258.     END
  6259. C
  6260. C    ..................................................................
  6261. C
  6262. C       SUBROUTINE POINT
  6263. C
  6264. C       PURPOSE
  6265. C          TO COMPUTE THE POINT-BISERIAL CORRELATION COEFFICIENT
  6266. C          BETWEEN TWO VARIABLES, WHEN ONE OF THE VARIABLES IS A BINARY
  6267. C          VARIABLE AND ONE IS CONTINUOUS.  THIS IS A SPECIAL CASE OF
  6268. C          THE PEARSON PRODUCT-MOMENT CORRELATION COEFFICIENT.
  6269. C
  6270. C       USAGE
  6271. C          CALL POINT (N,A,B,HI,ANS,IER)
  6272. C
  6273. C       DESCRIPTION OF PARAMETERS
  6274. C          N   - NUMBER OF OBSERVATIONS
  6275. C          A   - INPUT VECTOR OF LENGTH N CONTAINING THE CONTINUOUS
  6276. C                VARIABLE
  6277. C          B   - INPUT VECTOR OF LENGTH N CONTAINING THE DICHOTOMOUS
  6278. C                (BINARY) VARIABLE
  6279. C          HI  - INPUT NUMERICAL CODE TO INDICATE THE HIGHER CATEGORY.
  6280. C                ANY VALUE OF THE BINARY VARIABLE NOT LESS THAN HI WILL
  6281. C                BE CLASSIFIED IN THE HIGHER OF THE TWO CATEGORIES.
  6282. C          ANS - OUTPUT VECTOR OF LENGTH 9 CONTAINING THE FOLLOWING
  6283. C                RESULTS
  6284. C                   ANS(1)- MEAN OF VARIABLE A
  6285. C                   ANS(2)- STANDARD DEVIATION OF VARIABLE A
  6286. C                   ANS(3)- NUMBER OF OBSERVATIONS IN THE HIGHER
  6287. C                           CATEGORY OF VARIABLE B
  6288. C                   ANS(4)- NUMBER OF OBSERVATIONS IN THE LOWER
  6289. C                           CATEGORY OF VARIABLE B
  6290. C                   ANS(5)- MEAN OF VARIABLE A FOR ONLY THOSE
  6291. C                           OBSERVATIONS IN THE HIGHER CATEGORY OF
  6292. C                           VARIABLE B
  6293. C                   ANS(6)- MEAN OF VARIABLE A FOR ONLY THOSE
  6294. C                           OBSERVATIONS IN THE LOWER CATEGORY OF
  6295. C                           VARIABLE B
  6296. C                   ANS(7)- POINT-BISERIAL CORRELATION COEFFICIENT
  6297. C                   ANS(8)- T-TEST FOR THE SIGNIFICANCE OF THE
  6298. C                           DIFFERENCE BETWEEN THE MEANS OF VARIABLE A
  6299. C                           FOR THE HIGHER AND LOWER CATEGORIES
  6300. C                           RESPECTIVELY.
  6301. C                   ANS(9)- DEGREES OF FREEDOM FOR THE T-TEST
  6302. C          IER- 1, IF ALL ELEMENTS OF B ARE NOT LESS THAN HI.
  6303. C               -1, IF ALL ELEMENTS OF B ARE LESS THAN HI.
  6304. C               0, OTHERWISE.  IF IER IS NON-ZERO, ANS(I), I=5,...,9,
  6305. C               IS SET TO 10**75.
  6306. C
  6307. C       REMARKS
  6308. C          THE SYMBOLS USED TO IDENTFY THE VALUES OF THE TWO CATEGORIES
  6309. C          OF VARIABLE B MUST BE NUMERIC.  ALPHABETIC OR SPECIAL
  6310. C          CHARACTERS CANNOT BE USED.
  6311. C          THE T-TEST(ANS(8)) IS A TEST OF WHETHER THE POINT-BISERIAL
  6312. C          COEFFICIENT DIFFERS SIGNIFICANTLY FROM ZERO.
  6313. C
  6314. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  6315. C          NONE
  6316. C
  6317. C       METHOD
  6318. C          REFER TO P. HORST, 'PSYCHOLOGICAL MEASUREMENT AND
  6319. C          PREDICTION', P. 91 (WADSWORTH, 1966).
  6320. C
  6321. C    ..................................................................
  6322. C
  6323.     SUBROUTINE POINT (N,A,B,HI,ANS,IER)
  6324. C
  6325.     DIMENSION A(1),B(1),ANS(1)
  6326. C
  6327. C       COMPUTE MEAN AND STANDARD DEVIATION OF VARIABLE A
  6328. C
  6329.     IER=0
  6330.     SUM=0.0
  6331.     SUM2=0.0
  6332.     DO 10 I=1,N
  6333.     SUM=SUM+A(I)
  6334. 10    SUM2=SUM2+A(I)*A(I)
  6335.     FN=N
  6336.     ANS(1)=SUM/FN
  6337.     ANS(2)=(SUM2-ANS(1)*SUM)/(FN-1.0)
  6338.     ANS(2)= SQRT(ANS(2))
  6339. C
  6340. C       FIND NUMBERS OF CASES IN THE HIGHER AND LOWER CATEGORIES
  6341. C
  6342.     P=0.0
  6343.     SUM=0.0
  6344.     SUM2=0.0
  6345.     DO 30 I=1,N
  6346.     IF(B(I)-HI) 20, 25, 25
  6347. 20    SUM2=SUM2+A(I)
  6348.     GO TO 30
  6349. 25    P=P+1.0
  6350.     SUM=SUM+A(I)
  6351. 30    CONTINUE
  6352. C
  6353.     Q=FN-P
  6354.     ANS(3)=P
  6355.     ANS(4)=Q
  6356.     IF (P) 35,35,40
  6357. 35    IER=-1
  6358.     GO TO 50
  6359. 40    ANS(5)=SUM/P
  6360.     IF (Q) 45,45,60
  6361. 45    IER=1
  6362. 50    DO 55 I=5,9
  6363. 55    ANS(I)=1.7E38                                                             0
  6364.     GO TO 65
  6365. 60    ANS(6)=SUM2/Q
  6366. C
  6367. C       COMPUTE THE POINT-BISERIAL CORRELATION
  6368. C
  6369.     R=((ANS(5)-ANS(1))/ANS(2))* SQRT(P/Q)
  6370.     ANS(7)=R
  6371. C
  6372. C       COMPUTE T RATIO USED TO TEST THE HYPOTHESIS OF ZERO CORRELATION
  6373. C
  6374.     T=R* SQRT((FN-2.0)/(1.0-R*R))
  6375.     ANS(8)=T
  6376. C
  6377. C       COMPUTE DEGREES OF FREEDOM
  6378. C
  6379.     ANS(9)=FN-2
  6380. C
  6381. 65    RETURN
  6382.     END
  6383. C
  6384. C    ..................................................................
  6385. C
  6386. C       SAMPLE MAIN PROGRAM FOR POLYNOMIAL REGRESSION - POLRG
  6387. C
  6388. C       PURPOSE
  6389. C          (1) READ THE PROBLEM PARAMETER CARD FOR A POLYNOMIAL REGRES-
  6390. C          SION, (2) CALL SUBROUTINES TO PERFORM THE ANALYSIS, (3)
  6391. C          PRINT THE REGRESSION COEFFICIENTS AND ANALYSIS OF VARIANCE
  6392. C          TABLE FOR POLYNOMIALS OF SUCCESSIVELY INCREASING DEGREES,
  6393. C          AND (4) OPTIONALLY PRINT THE TABLE OF RESIDUALS AND A PLOT
  6394. C          OF Y VALUES AND Y ESTIMATES.
  6395. C
  6396. C       REMARKS
  6397. C          THE NUMBER OF OBSERVATIONS, N, MUST BE GREATER THAN M+1,
  6398. C          WHERE M IS THE HIGHEST DEGREE POLYNOMIAL SPECIFIED.
  6399. C          IF THERE IS NO REDUCTION IN THE RESIDUAL SUM OF SQUARES
  6400. C          BETWEEN TWO SUCCESSIVE DEGREES OF THE POLYNOMIALS, THE
  6401. C          PROGRAM TERMINATES THE PROBLEM BEFORE COMPLETING THE ANALY-
  6402. C          SIS FOR THE HIGHEST DEGREE POLYNOMIAL SPECIFIED.
  6403. C
  6404. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  6405. C          GDATA
  6406. C          ORDER
  6407. C          MINV
  6408. C          MULTR
  6409. C          PLOT  (A SPECIAL PLOT SUBROUTINE PROVIDED FOR THE SAMPLE
  6410. C                PROGRAM.)
  6411. C
  6412. C       METHOD
  6413. C          REFER TO B. OSTLE, 'STATISTICS IN RESEARCH', THE IOWA STATE
  6414. C          COLLEGE PRESS', 1954, CHAPTER 6.
  6415. C
  6416. C    ..................................................................
  6417. C
  6418. C    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  6419. C    PRODUCT OF N*(M+1), WHERE N IS THE NUMBER OF OBSERVATIONS AND M
  6420. C    IS THE HIGHEST DEGREE POLYNOMIAL SPECIFIED..
  6421. cC
  6422. c       DIMENSION X(1100)
  6423. cC
  6424. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  6425. cC    PRODUCT OF M*M..
  6426. cC
  6427. c       DIMENSION DI(100)
  6428. cC
  6429. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO
  6430. cC    (M+2)*(M+1)/2..
  6431. cC
  6432. c       DIMENSION D(66)
  6433. cC
  6434. cC    THE FOLLOWING DIMENSIONS MUST BE GREATER THAN OR EQUAL TO M..
  6435. cC
  6436. c       DIMENSION B(10),E(10),SB(10),T(10)
  6437. cC
  6438. cC    THE FOLLOWING DIMENSIONS MUST BE GREATER THAN OR EQUAL TO (M+1)..
  6439. cC
  6440. c       DIMENSION XBAR(11),STD(11),COE(11),SUMSQ(11),ISAVE(11)
  6441. cC
  6442. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO 10..
  6443. cC
  6444. c       DIMENSION ANS(10)
  6445. cC
  6446. cC    THE FOLLOWING DIMENSION WILL BE USED IF THE PLOT OF OBSERVED DATA
  6447. cC    AND ESTIMATES IS DESIRED.  THE SIZE OF THE DIMENSION, IN THIS
  6448. cC    CASE, MUST BE GREATER THAN OR EQUAL TO N*3.  OTHERWISE, THE SIZE
  6449. cC    OF DIMENSION MAY BE SET TO 1.
  6450. cC
  6451. c       DIMENSION P(300)
  6452. cC
  6453. cC    ..................................................................
  6454. cC
  6455. cC       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  6456. cC       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  6457. cC       STATEMENT WHICH FOLLOWS.
  6458. cC
  6459. cC    DOUBLE PRECISION X,XBAR,STD,D,SUMSQ,DI,E,B,SB,T,ANS,DET,COE
  6460. cC
  6461. cC       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  6462. cC       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  6463. cC       ROUTINE.
  6464. cC
  6465. cC       ...............................................................
  6466. cC
  6467. c1    FORMAT(A4,A2,I5,I2,I1)
  6468. c2    FORMAT(2F6.0)
  6469. c3    FORMAT(27H1POLYNOMIAL REGRESSION.....,A4,A2/)
  6470. c4    FORMAT(23H0NUMBER OF OBSERVATIONS,I6//)
  6471. c5    FORMAT(32H0POLYNOMIAL REGRESSION OF DEGREE,I3)
  6472. c6    FORMAT(12H0  INTERCEPT,E20.7)
  6473. c7    FORMAT(26H0  REGRESSION COEFFICIENTS/(6E20.7))
  6474. c8    FORMAT(1H0/24X,24HANALYSIS OF VARIANCE FOR,I4,19H  DEGREE POLYNOMI
  6475. c     1AL/)
  6476. c9    FORMAT(1H0,5X,19HSOURCE OF VARIATION,7X,9HDEGREE OF,7X,6HSUM OF,9X
  6477. c     1,4HMEAN,10X,1HF,9X,20HIMPROVEMENT IN TERMS/33X,7HFREEDOM,8X,7HSQUA
  6478. c     2RES,7X,6HSQUARE,7X,5HVALUE,8X,17HOF SUM OF SQUARES)
  6479. c10    FORMAT(20H0  DUE TO REGRESSION,12X,I6,F17.5,F14.5,F13.5,F20.5)
  6480. c11    FORMAT(32H   DEVIATION ABOUT REGRESSION   ,I6,F17.5,F14.5)
  6481. c12    FORMAT(8X,5HTOTAL,19X,I6,F17.5///)
  6482. c13    FORMAT(17H0  NO IMPROVEMENT)
  6483. c14    FORMAT(1H0//27X,18HTABLE OF RESIDUALS//16H OBSERVATION NO.,5X,7HX
  6484. c     1VALUE,7X,7HY VALUE,7X,10HY ESTIMATE,7X,8HRESIDUAL/)
  6485. c15    FORMAT(1H0,3X,I6,F18.5,F14.5,F17.5,F15.5)
  6486. cC    DOUBLE PRECISION TMPFIL,FILE
  6487. cC    OPEN (UNIT=5, DEVICE='CDR', ACCESS='SEQIN')
  6488. cC    OPEN (UNIT=6, DEVICE='LPT', ACCESS='SEQOUT')
  6489. cC    FILE = TMPFIL('SSP')
  6490. cC    OPEN (UNIT=9, DEVICE='DSK', FILE=FILE, ACCESS='SEQINOUT',
  6491. cC    1    DISPOSE='DELETE')
  6492. cC
  6493. cC    ..................................................................
  6494. cC
  6495. cC    READ PROBLEM PARAMETER CARD
  6496. cC
  6497. c    LOGICAL EOF
  6498. c    CALL CHKEOF (EOF)
  6499. c100    READ (5,1) PR,PR1,N,M,NPLOT
  6500. c    IF (EOF) GOTO 999
  6501. cC
  6502. cC       PR....PROBLEM NUMBER (MAY BE ALPHAMERIC)
  6503. cC       PR1...PROBLEM NUMBER (CONTINUED)
  6504. cC       N.....NUMBER OF OBSERVATIONS
  6505. cC       M.....HIGHEST DEGREE POLYNOMIAL SPECIFIED
  6506. cC       NPLOT.OPTION CODE FOR PLOTTING
  6507. cC             0  IF PLOT IS NOT DESIRED.
  6508. cC             1  IF PLOT IS DESIRED.
  6509. cC
  6510. cC    PRINT PROBLEM NUMBER AND N.
  6511. cC
  6512. c    WRITE (6,3) PR,PR1
  6513. c    WRITE (6,4) N
  6514. cC
  6515. cC    READ INPUT DATA
  6516. cC
  6517. c    L=N*M
  6518. c    DO 110 I=1,N
  6519. c    J=L+I
  6520. cC
  6521. cC       X(I) IS THE INDEPENDENT VARIABLE, AND X(J) IS THE DEPENDENT
  6522. cC       VARIABLE.
  6523. cC
  6524. c110    READ (5,2) X(I),X(J)
  6525. cC
  6526. c    CALL GDATA (N,M,X,XBAR,STD,D,SUMSQ)
  6527. cC
  6528. c    MM=M+1
  6529. cc    SUM=0.0
  6530. c    NT=N-1
  6531. cC
  6532. c    DO 200 I=1,M
  6533. c    ISAVE(I)=I
  6534. cC
  6535. cC    FORM SUBSET OF CORRELATION COEFFICIENT MATRIX
  6536. cC
  6537. c    CALL ORDER (MM,D,MM,I,ISAVE,DI,E)
  6538. cC
  6539. cC    INVERT THE SUBMATRIX OF CORRELATION COEFFICIENTS
  6540. cC
  6541. c    CALL MINV (DI,I,DET,B,T)
  6542. cC
  6543. c    CALL MULTR (N,I,XBAR,STD,SUMSQ,DI,E,ISAVE,B,SB,T,ANS)
  6544. cC
  6545. cC    PRINT THE RESULT OF CALCULATION
  6546. cC
  6547. c    WRITE (6,5) I
  6548. c    IF(ANS(7)) 140,130,130
  6549. c130    SUMIP=ANS(4)-SUM
  6550. c    IF(SUMIP) 140, 140, 150
  6551. c140    WRITE (6,13)
  6552. c    GO TO 210
  6553. c150    WRITE (6,6) ANS(1)
  6554. c    WRITE (6,7) (B(J),J=1,I)
  6555. c    WRITE (6,8) I
  6556. c    WRITE (6,9)
  6557. c    SUM=ANS(4)
  6558. c    WRITE (6,10) I,ANS(4),ANS(6),ANS(10),SUMIP
  6559. c    NI=ANS(8)
  6560. c    WRITE (6,11) NI,ANS(7),ANS(9)
  6561. c    WRITE (6,12) NT,SUMSQ(MM)
  6562. cC
  6563. cC    SAVE COEFFICIENTS FOR CALCULATION OF Y ESTIMATES
  6564. cC
  6565. c    COE(1)=ANS(1)
  6566. c    DO 160 J=1,I
  6567. c160    COE(J+1)=B(J)
  6568. c    LA=I
  6569. c200    CONTINUE
  6570. cC
  6571. cC    TEST WHETHER PLOT IS DESIRED
  6572. cC
  6573. c210    IF(NPLOT) 100, 100, 220
  6574. cC
  6575. cC       CALCULATE ESTIMATES
  6576. cC
  6577. c220    NP3=N+N
  6578. c    DO 230 I=1,N
  6579. c    NP3=NP3+1
  6580. c    P(NP3)=COE(1)
  6581. c    L=I
  6582. c    DO 230 J=1,LA
  6583. c    P(NP3)=P(NP3)+X(L)*COE(J+1)
  6584. c230    L=L+N
  6585. cC
  6586. cC       COPY OBSERVED DATA
  6587. cC
  6588. c    N2=N
  6589. c    L=N*M
  6590. c    DO 240 I=1,N
  6591. c    P(I)=X(I)
  6592. c    N2=N2+1
  6593. c    L=L+1
  6594. c240    P(N2)=X(L)
  6595. cC
  6596. cC    PRINT TABLE OF RESIDUALS
  6597. cC
  6598. c    WRITE (6,3) PR,PR1
  6599. c    WRITE (6,5) LA
  6600. c    WRITE (6,14)
  6601. c    NP2=N
  6602. c    NP3=N+N
  6603. c    DO 250 I=1,N
  6604. c    NP2=NP2+1
  6605. c    NP3=NP3+1
  6606. c    RESID=P(NP2)-P(NP3)
  6607. c250    WRITE (6,15) I,P(I),P(NP2),P(NP3),RESID
  6608. cC
  6609. c    CALL PLOT (LA,P,N,3,0,1)
  6610. cC
  6611. c    GO TO 100
  6612. c999    STOP
  6613. c    END
  6614. C
  6615. C    ..................................................................
  6616. C
  6617. C       SUBROUTINE POLRT
  6618. C
  6619. C       PURPOSE
  6620. C          COMPUTES THE REAL AND COMPLEX ROOTS OF A REAL POLYNOMIAL
  6621. C
  6622. C       USAGE
  6623. C          CALL POLRT(XCOF,COF,M,ROOTR,ROOTI,IER)
  6624. C
  6625. C       DESCRIPTION OF PARAMETERS
  6626. C          XCOF -VECTOR OF M+1 COEFFICIENTS OF THE POLYNOMIAL
  6627. C                ORDERED FROM SMALLEST TO LARGEST POWER
  6628. C          COF  -WORKING VECTOR OF LENGTH M+1
  6629. C          M    -ORDER OF POLYNOMIAL
  6630. C          ROOTR-RESULTANT VECTOR OF LENGTH M CONTAINING REAL ROOTS
  6631. C                OF THE POLYNOMIAL
  6632. C          ROOTI-RESULTANT VECTOR OF LENGTH M CONTAINING THE
  6633. C                CORRESPONDING IMAGINARY ROOTS OF THE POLYNOMIAL
  6634. C          IER  -ERROR CODE WHERE
  6635. C                IER=0  NO ERROR
  6636. C                IER=1  M LESS THAN ONE
  6637. C                IER=2  M GREATER THAN 36
  6638. C                IER=3  UNABLE TO DETERMINE ROOT WITH 500 INTERATIONS
  6639. C                       ON 5 STARTING VALUES
  6640. C                IER=4  HIGH ORDER COEFFICIENT IS ZERO
  6641. C
  6642. C       REMARKS
  6643. C          LIMITED TO 36TH ORDER POLYNOMIAL OR LESS.
  6644. C          FLOATING POINT OVERFLOW MAY OCCUR FOR HIGH ORDER
  6645. C          POLYNOMIALS BUT WILL NOT AFFECT THE ACCURACY OF THE RESULTS.
  6646. C
  6647. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  6648. C          NONE
  6649. C
  6650. C       METHOD
  6651. C          NEWTON-RAPHSON ITERATIVE TECHNIQUE.  THE FINAL ITERATIONS
  6652. C          ON EACH ROOT ARE PERFORMED USING THE ORIGINAL POLYNOMIAL
  6653. C          RATHER THAN THE REDUCED POLYNOMIAL TO AVOID ACCUMULATED
  6654. C          ERRORS IN THE REDUCED POLYNOMIAL.
  6655. C
  6656. C    ..................................................................
  6657. C
  6658.     SUBROUTINE POLRT(XCOF,COF,M,ROOTR,ROOTI,IER)
  6659.     DIMENSION XCOF(1),COF(1),ROOTR(1),ROOTI(1)
  6660.     DOUBLE PRECISION XO,YO,X,Y,XPR,YPR,UX,UY,V,YT,XT,U,XT2,YT2,SUMSQ,
  6661.      1 DX,DY,TEMP,ALPHA
  6662. C
  6663. C       ...............................................................
  6664. C
  6665. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  6666. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  6667. C       STATEMENT WHICH FOLLOWS.
  6668. C
  6669. C    DOUBLE PRECISION XCOF,COF,ROOTR,ROOTI
  6670. C
  6671. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  6672. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  6673. C       ROUTINE.
  6674. C       THE DOUBLE PRECISION VERSION MAY BE MODIFIED BY CHANGING THE
  6675. C       CONSTANT IN STATEMENT 78 TO 1.0D-12 AND IN STATEMENT 122 TO
  6676. C       1.0D-10.  THIS WILL PROVIDE HIGHER PRECISION RESULTS AT THE
  6677. C       COST OF EXECUTION TIME
  6678. C
  6679. C       ...............................................................
  6680. C
  6681.     IFIT=0
  6682.     N=M
  6683.     IER=0
  6684.     IF(XCOF(N+1))10,25,10
  6685. 10    IF(N) 15,15,32
  6686. C
  6687. C       SET ERROR CODE TO 1
  6688. C
  6689. 15    IER=1
  6690. 20    RETURN
  6691. C
  6692. C       SET ERROR CODE TO 4
  6693. C
  6694. 25    IER=4
  6695.     GO TO 20
  6696. C
  6697. C       SET ERROR CODE TO 2
  6698. C
  6699. 30    IER=2
  6700.     GO TO 20
  6701. 32    IF(N-36) 35,35,30
  6702. 35    NX=N
  6703.     NXX=N+1
  6704.     N2=1
  6705.     KJ1 = N+1
  6706.     DO 40 L=1,KJ1
  6707.     MT=KJ1-L+1
  6708. 40    COF(MT)=XCOF(L)
  6709. C
  6710. C       SET INITIAL VALUES
  6711. C
  6712. 45    XO=.00500101
  6713.     YO=0.01000101
  6714. C
  6715. C       ZERO INITIAL VALUE COUNTER
  6716. C
  6717.     IN=0
  6718. 50    X=XO
  6719. C
  6720. C       INCREMENT INITIAL VALUES AND COUNTER
  6721. C
  6722.     XO=-10.0*YO
  6723.     YO=-10.0*X
  6724. C
  6725. C       SET X AND Y TO CURRENT VALUE
  6726. C
  6727.     X=XO
  6728.     Y=YO
  6729.     IN=IN+1
  6730.     GO TO 59
  6731. 55    IFIT=1
  6732.     XPR=X
  6733.     YPR=Y
  6734. C
  6735. C       EVALUATE POLYNOMIAL AND DERIVATIVES
  6736. C
  6737. 59    ICT=0
  6738. 60    UX=0.0
  6739.     UY=0.0
  6740.     V =0.0
  6741.     YT=0.0
  6742.     XT=1.0
  6743.     U=COF(N+1)
  6744.     IF(U) 65,130,65
  6745. 65    DO 70 I=1,N
  6746.     L =N-I+1
  6747.     TEMP=COF(L)
  6748.     XT2=X*XT-Y*YT
  6749.     YT2=X*YT+Y*XT
  6750.     U=U+TEMP*XT2
  6751.     V=V+TEMP*YT2
  6752.     FI=I
  6753.     UX=UX+FI*XT*TEMP
  6754.     UY=UY-FI*YT*TEMP
  6755.     XT=XT2
  6756. 70    YT=YT2
  6757.     SUMSQ=UX*UX+UY*UY
  6758.     IF(SUMSQ) 75,110,75
  6759. 75    DX=(V*UY-U*UX)/SUMSQ
  6760.     X=X+DX
  6761.     DY=-(U*UY+V*UX)/SUMSQ
  6762.     Y=Y+DY
  6763. 78    IF(DABS(DY)+DABS(DX)-1.0D-05) 100,80,80
  6764. C
  6765. C       STEP ITERATION COUNTER
  6766. C
  6767. 80    ICT=ICT+1
  6768.     IF(ICT-500) 60,85,85
  6769. 85    IF(IFIT)100,90,100
  6770. 90    IF(IN-5) 50,95,95
  6771. C
  6772. C       SET ERROR CODE TO 3
  6773. C
  6774. 95    IER=3
  6775.     GO TO 20
  6776. 100    DO 105 L=1,NXX
  6777.     MT=KJ1-L+1
  6778.     TEMP=XCOF(MT)
  6779.     XCOF(MT)=COF(L)
  6780. 105    COF(L)=TEMP
  6781.     ITEMP=N
  6782.     N=NX
  6783.     NX=ITEMP
  6784.     IF(IFIT) 120,55,120
  6785. 110    IF(IFIT) 115,50,115
  6786. 115    X=XPR
  6787.     Y=YPR
  6788. 120    IFIT=0
  6789. 122    IF(DABS(Y)-1.0D-4*DABS(X)) 135,125,125
  6790. 125    ALPHA=X+X
  6791.     SUMSQ=X*X+Y*Y
  6792.     N=N-2
  6793.     GO TO 140
  6794. 130    X=0.0
  6795.     NX=NX-1
  6796.     NXX=NXX-1
  6797. 135    Y=0.0
  6798.     SUMSQ=0.0
  6799.     ALPHA=X
  6800.     N=N-1
  6801. 140    COF(2)=COF(2)+ALPHA*COF(1)
  6802. 145    DO 150 L=2,N
  6803. 150    COF(L+1)=COF(L+1)+ALPHA*COF(L)-SUMSQ*COF(L-1)
  6804. 155    ROOTI(N2)=Y
  6805.     ROOTR(N2)=X
  6806.     N2=N2+1
  6807.     IF(SUMSQ) 160,165,160
  6808. 160    Y=-Y
  6809.     SUMSQ=0.0
  6810.     GO TO 155
  6811. 165    IF(N) 20,20,45
  6812.     END
  6813. C
  6814. C    ..................................................................
  6815. C
  6816. C       SUBROUTINE PPRCN
  6817. C
  6818. C       PURPOSE
  6819. C          TO COMPUTE, GIVEN TWO PERMUTATION VECTORS IP1 AND IP2, THE
  6820. C          COMPOSITION IP2(IP1) AND THE CONJUGATE IP1(IP2(IP1 INVERSE))
  6821. C          OF IP2 BY IP1.  (SEE THE GENERAL DISCUSSION FOR DEFINITIONS
  6822. C          AND NOTATION.)
  6823. C
  6824. C       USAGE
  6825. C          CALL PPRCN(IP1,IP2,IP3,N,IPAR,IER)
  6826. C
  6827. C       DESCRIPTION OF PARAMETERS
  6828. C          IP1  - GIVEN PERMUTATION VECTOR (DIMENSION N)
  6829. C          IP2  - GIVEN PERMUTATION VECTOR (DIMENSION N)
  6830. C          IP3  - RESULTING PERMUTATION VECTOR (DIMENSION N)
  6831. C          N    - DIMENSION OF VECTORS IP1, IP2 AND IP3
  6832. C          IPAR - INPUT PARAMETER
  6833. C                 IPAR NON-NEGATIVE - COMPUTE IP2(IP1)
  6834. C                 IPAR NEGATIVE     - COMPUTE IP1(IP2(IP1 INVERSE))
  6835. C          IER  - RESULTING ERROR PARAMETER
  6836. C                 IER=-1  -  N IS NOT POSITIVE
  6837. C                 IER= 0  -  NO ERROR
  6838. C                 IER= 1  -  IP1 AND IP2 ARE NOT BOTH PERMUTATION
  6839. C                            VECTORS ON 1,...,N
  6840. C
  6841. C       REMARKS
  6842. C          (1)  IF IER=-1 THERE HAS BEEN NO COMPUTATION.
  6843. C          (2)  IF IER=1, THEN COMPUTATION HAS BEEN UNSUCCESSFUL DUE TO
  6844. C               ERROR AND THE PARTIAL RESULTS FOUND IN IP2 ARE USELESS.
  6845. C          (3)  IP3 CANNOT HAVE THE SAME STORAGE ALLOCATION AS IP1 OR
  6846. C               IP2.
  6847. C
  6848. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  6849. C          PERM
  6850. C
  6851. C       METHOD
  6852. C          SUBROUTINE PERM IS USED TO CHECK THAT IP1 AND IP2 ARE PERMU-
  6853. C          TATION VECTORS.  IF IP2(IP1) IS COMPUTED, IP3(I) IS SET TO
  6854. C          IP2(IP1(I)) FOR I=1,...,N.  IF IP1(IP2(IP1 INVERSE)) IS
  6855. C          COMPUTED, FIRST IP3 IS SET TO IP1 INVERSE BY SUBROUTINE PERM
  6856. C          AND THEN IP3(I) IS SET TO IP1(IP2(IP3(I))) FOR I=1,...,N.
  6857. C
  6858. C    ..................................................................
  6859. C
  6860.     SUBROUTINE PPRCN(IP1,IP2,IP3,N,IPAR,IER)
  6861. C
  6862. C
  6863.     DIMENSION IP1(1),IP2(1),IP3(1)
  6864. C
  6865. C       CHECK THAT N IS POSITIVE AND THAT IP2 IS A PERMUTATION VECTOR
  6866.     CALL PERM(IP2,IP3,N,-1,IER)
  6867. C
  6868. C       TEST IER TO SEE IF THERE IS AN ERROR
  6869.     IF(IER)7,1,7
  6870. C
  6871. C       CHECK THAT IP1 IS A PERMUTATION VECTOR AND COMPUTE IP1 INVERSE
  6872. 1    CALL PERM(IP1,IP3,N,-1,IER)
  6873. C
  6874. C       TEST IER TO SEE IF THERE IS AN ERROR
  6875.     IF(IER)7,2,7
  6876. C
  6877. C       TEST IPAR FOR THE DESIRED OPERATION
  6878. 2    IF(IPAR)3,5,5
  6879. C
  6880. C       COMPUTE IP1(IP2(IP1 INVERSE))
  6881. 3    DO 4 I=1,N
  6882.     K=IP3(I)
  6883.     J=IP2(K)
  6884. 4    IP3(I)=IP1(J)
  6885.     RETURN
  6886. C
  6887. C       COMPUTE IP2(IP1)
  6888. 5    DO 6 I=1,N
  6889.     K=IP1(I)
  6890. 6    IP3(I)=IP2(K)
  6891. 7    RETURN
  6892.     END
  6893. C
  6894. C    ..................................................................
  6895. C
  6896. C       SUBROUTINE PQFB
  6897. C
  6898. C       PURPOSE
  6899. C          TO FIND AN APPROXIMATION Q(X)=Q1+Q2*X+X*X TO A QUADRATIC
  6900. C          FACTOR OF A GIVEN POLYNOMIAL P(X) WITH REAL COEFFICIENTS.
  6901. C
  6902. C       USAGE
  6903. C          CALL PQFB(C,IC,Q,LIM,IER)
  6904. C
  6905. C       DESCRIPTION OF PARAMETERS
  6906. C          C   - INPUT VECTOR CONTAINING THE COEFFICIENTS OF P(X) -
  6907. C                C(1) IS THE CONSTANT TERM (DIMENSION IC)
  6908. C          IC  - DIMENSION OF C
  6909. C          Q   - VECTOR OF DIMENSION 4 - ON INPUT Q(1) AND Q(2) MUST
  6910. C                CONTAIN INITIAL GUESSES FOR Q1 AND Q2 - ON RETURN Q(1)
  6911. C                AND Q(2) CONTAIN THE REFINED COEFFICIENTS Q1 AND Q2 OF
  6912. C                Q(X), WHILE Q(3) AND Q(4) CONTAIN THE COEFFICIENTS A
  6913. C                AND B OF A+B*X, WHICH IS THE REMAINDER OF THE QUOTIENT
  6914. C                OF P(X) BY Q(X)
  6915. C          LIM - INPUT VALUE SPECIFYING THE MAXIMUM NUMBER OF
  6916. C                ITERATIONS TO BE PERFORMED
  6917. C          IER - RESULTING ERROR PARAMETER (SEE REMARKS)
  6918. C                IER= 0 - NO ERROR
  6919. C                IER= 1 - NO CONVERGENCE WITHIN LIM ITERATIONS
  6920. C                IER=-1 - THE POLYNOMIAL P(X) IS CONSTANT OR UNDEFINED
  6921. C                         - OR OVERFLOW OCCURRED IN NORMALIZING P(X)
  6922. C                IER=-2 - THE POLYNOMIAL P(X) IS OF DEGREE 1
  6923. C                IER=-3 - NO FURTHER REFINEMENT OF THE APPROXIMATION TO
  6924. C                         A QUADRATIC FACTOR IS FEASIBLE, DUE TO EITHER
  6925. C                         DIVISION BY 0, OVERFLOW OR AN INITIAL GUESS
  6926. C                         THAT IS NOT SUFFICIENTLY CLOSE TO A FACTOR OF
  6927. C                         P(X)
  6928. C
  6929. C       REMARKS
  6930. C          (1)  IF IER=-1 THERE IS NO COMPUTATION OTHER THAN THE
  6931. C               POSSIBLE NORMALIZATION OF C.
  6932. C          (2)  IF IER=-2 THERE IS NO COMPUTATION OTHER THAN THE
  6933. C               NORMALIZATION OF C.
  6934. C          (3)  IF IER =-3  IT IS SUGGESTED THAT A NEW INITIAL GUESS BE
  6935. C               MADE FOR A QUADRATIC FACTOR.  Q, HOWEVER, WILL CONTAIN
  6936. C               THE VALUES ASSOCIATED WITH THE ITERATION THAT YIELDED
  6937. C               THE SMALLEST NORM OF THE MODIFIED LINEAR REMAINDER.
  6938. C          (4)  IF IER=1, THEN, ALTHOUGH THE NUMBER OF ITERATIONS LIM
  6939. C               WAS TOO SMALL TO INDICATE CONVERGENCE, NO OTHER PROB-
  6940. C               LEMS HAVE BEEN DETECTED, AND Q WILL CONTAIN THE VALUES
  6941. C               ASSOCIATED WITH THE ITERATION THAT YIELDED THE SMALLEST
  6942. C               NORM OF THE MODIFIED LINEAR REMAINDER.
  6943. C          (5)  FOR COMPLETE DETAIL SEE THE DOCUMENTATION FOR
  6944. C               SUBROUTINES PQFB AND DPQFB.
  6945. C
  6946. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  6947. C          NONE
  6948. C
  6949. C       METHOD
  6950. C          COMPUTATION IS BASED ON BAIRSTOW'S ITERATIVE METHOD.  (SEE
  6951. C          WILKINSON, J.H., THE EVALUATION OF THE ZEROS OF ILL-CON-
  6952. C          DITIONED POLYNOMIALS (PART ONE AND TWO), NUMERISCHE MATHE-
  6953. C          MATIK, VOL.1 (1959), PP. 150-180, OR HILDEBRAND, F.B.,
  6954. C          INTRODUCTION TO NUMERICAL ANALYSIS, MC GRAW-HILL, NEW YORK/
  6955. C          TORONTO/LONDON, 1956, PP. 472-476.)
  6956. C
  6957. C    ..................................................................
  6958. C
  6959.     SUBROUTINE PQFB(C,IC,Q,LIM,IER)
  6960. C
  6961. C
  6962.     DIMENSION C(1),Q(1)
  6963. C
  6964. C       TEST ON LEADING ZERO COEFFICIENTS
  6965.     IER=0
  6966.     J=IC+1
  6967. 1    J=J-1
  6968.     IF(J-1)40,40,2
  6969. 2    IF(C(J))3,1,3
  6970. C
  6971. C       NORMALIZATION OF REMAINING COEFFICIENTS
  6972. 3    A=C(J)
  6973.     IF(A-1.)4,6,4
  6974. 4    DO 5 I=1,J
  6975.     C(I)=C(I)/A
  6976.     CALL OVERFL(N)
  6977.     IF(N-2)40,5,5
  6978. 5    CONTINUE
  6979. C
  6980. C       TEST ON NECESSITY OF BAIRSTOW ITERATION
  6981. 6    IF(J-3)41,38,7
  6982. C
  6983. C       PREPARE BAIRSTOW ITERATION
  6984. 7    EPS=1.E-6
  6985.     EPS1=1.E-3
  6986.     L=0
  6987.     LL=0
  6988.     Q1=Q(1)
  6989.     Q2=Q(2)
  6990.     QQ1=0.
  6991.     QQ2=0.
  6992.     AA=C(1)
  6993.     BB=C(2)
  6994.     CB=ABS(AA)
  6995.     CA=ABS(BB)
  6996.     IF(CB-CA)8,9,10
  6997. 8    CC=CB+CB
  6998.     CB=CB/CA
  6999.     CA=1.
  7000.     GO TO 11
  7001. 9    CC=CA+CA
  7002.     CA=1.
  7003.     CB=1.
  7004.     GO TO 11
  7005. 10    CC=CA+CA
  7006.     CA=CA/CB
  7007.     CB=1.
  7008. 11    CD=CC*.1
  7009. C
  7010. C       START BAIRSTOW ITERATION
  7011. C       PREPARE NESTED MULTIPLICATION
  7012. 12    A=0.
  7013.     B=A
  7014.     A1=A
  7015.     B1=A
  7016.     I=J
  7017.     QQQ1=Q1
  7018.     QQQ2=Q2
  7019.     DQ1=HH
  7020.     DQ2=H
  7021. C
  7022. C       START NESTED MULTIPLICATION
  7023. 13    H=-Q1*B-Q2*A+C(I)
  7024.     CALL OVERFL(N)
  7025.     IF(N-2)42,14,14
  7026. 14    B=A
  7027.     A=H
  7028.     I=I-1
  7029.     IF(I-1)18,15,16
  7030. 15    H=0.
  7031. 16    H=-Q1*B1-Q2*A1+H
  7032.     CALL OVERFL(N)
  7033.     IF(N-2)42,17,17
  7034. 17    C1=B1
  7035.     B1=A1
  7036.     A1=H
  7037.     GO TO 13
  7038. C       END OF NESTED MULTIPLICATION
  7039. C
  7040. C       TEST ON SATISFACTORY ACCURACY
  7041. 18    H=CA*ABS(A)+CB*ABS(B)
  7042.     IF(LL)19,19,39
  7043. 19    L=L+1
  7044.     IF(ABS(A)-EPS*ABS(C(1)))20,20,21
  7045. 20    IF(ABS(B)-EPS*ABS(C(2)))39,39,21
  7046. C
  7047. C       TEST ON LINEAR REMAINDER OF MINIMUM NORM
  7048. 21    IF(H-CC)22,22,23
  7049. 22    AA=A
  7050.     BB=B
  7051.     CC=H
  7052.     QQ1=Q1
  7053.     QQ2=Q2
  7054. C
  7055. C       TEST ON LAST ITERATION STEP
  7056. 23    IF(L-LIM)28,28,24
  7057. C
  7058. C       TEST ON RESTART OF BAIRSTOW ITERATION WITH ZERO INITIAL GUESS
  7059. 24    IF(H-CD)43,43,25
  7060. 25    IF(Q(1))27,26,27
  7061. 26    IF(Q(2))27,42,27
  7062. 27    Q(1)=0.
  7063.     Q(2)=0.
  7064.     GO TO 7
  7065. C
  7066. C       PERFORM ITERATION STEP
  7067. 28    HH=AMAX1(ABS(A1),ABS(B1),ABS(C1))
  7068.     IF(HH)42,42,29
  7069. 29    A1=A1/HH
  7070.     B1=B1/HH
  7071.     C1=C1/HH
  7072.     H=A1*C1-B1*B1
  7073.     IF(H)30,42,30
  7074. 30    A=A/HH
  7075.     B=B/HH
  7076.     HH=(B*A1-A*B1)/H
  7077.     H=(A*C1-B*B1)/H
  7078.     Q1=Q1+HH
  7079.     Q2=Q2+H
  7080. C       END OF ITERATION STEP
  7081. C
  7082. C       TEST ON SATISFACTORY RELATIVE ERROR OF ITERATED VALUES
  7083.     IF(ABS(HH)-EPS*ABS(Q1))31,31,33
  7084. 31    IF(ABS(H)-EPS*ABS(Q2))32,32,33
  7085. 32    LL=1
  7086.     GO TO 12
  7087. C
  7088. C       TEST ON DECREASING RELATIVE ERRORS
  7089. 33    IF(L-1)12,12,34
  7090. 34    IF(ABS(HH)-EPS1*ABS(Q1))35,35,12
  7091. 35    IF(ABS(H)-EPS1*ABS(Q2))36,36,12
  7092. 36    IF(ABS(QQQ1*HH)-ABS(Q1*DQ1))37,44,44
  7093. 37    IF(ABS(QQQ2*H)-ABS(Q2*DQ2))12,44,44
  7094. C       END OF BAIRSTOW ITERATION
  7095. C
  7096. C       EXIT IN CASE OF QUADRATIC POLYNOMIAL
  7097. 38    Q(1)=C(1)
  7098.     Q(2)=C(2)
  7099.     Q(3)=0.
  7100.     Q(4)=0.
  7101.     RETURN
  7102. C
  7103. C       EXIT IN CASE OF SUFFICIENT ACCURACY
  7104. 39    Q(1)=Q1
  7105.     Q(2)=Q2
  7106.     Q(3)=A
  7107.     Q(4)=B
  7108.     RETURN
  7109. C
  7110. C       ERROR EXIT IN CASE OF ZERO OR CONSTANT POLYNOMIAL
  7111. 40    IER=-1
  7112.     RETURN
  7113. C
  7114. C       ERROR EXIT IN CASE OF LINEAR POLYNOMIAL
  7115. 41    IER=-2
  7116.     RETURN
  7117. C
  7118. C       ERROR EXIT IN CASE OF NONREFINED QUADRATIC FACTOR
  7119. 42    IER=-3
  7120.     GO TO 44
  7121. C
  7122. C       ERROR EXIT IN CASE OF UNSATISFACTORY ACCURACY
  7123. 43    IER=1
  7124. 44    Q(1)=QQ1
  7125.     Q(2)=QQ2
  7126.     Q(3)=AA
  7127.     Q(4)=BB
  7128.     RETURN
  7129.     END
  7130. C
  7131. C    ..................................................................
  7132. C
  7133. C       SUBROUTINE PQSD
  7134. C
  7135. C       PURPOSE
  7136. C          PERFORM QUADRATIC SYNTHETIC DIVISION
  7137. C
  7138. C       USAGE
  7139. C          CALL PQSD(A,B,P,Q,X,IDIMX)
  7140. C
  7141. C       DESCRIPTION OF PARAMETERS
  7142. C          A     - COEFFICIENT OF Z IN REMAINDER (CALCULATED)
  7143. C          B     - CONSTANT TERM IN REMAINDER (CALCULATED)
  7144. C          P     - COEFFICIENT OF Z IN QUADRATIC POLYNOMIAL
  7145. C          Q     - CONSTANT TERM IN QUADRATIC POLYNOMIAL
  7146. C          X     - COEFFICIENT VECTOR FOR GIVEN POLYNOMIAL, ORDERED
  7147. C                  FROM SMALLEST TO LARGEST POWER
  7148. C          IDIMX - DIMENSION OF X
  7149. C
  7150. C       REMARKS
  7151. C          NONE
  7152. C
  7153. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  7154. C          NONE
  7155. C
  7156. C       METHOD
  7157. C          POLYNOMIAL IS DIVIDED BY THE QUADRATIC Z**2-P*Z-Q GIVING
  7158. C          THE LINEAR REMAINDER A*Z+B
  7159. C
  7160. C    ..................................................................
  7161. C
  7162.     SUBROUTINE PQSD(A,B,P,Q,X,IDIMX)
  7163.     DIMENSION X(1)
  7164. C
  7165.     A=0.
  7166.     B=0.
  7167.     J=IDIMX
  7168. 1    IF(J)3,3,2
  7169. 2    Z=P*A+B
  7170.     B=Q*A+X(J)
  7171.     A=Z
  7172.     J=J-1
  7173.     GO TO 1
  7174. 3    RETURN
  7175.     END
  7176. C
  7177. C    ..................................................................
  7178. C
  7179. C       SUBROUTINE PRBM
  7180. C
  7181. C       PURPOSE
  7182. C          TO CALCULATE ALL REAL AND COMPLEX ROOTS OF A GIVEN
  7183. C          POLYNOMIAL WITH REAL COEFFICIENTS.
  7184. C
  7185. C       USAGE
  7186. C          CALL PRBM (C,IC,RR,RC,POL,IR,IER)
  7187. C
  7188. C       DESCRIPTION OF PARAMETERS
  7189. C          C      - INPUT VECTOR CONTAINING THE COEFFICIENTS OF THE
  7190. C                   GIVEN POLYNOMIAL. COEFFICIENTS ARE ORDERED FROM
  7191. C                   LOW TO HIGH. ON RETURN COEFFICIENTS ARE DIVIDED
  7192. C                   BY THE LAST NONZERO TERM.
  7193. C          IC     - DIMENSION OF VECTORS C, RR, RC, AND POL.
  7194. C          RR     - RESULTANT VECTOR OF REAL PARTS OF THE ROOTS.
  7195. C          RC     - RESULTANT VECTOR OF COMPLEX PARTS OF THE ROOTS.
  7196. C          POL    - RESULTANT VECTOR OF COEFFICIENTS OF THE POLYNOMIAL
  7197. C                   WITH CALCULATED ROOTS. COEFFICIENTS ARE ORDERED
  7198. C                   FROM LOW TO HIGH (SEE REMARK 4).
  7199. C          IR     - OUTPUT VALUE SPECIFYING THE NUMBER OF CALCULATED
  7200. C                   ROOTS. NORMALLY IR IS EQUAL TO IC-1.
  7201. C          IER    - RESULTANT ERROR PARAMETER CODED AS FOLLOWS
  7202. C                    IER=0  - NO ERROR,
  7203. C                    IER=1  - SUBROUTINE PQFB RECORDS POOR CONVERGENCE
  7204. C                             AT SOME QUADRATIC FACTORIZATION WITHIN
  7205. C                             50 ITERATION STEPS,
  7206. C                    IER=2  - POLYNOMIAL IS DEGENERATE, I.E. ZERO OR
  7207. C                             CONSTANT,
  7208. C                             OR OVERFLOW IN NORMALIZATION OF GIVEN
  7209. C                             POLYNOMIAL,
  7210. C                    IER=3  - THE SUBROUTINE IS BYPASSED DUE TO
  7211. C                             SUCCESSIVE ZERO DIVISORS OR OVERFLOWS
  7212. C                             IN QUADRATIC FACTORIZATION OR DUE TO
  7213. C                             COMPLETELY UNSATISFACTORY ACCURACY,
  7214. C                    IER=-1 - CALCULATED COEFFICIENT VECTOR HAS LESS
  7215. C                             THAN THREE CORRECT SIGNIFICANT DIGITS.
  7216. C                             THIS REVEALS POOR ACCURACY OF CALCULATED
  7217. C                             ROOTS.
  7218. C
  7219. C       REMARKS
  7220. C          (1) REAL PARTS OF THE ROOTS ARE STORED IN RR(1) UP TO RR(IR)
  7221. C              AND CORRESPONDING COMPLEX PARTS IN RC(1) UP TO RC(IR).
  7222. C          (2) ERROR MESSAGE IER=1 INDICATES POOR CONVERGENCE WITHIN
  7223. C              50 ITERATION STEPS AT SOME QUADRQTIC FACTORIZATION
  7224. C              PERFORMED BY SUBROUTINE PQFB.
  7225. C          (3) NO ACTION BESIDES ERROR MESSAGE IER=2 IN CASE OF A ZERO
  7226. C              OR CONSTANT POLYNOMIAL. THE SAME ERROR MESSAGE IS GIVEN
  7227. C              IN CASE OF AN OVERFLOW IN NORMALIZATION OF GIVEN
  7228. C              POLYNOMIAL.
  7229. C          (4) ERROR MESSAGE IER=3 INDICATES SUCCESSIVE ZERO DIVISORS
  7230. C              OR OVERFLOWS OR COMPLETELY UNSATISFACTORY ACCURACY AT
  7231. C              ANY QUADRATIC FACTORIZATION PERFORMED BY
  7232. C              SUBROUTINE PQFB. IN THIS CASE CALCULATION IS BYPASSED.
  7233. C              IR RECORDS THE NUMBER OF CALCULATED ROOTS.
  7234. C              POL(1),...,POL(J-IR) ARE THE COEFFICIENTS OF THE
  7235. C              REMAINING POLYNOMIAL, WHERE J IS THE ACTUAL NUMBER OF
  7236. C              COEFFICIENTS IN VECTOR C (NORMALLY J=IC).
  7237. C          (5) IF CALCULATED COEFFICIENT VECTOR HAS LESS THAN THREE
  7238. C              CORRECT SIGNIFICANT DIGITS THOUGH ALL QUADRATIC
  7239. C              FACTORIZATIONS SHOWED SATISFACTORY ACCURACY, THE ERROR
  7240. C              MESSAGE IER=-1 IS GIVEN.
  7241. C          (6) THE FINAL COMPARISON BETWEEN GIVEN AND CALCULATED
  7242. C              COEFFICIENT VECTOR IS PERFORMED ONLY IF ALL ROOTS HAVE
  7243. C              BEEN CALCULATED. IN THIS CASE THE NUMBER OF ROOTS IR IS
  7244. C              EQUAL TO THE ACTUAL DEGREE OF THE POLYNOMIAL (NORMALLY
  7245. C              IR=IC-1). THE MAXIMAL RELATIVE ERROR OF THE COEFFICIENT
  7246. C              VECTOR IS RECORDED IN RR(IR+1).
  7247. C
  7248. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  7249. C          SUBROUTINE PQFB     QUADRATIC FACTORIZATION OF A POLYNOMIAL
  7250. C                              BY BAIRSTOW ITERATION.
  7251. C
  7252. C       METHOD
  7253. C          THE ROOTS OF THE POLYNOMIAL ARE CALCULATED BY MEANS OF
  7254. C          SUCCESSIVE QUADRATIC FACTORIZATION PERFORMED BY BAIRSTOW
  7255. C          ITERATION. X**2 IS USED AS INITIAL GUESS FOR THE FIRST
  7256. C          QUADRATIC FACTOR, AND FURTHER EACH CALCULATED QUADRATIC
  7257. C          FACTOR IS USED AS INITIAL GUESS FOR THE NEXT ONE. AFTER
  7258. C          COMPUTATION OF ALL ROOTS THE COEFFICIENT VECTOR IS
  7259. C          CALCULATED AND COMPARED WITH THE GIVEN ONE.
  7260. C          FOR REFERENCE, SEE J. H. WILKINSON, THE EVALUATION OF THE
  7261. C          ZEROS OF ILL-CONDITIONED POLYNOMIALS (PART ONE AND TWO),
  7262. C          NUMERISCHE MATHEMATIK, VOL.1 (1959), PP.150-180.
  7263. C
  7264. C    ..................................................................
  7265. C
  7266.     SUBROUTINE PRBM(C,IC,RR,RC,POL,IR,IER)
  7267. C
  7268. C
  7269.     DIMENSION C(1),RR(1),RC(1),POL(1),Q(4)
  7270. C
  7271. C       TEST ON LEADING ZERO COEFFICIENTS
  7272.     EPS=1.E-3
  7273.     LIM=50
  7274.     IR=IC+1
  7275. 1    IR=IR-1
  7276.     IF(IR-1)42,42,2
  7277. 2    IF(C(IR))3,1,3
  7278. C
  7279. C       WORK UP ZERO ROOTS AND NORMALIZE REMAINING POLYNOMIAL
  7280. 3    IER=0
  7281.     J=IR
  7282.     L=0
  7283.     A=C(IR)
  7284.     DO 8 I=1,IR
  7285.     IF(L)4,4,7
  7286. 4    IF(C(I))6,5,6
  7287. 5    RR(I)=0.
  7288.     RC(I)=0.
  7289.     POL(J)=0.
  7290.     J=J-1
  7291.     GO TO 8
  7292. 6    L=1
  7293.     IST=I
  7294.     J=0
  7295. 7    J=J+1
  7296.     C(I)=C(I)/A
  7297.     POL(J)=C(I)
  7298.     CALL OVERFL(N)
  7299.     IF(N-2)42,8,8
  7300. 8    CONTINUE
  7301. C
  7302. C       START BAIRSTOW ITERATION
  7303.     Q1=0.
  7304.     Q2=0.
  7305. 9    IF(J-2)33,10,14
  7306. C
  7307. C       DEGREE OF RESTPOLYNOMIAL IS EQUAL TO ONE
  7308. 10    A=POL(1)
  7309.     RR(IST)=-A
  7310.     RC(IST)=0.
  7311.     IR=IR-1
  7312.     Q2=0.
  7313.     IF(IR-1)13,13,11
  7314. 11    DO 12 I=2,IR
  7315.     Q1=Q2
  7316.     Q2=POL(I+1)
  7317. 12    POL(I)=A*Q2+Q1
  7318. 13    POL(IR+1)=A+Q2
  7319.     GO TO 34
  7320. C       THIS IS BRANCH TO COMPARISON OF COEFFICIENT VECTORS C AND POL
  7321. C
  7322. C       DEGREE OF RESTPOLYNOMIAL IS GREATER THAN ONE
  7323. 14    DO 22 L=1,10
  7324.     N=1
  7325. 15    Q(1)=Q1
  7326.     Q(2)=Q2
  7327.     CALL PQFB(POL,J,Q,LIM,I)
  7328.     IF(I)16,24,23
  7329. 16    IF(Q1)18,17,18
  7330. 17    IF(Q2)18,21,18
  7331. 18    GO TO (19,20,19,21),N
  7332. 19    Q1=-Q1
  7333.     N=N+1
  7334.     GO TO 15
  7335. 20    Q2=-Q2
  7336.     N=N+1
  7337.     GO TO 15
  7338. 21    Q1=1.+Q1
  7339. 22    Q2=1.-Q2
  7340. C
  7341. C       ERROR EXIT DUE TO UNSATISFACTORY RESULTS OF FACTORIZATION
  7342.     IER=3
  7343.     IR=IR-J
  7344.     RETURN
  7345. C
  7346. C       WORK UP RESULTS OF QUADRATIC FACTORIZATION
  7347. 23    IER=1
  7348. 24    Q1=Q(1)
  7349.     Q2=Q(2)
  7350. C
  7351. C       PERFORM DIVISION OF FACTORIZED POLYNOMIAL BY QUADRATIC FACTOR
  7352.     B=0.
  7353.     A=0.
  7354.     I=J
  7355. 25    H=-Q1*B-Q2*A+POL(I)
  7356.     POL(I)=B
  7357.     B=A
  7358.     A=H
  7359.     I=I-1
  7360.     IF(I-2)26,26,25
  7361. 26    POL(2)=B
  7362.     POL(1)=A
  7363. C
  7364. C       MULTIPLY POLYNOMIAL WITH CALCULATED ROOTS BY QUADRATIC FACTOR
  7365.     L=IR-1
  7366.     IF(J-L)27,27,29
  7367. 27    DO 28 I=J,L
  7368. 28    POL(I-1)=POL(I-1)+POL(I)*Q2+POL(I+1)*Q1
  7369. 29    POL(L)=POL(L)+POL(L+1)*Q2+Q1
  7370.     POL(IR)=POL(IR)+Q2
  7371. C
  7372. C       CALCULATE ROOT-PAIR FROM QUADRATIC FACTOR X*X+Q2*X+Q1
  7373.     H=-.5*Q2
  7374.     A=H*H-Q1
  7375.     B=SQRT(ABS(A))
  7376.     IF(A)30,30,31
  7377. 30    RR(IST)=H
  7378.     RC(IST)=B
  7379.     IST=IST+1
  7380.     RR(IST)=H
  7381.     RC(IST)=-B
  7382.     GO TO 32
  7383. 31    B=H+SIGN(B,H)
  7384.     RR(IST)=Q1/B
  7385.     RC(IST)=0.
  7386.     IST=IST+1
  7387.     RR(IST)=B
  7388.     RC(IST)=0.
  7389. 32    IST=IST+1
  7390.     J=J-2
  7391.     GO TO 9
  7392. C
  7393. C       SHIFT BACK ELEMENTS OF POL BY 1 AND COMPARE VECTORS POL AND C
  7394. 33    IR=IR-1
  7395. 34    A=0.
  7396.     DO 38 I=1,IR
  7397.     Q1=C(I)
  7398.     Q2=POL(I+1)
  7399.     POL(I)=Q2
  7400.     IF(Q1)35,36,35
  7401. 35    Q2=(Q1-Q2)/Q1
  7402. 36    Q2=ABS(Q2)
  7403.     IF(Q2-A)38,38,37
  7404. 37    A=Q2
  7405. 38    CONTINUE
  7406.     I=IR+1
  7407.     POL(I)=1.
  7408.     RR(I)=A
  7409.     RC(I)=0.
  7410.     IF(IER)39,39,41
  7411. 39    IF(A-EPS)41,41,40
  7412. C
  7413. C       WARNING DUE TO POOR ACCURACY OF CALCULATED COEFFICIENT VECTOR
  7414. 40    IER=-1
  7415. 41    RETURN
  7416. C
  7417. C       ERROR EXIT DUE TO DEGENERATE POLYNOMIAL OR OVERFLOW IN
  7418. C       NORMALIZATION
  7419. 42    IER=2
  7420.     IR=0
  7421.     RETURN
  7422.     END
  7423. C
  7424.     FUNCTION PROB(NOPT,X,N1,N2)
  7425. C
  7426. C    THIS FUNCTION SUBPROGRAM COMPUTES THE PROBALITY CORRESPONDING
  7427. C    TO GIVEN VALUE OF A VARIANCE-RATIO, CHI-SQUARED, STUDENT'S,
  7428. C    OR STANDARDISED NORMAL DEVIATE, PARAMETERS ARE AS FOLLOWS:
  7429. C    NOPT= 1 FOR CHI-SQUARED (ONE-TAILED TEST)
  7430. C          2 FOR STUDENT'S T(TWO-TAILED TEST)
  7431. C          3    FOR STANDARDISED NORMAL DEVIATE (TWO-TAILED TEST)
  7432. C          4 FOR VARIANCE RATIO (ONE-TAILED)
  7433. C    X=      NUMERICAL VALUE OF TEST-STATISTIC
  7434. C        SPECIFIED BY NOPT
  7435. C    N1=    DEGEES OF FREEDOM (FOR NUMERATOR IF NOPT=4
  7436. C        SPECIFY ZERO IF NOPT=3)
  7437. C    N2=    DEGREES OF FREEDOM FOR DENOMINATOR IF NOPT=4
  7438. C        OTHERWISE SPECIFY ZERO)
  7439. C    NOTE-FOR ACCURACY SEE GOLDEN, WEISS AND DAWIS (1968)
  7440. C    EDUC. PHYSIOL. MEASUREMENT, VOL. 28, PP. 163-165
  7441. C
  7442. C
  7443.     AN1=N1
  7444.     AN2=N2
  7445. C
  7446. C    CONVERT TEST STATISTIC TO VARIANCE RATIO IF NECESSARY.
  7447. C
  7448.     GO TO (1,2,3,4), NOPT
  7449.     1    F=X/AN1
  7450.     AN2=1.0E+10
  7451.     GO TO 5
  7452.     2    F=X*X
  7453.     AN1=1.0
  7454.     AN2=N1
  7455.     GO TO 5
  7456.     3    Z=ABS(X)
  7457.     F=10.0
  7458.     GO TO 7
  7459.     4    F=X
  7460.     5    FF=F
  7461.     PROB=1.0
  7462.     IF(AN1*AN2*F.EQ.0.0) RETURN
  7463. C
  7464. C    TAKE RECIPROCAL IF F LESS THEN 1.
  7465. C
  7466.     IF(F.GE.1.0) GO TO 6
  7467.     FF=1.0/F
  7468.     TEMP=AN1
  7469.     AN1=AN2
  7470.     AN2=TEMP
  7471. C
  7472. C    NORMALISE VARIANCE RATIO
  7473. C
  7474.     6    A1=2.0/AN1/9.0
  7475.     A2=2.0/AN2/9.0
  7476.     Z=ABS(((1.0-A2)*FF**0.333333-1.0+A1)/SQRT(A2*FF**
  7477.      1    0.666666+A1))
  7478.     IF(AN2.LE.3.0) Z=Z*(1.0+0.08*Z**4/AN2**3)
  7479. C
  7480. C    COMPUTE PROBABILITY
  7481. C
  7482.     7    FZ=EXP(-Z*Z/2.0)*0.3989423
  7483.     W=1.0/(1.0+Z*0.2316419)
  7484.     PROB=FZ*W*((((1.330274*W-1.821256)*W+
  7485.      1    1.781478)*W-0.3565638)*W+0.3193815)
  7486.     IF(NOPT.EQ.3) PROB=2.0*PROB
  7487.     IF(F.LT.1.0) PROB=1.0-PROB
  7488.     RETURN
  7489.     END
  7490. C
  7491. C    ..................................................................
  7492. C
  7493. C       SUBROUTINE PROBT
  7494. C
  7495. C       PURPOSE
  7496. C          TO OBTAIN MAXIMUM LIKELIHOOD ESTIMATES FOR THE PARAMETERS A
  7497. C          AND B IN THE PROBIT EQUATION  Y = A + BX.  AN ITERATIVE
  7498. C          SCHEME IS USED.  THE INPUT TO THE SUBROUTINE CONSISTS OF K
  7499. C          DIFFERENT DOSAGE LEVELS APPLIED TO K GROUPS OF SUBJECTS, AND
  7500. C          THE NUMBER OF SUBJECTS IN EACH GROUP RESPONDING TO THE
  7501. C          RESPECTIVE DOSAGE OF THE DRUG.
  7502. C
  7503. C       USAGE
  7504. C          CALL PROBT (K,X,S,R,LOG,ANS,W1,W2,IER)
  7505. C
  7506. C       DESCRIPTION OF PARAMETERS
  7507. C          K   - NUMBER OF DIFFERENT DOSE LEVELS OF THE DRUG.  K SHOULD
  7508. C                BE GREATER THAN 2.
  7509. C          X   - INPUT VECTOR OF LENGTH K CONTAINING THE DOSE LEVEL OF
  7510. C                THE DRUG TESTED.  X MUST BE NON-NEGATIVE.
  7511. C          S   - INPUT VECTOR OF LENGTH K CONTAINING THE NUMBER OF
  7512. C                SUBJECTS TESTED AT EACH DOSE LEVEL
  7513. C          R   - INPUT VECTOR OF LENGTH K CONTAINING THE NUMBER OF
  7514. C                SUBJECTS AT EACH LEVEL RESPONDING TO THE DRUG
  7515. C          LOG - INPUT OPTION CODE
  7516. C                1- IF IT IS DESIRED TO CONVERT THE DOSE LEVELS TO
  7517. C                   COMMON LOGARITHMS.  THE DOSAGE LEVELS SHOULD BE
  7518. C                   NON-NULL IN THIS CASE.
  7519. C                0- IF NO CONVERSION IS DESIRED
  7520. C          ANS - OUTPUT VECTOR OF LENGTH 4 CONTAINING THE FOLLOWING
  7521. C                RESULTS
  7522. C                ANS(1)- ESTIMATE OF THE INTERCEPT CONSTANT A
  7523. C                ANS(2)- ESTIMATE OF THE PROBIT REGRESSION COEFFICIENT
  7524. C                        B
  7525. C                ANS(3)- CHI-SQUARED VALUE FOR A TEST OF SIGNIFICANCE
  7526. C                        OF THE FINAL PROBIT EQUATION
  7527. C                ANS(4)- DEGREES OF FREEDOM FOR THE CHI-SQUARE
  7528. C                        STATISTIC
  7529. C          W1  - OUTPUT VECTOR OF LENGTH K CONTAINING THE PROPORTIONS
  7530. C                OF SUBJECTS RESPONDING TO THE VARIOUS DOSE LEVELS OF
  7531. C                THE DRUG
  7532. C          W2  - OUTPUT VECTOR OF LENGTH K CONTAINING THE VALUES OF THE
  7533. C                EXPECTED PROBIT FOR THE VARIOUS LEVELS OF A DRUG
  7534. C          IER - 1 IF K IS NOT GREATER THAN 2.
  7535. C                2 IF SOME DOSAGE LEVEL IS NEGATIVE, OR IF THE INPUT
  7536. C                  OPTION CODE LOG IS 1 AND SOME DOSAGE LEVEL IS ZERO.
  7537. C                3 IF SOME ELEMENT OF S IS NOT POSITIVE.
  7538. C                4 IF NUMBER OF SUBJECTS RESPONDING IS GREATER THAN
  7539. C                NUMBER OF SUBJECTS TESTED.
  7540. C                ONLY IF IER IS ZERO IS A PROBIT ANALYSIS PERFORMED.
  7541. C                OTHERWISE, ANS, W1, AND W2 ARE SET TO ZERO.
  7542. C
  7543. C       REMARKS
  7544. C          THE PROGRAM WILL ITERATE ON THE PROBIT EQUATION UNTIL TWO
  7545. C          SUCCESSIVE SOLUTIONS PRODUCE CHANGES OF LESS THAN 10**(-7).
  7546. C
  7547. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  7548. C          NDTR
  7549. C          NDTRI
  7550. C
  7551. C       METHOD
  7552. C          REFER TO D. J. FINNEY, PROBIT ANALYSIS. 2ND ED. (CAMBRIDGE,
  7553. C          1952)
  7554. C
  7555. C    ..................................................................
  7556. C
  7557.     SUBROUTINE PROBT (K,X,S,R,LOG,ANS,W1,W2,IER)
  7558. C
  7559.     DIMENSION X(1),S(1),R(1),ANS(1),W1(1),W2(1)
  7560. C
  7561. C       TEST WHETHER LOG CONVERSION IS NEEDED
  7562. C
  7563.     IER=0
  7564.     IF(K-2)5,5,7
  7565. 5    IER = 1
  7566.     GO TO 90
  7567. 7    DO 8 I=1,K
  7568.     IF(X(I))12,8,8
  7569. 8    CONTINUE
  7570.     IF(LOG-1) 16,10,16
  7571. 10    DO 15 I=1,K
  7572.     IF(X(I))12,12,14
  7573. 12    IER=2
  7574.     GO TO 90
  7575. 14    X(I)= ALOG10(X(I))
  7576. 15    CONTINUE
  7577. C
  7578. C       COMPUTE PROPORTIONS OF OBJECTS RESPONDING
  7579. C
  7580. 16    DO 18 I=1,K
  7581.     IF(S(I)-R(I)) 17,18,18
  7582. 17    IER=4
  7583.     GO TO 90
  7584. 18    CONTINUE
  7585. 20    DO 23 I=1,K
  7586.     IF(S(I))21,21,22
  7587. 21    IER=3
  7588.     GO TO 90
  7589. 22    W1(I)=R(I)/S(I)
  7590. 23    CONTINUE
  7591. C
  7592. C       COMPUTE INITIAL ESTIMATES OF INTERCEPT AND PROBIT REGRESSION
  7593. C       COEFFICIENT
  7594. C
  7595.     WN=0.0
  7596.     XBAR=0.0
  7597.     SNWY=0.0
  7598.     SXX=0.0
  7599.     SXY=0.0
  7600. C
  7601.     DO 30 I=1,K
  7602.     P=W1(I)
  7603.     IF(P) 30, 30, 24
  7604. 24    IF(P-1.0) 25, 30, 30
  7605. 25    WN=WN+1.0
  7606. C
  7607.     CALL NDTRI (P,Z,D,IER)
  7608. C
  7609.     Z=Z+5.0
  7610.     XBAR=XBAR+X(I)
  7611.     SNWY=SNWY+Z
  7612.     SXX=SXX+X(I)**2
  7613.     SXY=SXY+X(I)*Z
  7614. 30    CONTINUE
  7615. C
  7616.     B=(SXY-(XBAR*SNWY)/WN)/(SXX-(XBAR*XBAR)/WN)
  7617.     XBAR=XBAR/WN
  7618.     SNWY=SNWY/WN
  7619.     A=SNWY-B*XBAR
  7620.     DD=0.0
  7621. C
  7622. C       COMPUTE EXPECTED PROBIT
  7623. C
  7624.     DO 31 I=1,K
  7625. 31    W2(I)=A+B*X(I)
  7626. C
  7627. 33    SNW=0.0
  7628.     SNWX=0.0
  7629.     SNWY=0.0
  7630.     SNWXX=0.0
  7631.     SNWXY=0.0
  7632.     DO 50 I=1,K
  7633.     Y=W2(I)
  7634. C
  7635. C       FIND A WEIGHTING COEFFICIENT FOR PROBIT ANALYSIS
  7636. C
  7637.     D=Y-5.0
  7638. C
  7639.     CALL NDTR (D,P,Z)
  7640. C
  7641.     Q=1.0-P
  7642.     W=(Z*Z)/(P*Q)
  7643. C
  7644. C       COMPUTE WORKING PROBIT
  7645. C
  7646.     IF(Y-5.0) 35, 35, 40
  7647. 35    WP=(Y-P/Z)+W1(I)/Z
  7648.     GO TO 45
  7649. 40    WP=(Y+Q/Z)-(1.0-W1(I))/Z
  7650. C
  7651. C       SUM INTERMEDIATE RESULTS
  7652. C
  7653. 45    WN=W*S(I)
  7654.     SNW=SNW+WN
  7655.     SNWX=SNWX+WN*X(I)
  7656.     SNWY=SNWY+WN*WP
  7657.     SNWXX=SNWXX+WN*X(I)**2
  7658. 50    SNWXY=SNWXY+WN*X(I)*WP
  7659. C
  7660. C       COMPUTE NEW ESTIMATES OF INTERCEPT AND COEFFICIENT
  7661. C
  7662.     XBAR=SNWX/SNW
  7663. C
  7664.     SXX=SNWXX-(SNWX)*(SNWX)/SNW
  7665.     SXY=SNWXY-(SNWX)*(SNWY)/SNW
  7666.     B=SXY/SXX
  7667. C
  7668.     A=SNWY/SNW-B*XBAR
  7669. C
  7670. C       EXAMINE THE CHANGES IN Y
  7671. C
  7672.     SXX=0.0
  7673.     DO 60 I=1,K
  7674.     Y=A+B*X(I)
  7675.     D=W2(I)-Y
  7676.     SXX=SXX+D*D
  7677. 60    W2(I)=Y
  7678.     IF(( ABS(DD-SXX))-(1.0E-7)) 65, 65, 63
  7679. 63    DD=SXX
  7680.     GO TO 33
  7681. C
  7682. C       STORE INTERCEPT AND COEFFICIENT
  7683. C
  7684. 65    ANS(1)=A
  7685.     ANS(2)=B
  7686. C
  7687. C       COMPUTE CHI-SQUARE
  7688. C
  7689.     ANS(3)=0.0
  7690.     DO 70 I=1,K
  7691.     Y=W2(I)-5.0
  7692. C
  7693.     CALL NDTR (Y,P,D)
  7694. C
  7695.     AA=R(I)-S(I)*P
  7696.     DD=S(I)*P*(1.0-P)
  7697. 70    ANS(3)=ANS(3)+AA*AA/DD
  7698. C
  7699. C       DEGREES OF FREEDOM FOR CHI-SQUARE
  7700. C
  7701.     ANS(4)=K-2
  7702. C
  7703. 80    RETURN
  7704. 90    DO 100 I=1,K
  7705.     W1(I)=0.0
  7706. 100    W2(I)=0.0
  7707.     DO 110 I=1,4
  7708. 110    ANS(I)=0.0
  7709.     GO TO 80
  7710.     END
  7711. C
  7712. C    ..................................................................
  7713. C
  7714. C       SUBROUTINE PRQD
  7715. C
  7716. C       PURPOSE
  7717. C          CALCULATE ALL REAL AND COMPLEX ROOTS OF A GIVEN POLYNOMIAL
  7718. C          WITH REAL COEFFICIENTS.
  7719. C
  7720. C       USAGE
  7721. C          CALL PRQD(C,IC,Q,E,POL,IR,IER)
  7722. C
  7723. C       DESCRIPTION OF PARAMETERS
  7724. C          C     - COEFFICIENT VECTOR OF GIVEN POLYNOMIAL
  7725. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  7726. C                  THE GIVEN COEFFICIENT VECTOR GETS DIVIDED BY THE
  7727. C                  LAST NONZERO TERM
  7728. C          IC    - DIMENSION OF VECTOR C
  7729. C          Q     - WORKING STORAGE OF DIMENSION IC
  7730. C                  ON RETURN Q CONTAINS REAL PARTS OF ROOTS
  7731. C          E     - WORKING STORAGE OF DIMENSION IC
  7732. C                  ON RETURN E CONTAINS COMPLEX PARTS OF ROOTS
  7733. C          POL   - WORKING STORAGE OF DIMENSION IC
  7734. C                  ON RETURN POL CONTAINS THE COEFFICIENTS OF THE
  7735. C                  POLYNOMIAL WITH CALCULATED ROOTS
  7736. C                  THIS RESULTING COEFFICIENT VECTOR HAS DIMENSION IR+1
  7737. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  7738. C          IR    - NUMBER OF CALCULATED ROOTS
  7739. C                  NORMALLY IR IS EQUAL TO DIMENSION IC MINUS ONE
  7740. C          IER   - RESULTING ERROR PARAMETER. SEE REMARKS
  7741. C
  7742. C       REMARKS
  7743. C          THE REAL PART OF THE ROOTS IS STORED IN Q(1) UP TO Q(IR)
  7744. C          CORRESPONDING COMPLEX PARTS ARE STORED IN E(1) UP TO E(IR).
  7745. C          IER = 0 MEANS NO ERRORS
  7746. C          IER = 1 MEANS NO CONVERGENCE WITH FEASIBLE TOLERANCE
  7747. C          IER = 2 MEANS POLYNOMIAL IS DEGENERATE (CONSTANT OR ZERO)
  7748. C          IER = 3 MEANS SUBROUTINE WAS ABANDONED DUE TO ZERO DIVISOR
  7749. C          IER = 4 MEANS THERE EXISTS NO S-FRACTION
  7750. C          IER =-1 MEANS CALCULATED COEFFICIENT VECTOR REVEALS POOR
  7751. C                  ACCURACY OF THE CALCULATED ROOTS.
  7752. C                  THE CALCULATED COEFFICIENT VECTOR HAS LESS THAN
  7753. C                  3 CORRECT DIGITS.
  7754. C          THE FINAL COMPARISON BETWEEN GIVEN AND CALCULATED
  7755. C          COEFFICIENT VECTOR IS PERFORMED ONLY IF ALL ROOTS HAVE BEEN
  7756. C          CALCULATED.
  7757. C          THE MAXIMAL RELATIVE ERROR OF THE COEFFICIENT VECTOR IS
  7758. C          RECORDED IN Q(IR+1).
  7759. C
  7760. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  7761. C          NONE
  7762. C
  7763. C       METHOD
  7764. C          THE ROOTS OF THE POLYNOMIAL ARE CALCULATED BY MEANS OF
  7765. C          THE QUOTIENT-DIFFERENCE ALGORITHM WITH DISPLACEMENT.
  7766. C          REFERENCE
  7767. C          H.RUTISHAUSER, DER QUOTIENTEN-DIFFERENZEN-ALGORITHMUS,
  7768. C          BIRKHAEUSER, BASEL/STUTTGART, 1957.
  7769. C
  7770. C    ..................................................................
  7771. C
  7772. c    SUBROUTINE PRQD(C,IC,Q,E,POL,IR,IER)
  7773. cC
  7774. cC     DIMENSIONED DUMMY VARIABLES
  7775. c    DIMENSION E(1),Q(1),C(1),POL(1)
  7776. cC
  7777. C       NORMALIZATION OF GIVEN POLYNOM
  7778.       SUBROUTINE PRQD(C,IC,Q,E,POL,IR,IER)
  7779.       DIMENSION E(1),Q(1),C(1),POL(1)
  7780.       IER=0
  7781.       IR=IC
  7782.       EPS=1.E-6
  7783.       TOL=1.E-3
  7784.       LIMIT=10*IC
  7785.       KOUNT=0
  7786.     1 IF(IR-1)79,79,2
  7787.     2 IF(C(IR))4,3,4
  7788.     3 IR=IR-1
  7789.       GOTO 1
  7790.     4 O=1./C(IR)
  7791.       IEND=IR-1
  7792.       ISTA=1
  7793.       NSAV=IR+1
  7794.       JBEG=1
  7795.       DO 9 I=1,IR
  7796.       J=NSAV-I
  7797.       IF(C(I))7,5,7
  7798.     5 GOTO(6,8),JBEG
  7799.     6 NSAV=NSAV+1
  7800.       Q(ISTA)=0.
  7801.       E(ISTA)=0.
  7802.       ISTA=ISTA+1
  7803.       GOTO 9
  7804.     7 JBEG=2
  7805.     8 Q(J)=C(I)*O
  7806.       C(I)=Q(J)
  7807.     9 CONTINUE
  7808.       ESAV=0.
  7809.       Q(ISTA)=0.
  7810.    10 NSAV=IR
  7811.       EXPT=IR-ISTA
  7812.       E(ISTA)=EXPT
  7813.       DO 11 I=ISTA,IEND
  7814.       EXPT=EXPT-1.0
  7815.       POL(I+1)=EPS*ABS(Q(I+1))+EPS
  7816.    11 E(I+1)=Q(I+1)*EXPT
  7817.       IF(ISTA-IEND)12,20,60
  7818.    12 JEND=IEND-1
  7819.       DO 19 I=ISTA,JEND
  7820.       IF(I-ISTA)13,16,13
  7821.    13 IF(ABS(E(I))-POL(I+1))14,14,16
  7822.    14 NSAV=I
  7823.       DO 15 K=I,JEND
  7824.       IF(ABS(E(K))-POL(K+1))15,15,80
  7825.    15 CONTINUE
  7826.       GOTO 21
  7827.    16 DO 19 K=I,IEND
  7828.       E(K+1)=E(K+1)/E(I)
  7829.       Q(K+1)=E(K+1)-Q(K+1)
  7830.       IF(K-I)18,17,18
  7831.    17 IF(ABS(Q(I+1))-POL(I+1))80,80,19
  7832.    18 Q(K+1)=Q(K+1)/Q(I+1)
  7833.       POL(K+1)=POL(K+1)/ABS(Q(I+1))
  7834.       E(K)=Q(K+1)-E(K)
  7835.    19 CONTINUE
  7836.    20 Q(IR)=-Q(IR)
  7837.    21 E(ISTA)=0.
  7838.       NRAN=NSAV-1
  7839.    22 E(NRAN+1)=0.
  7840.       IF(NRAN-ISTA)24,23,31
  7841.    23 Q(ISTA+1)=Q(ISTA+1)+EXPT
  7842.       E(ISTA+1)=0.
  7843.    24 E(ISTA)=ESAV
  7844.       IF(IR-NSAV)60,60,25
  7845.    25 ISTA=NSAV
  7846.       ESAV=E(ISTA)
  7847.       GOTO 10
  7848.    26 P=P+EXPT
  7849.       IF(O)27,28,28
  7850.    27 Q(NRAN)=P
  7851.       Q(NRAN+1)=P
  7852.       E(NRAN)=T
  7853.       E(NRAN+1)=-T
  7854.       GOTO 29
  7855.    28 Q(NRAN)=P-T
  7856.       Q(NRAN+1)=P+T
  7857.       E(NRAN)=0.
  7858.    29 NRAN=NRAN-2
  7859.       GOTO 22
  7860.    30 Q(NRAN+1)=EXPT+P
  7861.       NRAN=NRAN-1
  7862.       GOTO 22
  7863.    31 JBEG=ISTA+1
  7864.       JEND=NRAN-1
  7865.       TEPS=EPS
  7866.       TDELT=1.E-2
  7867.    32 KOUNT=KOUNT+1
  7868.       P=Q(NRAN+1)
  7869.       R=ABS(E(NRAN))
  7870.       IF(R-TEPS)30,30,33
  7871.    33 S=ABS(E(JEND))
  7872.       IF(S-R)38,38,34
  7873.    34 IF(R-TDELT)36,35,35
  7874.    35 P=0.
  7875.    36 O=P
  7876.       DO 37 J=JBEG,NRAN
  7877.       Q(J)=Q(J)+E(J)-E(J-1)-O
  7878.       IF(ABS(Q(J))-POL(J))81,81,37
  7879.    37 E(J)=Q(J+1)*E(J)/Q(J)
  7880.       Q(NRAN+1)=-E(NRAN)+Q(NRAN+1)-O
  7881.       GOTO 54
  7882.    38 P=0.5*(Q(NRAN)+E(NRAN)+Q(NRAN+1))
  7883.       O=P*P-Q(NRAN)*Q(NRAN+1)
  7884.       T=SQRT(ABS(O))
  7885.       IF(S-TEPS)26,26,39
  7886.    39 IF(O)43,40,40
  7887.    40 IF(P)42,41,41
  7888.    41 T=-T
  7889.    42 P=P+T
  7890.       R=S
  7891.       GOTO 34
  7892.    43 IF(S-TDELT)44,35,35
  7893.    44 O=Q(JBEG)+E(JBEG)-P
  7894.       IF(ABS(O)-POL(JBEG))81,81,45
  7895.    45 T=(T/O)**2
  7896.       U=E(JBEG)*Q(JBEG+1)/(O*(1.+T))
  7897.       V=O+U
  7898.       KOUNT=KOUNT+2
  7899.       DO 53 J=JBEG,NRAN
  7900.       O=Q(J+1)+E(J+1)-U-P
  7901.       IF(ABS(V)-POL(J))46,46,49
  7902.    46 IF(J-NRAN)81,47,81
  7903.    47 EXPT=EXPT+P
  7904.       IF(ABS(E(JEND))-TOL)48,48,81
  7905.    48 P=0.5*(V+O-E(JEND))
  7906.       O=P*P-(V-U)*(O-U*T-O*W*(1.+T)/Q(JEND))
  7907.       T=SQRT(ABS(O))
  7908.       GOTO 26
  7909.    49 IF(ABS(O)-POL(J+1))46,46,50
  7910.    50 W=U*O/V
  7911.       T=T*(V/O)**2
  7912.       Q(J)=V+W-E(J-1)
  7913.       U=0.
  7914.       IF(J-NRAN)51,52,52
  7915.    51 U=Q(J+2)*E(J+1)/(O*(1.+T))
  7916.    52 V=O+U-W
  7917.       IF(ABS(Q(J))-POL(J))81,81,53
  7918.    53 E(J)=W*V*(1.+T)/Q(J)
  7919.       Q(NRAN+1)=V-E(NRAN)
  7920.    54 EXPT=EXPT+P
  7921.       TEPS=TEPS*1.1
  7922.       TDELT=TDELT*1.1
  7923.       IF(KOUNT-LIMIT)32,55,55
  7924.    55 IER=1
  7925.    56 IEND=NSAV-NRAN-1
  7926.       E(ISTA)=ESAV
  7927.       IF(IEND)59,59,57
  7928.    57 DO 58 I=1,IEND
  7929.       J=ISTA+I
  7930.       K=NRAN+1+I
  7931.       E(J)=E(K)
  7932.    58 Q(J)=Q(K)
  7933.    59 IR=ISTA+IEND
  7934.    60 IR=IR-1
  7935.       IF(IR)78,78,61
  7936.    61 DO 62 I=1,IR
  7937.       Q(I)=Q(I+1)
  7938.    62 E(I)=E(I+1)
  7939.       POL(IR+1)=1.
  7940.       IEND=IR-1
  7941.       JBEG=1
  7942.       DO 69 J=1,IR
  7943.       ISTA=IR+1-J
  7944.       O=0.
  7945.       P=Q(ISTA)
  7946.       T=E(ISTA)
  7947.       IF(T)65,63,65
  7948.    63 DO 64 I=ISTA,IR
  7949.       POL(I)=O-P*POL(I+1)
  7950.    64 O=POL(I+1)
  7951.       GOTO 69
  7952.    65 GOTO(66,67),JBEG
  7953.    66 JBEG=2
  7954.       POL(ISTA)=0.
  7955.       GOTO 69
  7956.    67 JBEG=1
  7957.       U=P*P+T*T
  7958.       P=P+P
  7959.       DO 68 I=ISTA,IEND
  7960.       POL(I)=O-P*POL(I+1)+U*POL(I+2)
  7961.    68 O=POL(I+1)
  7962.       POL(IR)=O-P
  7963.    69 CONTINUE
  7964.       IF(IER)78,70,78
  7965.    70 P=0.
  7966.       DO 75 I=1,IR
  7967.       IF(C(I))72,71,72
  7968.    71 O=ABS(POL(I))
  7969.       GOTO 73
  7970.    72 O=ABS((POL(I)-C(I))/C(I))
  7971.    73 IF(P-O)74,75,75
  7972.    74 P=O
  7973.    75 CONTINUE
  7974.       IF(P-TOL)77,76,76
  7975.    76 IER=-1
  7976.    77 Q(IR+1)=P
  7977.       E(IR+1)=0.
  7978.    78 RETURN
  7979.    79 IER=2
  7980.       IR=0
  7981.       RETURN
  7982.    80 IER=4
  7983.       IR=ISTA
  7984.       GOTO 60
  7985.    81 IER=3
  7986.       GOTO 56
  7987.       END
  7988. C
  7989. C    ..................................................................
  7990. C
  7991. C       SUBROUTINE PSUB
  7992. C
  7993. C       PURPOSE
  7994. C          SUBTRACT ONE POLYNOMIAL FROM ANOTHER
  7995. C
  7996. C       USAGE
  7997. C          CALL PSUB(Z,IDIMZ,X,IDIMX,Y,IDIMY)
  7998. C
  7999. C       DESCRIPTION OF PARAMETERS
  8000. C          Z     - VECTOR OF RESULTANT COEFFICIENTS, ORDERED FROM
  8001. C                  SMALLEST TO LARGEST POWER
  8002. C          IDIMZ - DIMENSION OF Z (CALCULATED)
  8003. C          X     - VECTOR OF COEFFICIENTS FOR FIRST POLYNOMIAL, ORDERED
  8004. C                  FROM SMALLEST TO LARGEST POWER
  8005. C          IDIMX - DIMENSION OF X (DEGREE IS IDIMX-1)
  8006. C          Y     - VECTOR OF COEFFICIENTS FOR SECOND POLYNOMIAL,
  8007. C                  ORDERED FROM SMALLEST TO LARGEST POWER
  8008. C          IDIMY - DIMENSION OF Y (DEGREE IS IDIMY-1)
  8009. C
  8010. C       REMARKS
  8011. C          VECTOR Z MAY BE IN SAME LOCATION AS EITHER VECTOR X OR
  8012. C          VECTOR Y ONLY IF THE DIMENSION OF THAT VECTOR IS NOT LESS
  8013. C          THAN THE OTHER INPUT VECTOR
  8014. C          THE RESULTANT POLYNOMIAL MAY HAVE TRAILING ZERO COEFFICIENTS
  8015. C
  8016. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8017. C          NONE
  8018. C
  8019. C       METHOD
  8020. C          DIMENSION OF RESULTANT VECTOR IDIMZ IS CALCULATED AS THE
  8021. C          LARGER OF THE TWO INPUT VECTOR DIMENSIONS. COEFFICIENTS IN
  8022. C          VECTOR Y ARE THEN SUBTRACTED FROM CORRESPONDING COEFFICIENTS
  8023. C          IN VECTOR X.
  8024. C
  8025. C    ..................................................................
  8026. C
  8027.     SUBROUTINE PSUB(Z,IDIMZ,X,IDIMX,Y,IDIMY)
  8028.     DIMENSION Z(1),X(1),Y(1)
  8029. C
  8030. C    TEST DIMENSIONS OF SUMMANDS
  8031. C
  8032.     NDIM=IDIMX
  8033.     IF (IDIMX-IDIMY) 10,20,20
  8034. 10    NDIM=IDIMY
  8035. 20    IF (NDIM) 90,90,30
  8036. 30    DO 80 I=1,NDIM
  8037.     IF (I-IDIMX) 40,40,60
  8038. 40    IF (I-IDIMY) 50,50,70
  8039. 50    Z(I)=X(I)-Y(I)
  8040.     GO TO 80
  8041. 60    Z(I)=-Y(I)
  8042.     GO TO 80
  8043. 70    Z(I)=X(I)
  8044. 80    CONTINUE
  8045. 90    IDIMZ=NDIM
  8046.     RETURN
  8047.     END
  8048. C
  8049. C    ..................................................................
  8050. C
  8051. C       SUBROUTINE PVAL
  8052. C
  8053. C       PURPOSE
  8054. C          EVALUATE A POLYNOMIAL FOR A GIVEN VALUE OF THE VARIABLE
  8055. C
  8056. C       USAGE
  8057. C          CALL PVAL(RES,ARG,X,IDIMX)
  8058. C
  8059. C       DESCRIPTION OF PARAMETERS
  8060. C          RES    - RESULTANT VALUE OF POLYNOMIAL
  8061. C          ARG    - GIVEN VALUE OF THE VARIABLE
  8062. C          X      - VECTOR OF COEFFICIENTS, ORDERED FROM SMALLEST TO
  8063. C                   LARGEST POWER
  8064. C          IDIMX  - DIMENSION OF X
  8065. C
  8066. C       REMARKS
  8067. C          NONE
  8068. C
  8069. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8070. C          NONE
  8071. C
  8072. C       METHOD
  8073. C          EVALUATION IS DONE BY MEANS OF NESTED MULTIPLICATION
  8074. C
  8075. C    ..................................................................
  8076. C
  8077.     SUBROUTINE PVAL(RES,ARG,X,IDIMX)
  8078.     DIMENSION X(1)
  8079. C
  8080.     RES=0.
  8081.     J=IDIMX
  8082. 1    IF(J)3,3,2
  8083. 2    RES=RES*ARG+X(J)
  8084.     J=J-1
  8085.     GO TO 1
  8086. 3    RETURN
  8087.     END
  8088.     FUNCTION PVALUE(GIJ,M,N)
  8089.     PVALUE=1
  8090.     G=ABS(GIJ)
  8091.     IF(G.LE.0)GOTO 999
  8092.     IF(M.GT.0)GOTO 10
  8093.     G=G*G
  8094.     M=1
  8095. 10    P=1.
  8096.     IF(G.LT.1.)GOTO 20
  8097.     IA=M
  8098.     IB=N
  8099.     F=G
  8100.     GOTO 30
  8101. 20    IA=N
  8102.     IB=M
  8103.     F=1./G
  8104. 30    B=IB
  8105.     A1=2./(9.*IA)
  8106.     B1=2./(9.*IB)
  8107.     Z=ABS((1.-B1)*F**0.333333-1.+A1)
  8108.     Z=Z/SQRT(B1*F**0.666667+A1)
  8109.     IF(IB.LT.4.) Z=Z*(1.+0.08*Z**4/B**3)
  8110.     P=(1.+Z*(0.196854+Z*(0.115194+Z*(0.000344+Z*0.019527))))**4
  8111.     P=0.5/P
  8112.     IF(G.LT.1.)P=1.-P
  8113.     PVALUE=AINT(100000.*P)/100000.
  8114. 999    RETURN
  8115.     END
  8116. C
  8117. C
  8118. C    ..................................................................
  8119. C
  8120. C       SUBROUTINE PVSUB
  8121. C
  8122. C       PURPOSE
  8123. C          SUBSTITUTE VARIABLE OF A POLYNOMIAL BY ANOTHER POLYNOMIAL
  8124. C
  8125. C       USAGE
  8126. C          CALL PVSUB(Z,IDIMZ,X,IDIMX,Y,IDIMY,WORK1,WORK2)
  8127. C
  8128. C       DESCRIPTION OF PARAMETERS
  8129. C          Z     - VECTOR OF COEFFICIENTS FOR RESULTANT POLYNOMIAL,
  8130. C                  ORDERED FROM SMALLEST TO LARGEST POWER
  8131. C          IDIMZ - DIMENSION OF Z
  8132. C          X     - VECTOR OF COEFFICIENTS FOR ORIGINAL POLYNOMIAL,
  8133. C                  ORDERED FROM SMALLEST TO LARGEST POWER
  8134. C          IDIMX - DIMENSION OF X
  8135. C          Y     - VECTOR OF COEFFICIENTS FOR POLYNOMIAL WHICH IS
  8136. C                  SUBSTITUTED FOR VARIABLE, ORDERED FROM SMALLEST TO
  8137. C                  LARGEST POWER
  8138. C          IDIMY - DIMENSION OF Y
  8139. C          WORK1 - WORKING STORAGE ARRAY (SAME DIMENSION AS Z)
  8140. C          WORK2 - WORKING STORAGE ARRAY (SAME DIMENSION AS Z)
  8141. C
  8142. C       REMARKS
  8143. C          NONE
  8144. C
  8145. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8146. C          PMPY
  8147. C          PADDM
  8148. C          PCLA
  8149. C
  8150. C       METHOD
  8151. C          VARIABLE OF POLYNOMIAL X IS SUBSTITUTED BY POLYNOMIAL Y
  8152. C          TO FORM POLYNOMIAL Z. DIMENSION OF NEW POLYNOMIAL IS
  8153. C          (IDIMX-1)*(IDIMY-1)+1. SUBROUTINE REQUIRES TWO WORK AREAS
  8154. C
  8155. C    ..................................................................
  8156. C
  8157.     SUBROUTINE PVSUB(Z,IDIMZ,X,IDIMX,Y,IDIMY,WORK1,WORK2)
  8158.     DIMENSION Z(1),X(1),Y(1),WORK1(1),WORK2(1)
  8159. C
  8160. C    TEST OF DIMENSIONS
  8161. C
  8162.     IF (IDIMX-1) 1,3,3
  8163. 1    IDIMZ=0
  8164. 2    RETURN
  8165. C
  8166. 3    IDIMZ=1
  8167.     Z(1)=X(1)
  8168.     IF (IDIMY*IDIMX-IDIMY) 2,2,4
  8169. 4    IW1=1
  8170.     WORK1(1)=1.
  8171. C
  8172.     DO 5 I=2,IDIMX
  8173.     CALL PMPY(WORK2,IW2,Y,IDIMY,WORK1,IW1)
  8174.     CALL PCLA(WORK1,IW1,WORK2,IW2)
  8175.     FACT=X(I)
  8176.     CALL PADDM(Z,IDIMR,Z,IDIMZ,FACT,WORK1,IW1)
  8177.     IDIMZ=IDIMR
  8178. 5    CONTINUE
  8179.     GO TO 2
  8180.     END
  8181. C
  8182. C    ..................................................................
  8183. C
  8184. C       SUBROUTINE QA10
  8185. C
  8186. C       PURPOSE
  8187. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X)/SQRT(X), SUMMED OVER X
  8188. C                              FROM 0 TO INFINITY).
  8189. C
  8190. C       USAGE
  8191. C          CALL QA10 (FCT,Y)
  8192. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8193. C
  8194. C       DESCRIPTION OF PARAMETERS
  8195. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8196. C          Y      - THE RESULTING INTEGRAL VALUE.
  8197. C
  8198. C       REMARKS
  8199. C          NONE
  8200. C
  8201. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8202. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8203. C          BY THE USER.
  8204. C
  8205. C       METHOD
  8206. C          EVALUATION IS DONE BY MEANS OF 10-POINT GENERALIZED GAUSS-
  8207. C          LAGUERRE QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY,
  8208. C          WHENEVER FCT(X) IS A POLYNOMIAL UP TO DEGREE 19.
  8209. C          FOR REFERENCE, SEE
  8210. C          CONCUS/CASSATT/JAEHNIG/MELBY, TABLES FOR THE EVALUATION OF
  8211. C          INTEGRAL(X**BETA*EXP(-X)*F(X), SUMMED OVER X FROM 0 TO
  8212. C          INFINITY) BY GAUSS-LAGUERRE QUADRATURE, MTAC, VOL.17,
  8213. C          ISS.83 (1963), PP.245-256.
  8214. C
  8215. C    ..................................................................
  8216. C
  8217.     SUBROUTINE QA10(FCT,Y)
  8218. C
  8219. C
  8220.     X=29.02495
  8221.     Y=.4458787E-12*FCT(X)
  8222.     X=21.19389
  8223.     Y=Y+.8798682E-9*FCT(X)
  8224.     X=15.56116
  8225.     Y=Y+.2172139E-6*FCT(X)
  8226.     X=11.20813
  8227.     Y=Y+.1560511E-4*FCT(X)
  8228.     X=7.777439
  8229.     Y=Y+.0004566773*FCT(X)
  8230.     X=5.084908
  8231.     Y=Y+.006487547*FCT(X)
  8232.     X=3.022513
  8233.     Y=Y+.04962104*FCT(X)
  8234.     X=1.522944
  8235.     Y=Y+.2180344*FCT(X)
  8236.     X=.5438675
  8237.     Y=Y+.5733510*FCT(X)
  8238.     X=.06019206
  8239.     Y=Y+.9244873*FCT(X)
  8240.     RETURN
  8241.     END
  8242. C
  8243. C    ..................................................................
  8244. C
  8245. C       SUBROUTINE QA2
  8246. C
  8247. C       PURPOSE
  8248. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X)/SQRT(X), SUMMED OVER X
  8249. C                              FROM 0 TO INFINITY).
  8250. C
  8251. C       USAGE
  8252. C          CALL QA2 (FCT,Y)
  8253. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8254. C
  8255. C       DESCRIPTION OF PARAMETERS
  8256. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8257. C          Y      - THE RESULTING INTEGRAL VALUE.
  8258. C
  8259. C       REMARKS
  8260. C          NONE
  8261. C
  8262. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8263. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8264. C          BY THE USER.
  8265. C
  8266. C       METHOD
  8267. C          EVALUATION IS DONE BY MEANS OF 2-POINT GENERALIZED GAUSSIAN-
  8268. C          LAGUERRE QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY,
  8269. C          WHENEVER FCT(X) IS A POLYNOMIAL UP TO DEGREE 3.
  8270. C          FOR REFERENCE, SEE
  8271. C          CONCUS/CASSATT/JAEHNIG/MELBY, TABLES FOR THE EVALUATION OF
  8272. C          INTEGRAL(X**BETA*EXP(-X)*F(X), SUMMED OVER X FROM 0 TO
  8273. C          INFINITY) BY GAUSS-LAGUERRE QUADRATURE, MTAC, VOL.17,
  8274. C          ISS.83 (1963), PP.245-256.
  8275. C
  8276. C    ..................................................................
  8277. C
  8278.     SUBROUTINE QA2(FCT,Y)
  8279. C
  8280. C
  8281.     X=2.724745
  8282.     Y=.1626257*FCT(X)
  8283.     X=.2752551
  8284.     Y=Y+1.609828*FCT(X)
  8285.     RETURN
  8286.     END
  8287. C
  8288. C    ..................................................................
  8289. C
  8290. C       SUBROUTINE QA3
  8291. C
  8292. C       PURPOSE
  8293. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X)/SQRT(X), SUMMED OVER X
  8294. C                              FROM 0 TO INFINITY).
  8295. C
  8296. C       USAGE
  8297. C          CALL QA3 (FCT,Y)
  8298. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8299. C
  8300. C       DESCRIPTION OF PARAMETERS
  8301. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8302. C          Y      - THE RESULTING INTEGRAL VALUE.
  8303. C
  8304. C       REMARKS
  8305. C          NONE
  8306. C
  8307. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8308. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8309. C          BY THE USER.
  8310. C
  8311. C       METHOD
  8312. C          EVALUATION IS DONE BY MEANS OF 3-POINT GENERALIZED GAUSSIAN-
  8313. C          LAGUERRE QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY,
  8314. C          WHENEVER FCT(X) IS A POLYNOMIAL UP TO DEGREE 5.
  8315. C          FOR REFERENCE, SEE
  8316. C          CONCUS/CASSATT/JAEHNIG/MELBY, TABLES FOR THE EVALUATION OF
  8317. C          INTEGRAL(X**BETA*EXP(-X)*F(X), SUMMED OVER X FROM 0 TO
  8318. C          INFINITY) BY GAUSS-LAGUERRE QUADRATURE, MTAC, VOL.17,
  8319. C          ISS.83 (1963), PP.245-256.
  8320. C
  8321. C    ..................................................................
  8322. C
  8323.     SUBROUTINE QA3(FCT,Y)
  8324. C
  8325. C
  8326.     X=5.525344
  8327.     Y=.009060020*FCT(X)
  8328.     X=1.784493
  8329.     Y=Y+.3141346*FCT(X)
  8330.     X=.1901635
  8331.     Y=Y+1.449259*FCT(X)
  8332.     RETURN
  8333.     END
  8334. C
  8335. C    ..................................................................
  8336. C
  8337. C       SUBROUTINE QA4
  8338. C
  8339. C       PURPOSE
  8340. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X)/SQRT(X), SUMMED OVER X
  8341. C                              FROM 0 TO INFINITY).
  8342. C
  8343. C       USAGE
  8344. C          CALL QA4 (FCT,Y)
  8345. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8346. C
  8347. C       DESCRIPTION OF PARAMETERS
  8348. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8349. C          Y      - THE RESULTING INTEGRAL VALUE.
  8350. C
  8351. C       REMARKS
  8352. C          NONE
  8353. C
  8354. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8355. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8356. C          BY THE USER.
  8357. C
  8358. C       METHOD
  8359. C          EVALUATION IS DONE BY MEANS OF 4-POINT GENERALIZED GAUSSIAN-
  8360. C          LAGUERRE QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY,
  8361. C          WHENEVER FCT(X) IS A POLYNOMIAL UP TO DEGREE 7.
  8362. C          FOR REFERENCE, SEE
  8363. C          CONCUS/CASSATT/JAEHNIG/MELBY, TABLES FOR THE EVALUATION OF
  8364. C          INTEGRAL(X**BETA*EXP(-X)*F(X), SUMMED OVER X FROM 0 TO
  8365. C          INFINITY) BY GAUSS-LAGUERRE QUADRATURE, MTAC, VOL.17,
  8366. C          ISS.83 (1963), PP.245-256.
  8367. C
  8368. C    ..................................................................
  8369. C
  8370.     SUBROUTINE QA4(FCT,Y)
  8371. C
  8372. C
  8373.     X=8.588636
  8374.     Y=.0003992081*FCT(X)
  8375.     X=3.926964
  8376.     Y=Y+.03415597*FCT(X)
  8377.     X=1.339097
  8378.     Y=Y+.4156047*FCT(X)
  8379.     X=.1453035
  8380.     Y=Y+1.322294*FCT(X)
  8381.     RETURN
  8382.     END
  8383. C
  8384. C    ..................................................................
  8385. C
  8386. C       SUBROUTINE QA5
  8387. C
  8388. C       PURPOSE
  8389. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X)/SQRT(X), SUMMED OVER X
  8390. C                              FROM 0 TO INFINITY).
  8391. C
  8392. C       USAGE
  8393. C          CALL QA5 (FCT,Y)
  8394. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8395. C
  8396. C       DESCRIPTION OF PARAMETERS
  8397. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8398. C          Y      - THE RESULTING INTEGRAL VALUE.
  8399. C
  8400. C       REMARKS
  8401. C          NONE
  8402. C
  8403. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8404. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8405. C          BY THE USER.
  8406. C
  8407. C       METHOD
  8408. C          EVALUATION IS DONE BY MEANS OF 5-POINT GENERALIZED GAUSSIAN-
  8409. C          LAGUERRE QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY,
  8410. C          WHENEVER FCT(X) IS A POLYNOMIAL UP TO DEGREE 9.
  8411. C          FOR REFERENCE, SEE
  8412. C          CONCUS/CASSATT/JAEHNIG/MELBY, TABLES FOR THE EVALUATION OF
  8413. C          INTEGRAL(X**BETA*EXP(-X)*F(X), SUMMED OVER X FROM 0 TO
  8414. C          INFINITY) BY GAUSS-LAGUERRE QUADRATURE, MTAC, VOL.17,
  8415. C          ISS.83 (1963), PP.245-256.
  8416. C
  8417. C    ..................................................................
  8418. C
  8419.     SUBROUTINE QA5(FCT,Y)
  8420. C
  8421. C
  8422.     X=11.80719
  8423.     Y=.1528087E-4*FCT(X)
  8424.     X=6.414730
  8425.     Y=Y+.002687291*FCT(X)
  8426.     X=3.085937
  8427.     Y=Y+.06774879*FCT(X)
  8428.     X=1.074562
  8429.     Y=Y+.4802772*FCT(X)
  8430.     X=.1175813
  8431.     Y=Y+1.221725*FCT(X)
  8432.     RETURN
  8433.     END
  8434. C
  8435. C    ..................................................................
  8436. C
  8437. C       SUBROUTINE QA6
  8438. C
  8439. C       PURPOSE
  8440. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X)/SQRT(X), SUMMED OVER X
  8441. C                              FROM 0 TO INFINITY).
  8442. C
  8443. C       USAGE
  8444. C          CALL QA6 (FCT,Y)
  8445. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8446. C
  8447. C       DESCRIPTION OF PARAMETERS
  8448. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8449. C          Y      - THE RESULTING INTEGRAL VALUE.
  8450. C
  8451. C       REMARKS
  8452. C          NONE
  8453. C
  8454. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8455. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8456. C          BY THE USER.
  8457. C
  8458. C       METHOD
  8459. C          EVALUATION IS DONE BY MEANS OF 6-POINT GENERALIZED GAUSSIAN-
  8460. C          LAGUERRE QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY,
  8461. C          WHENEVER FCT(X) IS A POLYNOMIAL UP TO DEGREE 11.
  8462. C          FOR REFERENCE, SEE
  8463. C          CONCUS/CASSATT/JAEHNIG/MELBY, TABLES FOR THE EVALUATION OF
  8464. C          INTEGRAL(X**BETA*EXP(-X)*F(X), SUMMED OVER X FROM 0 TO
  8465. C          INFINITY) BY GAUSS-LAGUERRE QUADRATURE, MTAC, VOL.17,
  8466. C          ISS.83 (1963), PP.245-256.
  8467. C
  8468. C    ..................................................................
  8469. C
  8470.     SUBROUTINE QA6(FCT,Y)
  8471. C
  8472. C
  8473.     X=15.12996
  8474.     Y=.5317103E-6*FCT(X)
  8475.     X=9.124248
  8476.     Y=Y+.0001714737*FCT(X)
  8477.     X=5.196153
  8478.     Y=Y+.007810781*FCT(X)
  8479.     X=2.552590
  8480.     Y=Y+.1032160*FCT(X)
  8481.     X=.8983028
  8482.     Y=Y+.5209846*FCT(X)
  8483.     X=.09874701
  8484.     Y=Y+1.140270*FCT(X)
  8485.     RETURN
  8486.     END
  8487. C
  8488. C    ..................................................................
  8489. C
  8490. C       SUBROUTINE QA7
  8491. C
  8492. C       PURPOSE
  8493. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X)/SQRT(X), SUMMED OVER X
  8494. C                              FROM 0 TO INFINITY).
  8495. C
  8496. C       USAGE
  8497. C          CALL QA7 (FCT,Y)
  8498. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8499. C
  8500. C       DESCRIPTION OF PARAMETERS
  8501. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8502. C          Y      - THE RESULTING INTEGRAL VALUE.
  8503. C
  8504. C       REMARKS
  8505. C          NONE
  8506. C
  8507. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8508. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8509. C          BY THE USER.
  8510. C
  8511. C       METHOD
  8512. C          EVALUATION IS DONE BY MEANS OF 7-POINT GENERALIZED GAUSSIAN-
  8513. C          LAGUERRE QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY,
  8514. C          WHENEVER FCT(X) IS A POLYNOMIAL UP TO DEGREE 13.
  8515. C          FOR REFERENCE, SEE
  8516. C          CONCUS/CASSATT/JAEHNIG/MELBY, TABLES FOR THE EVALUATION OF
  8517. C          INTEGRAL(X**BETA*EXP(-X)*F(X), SUMMED OVER X FROM 0 TO
  8518. C          INFINITY) BY GAUSS-LAGUERRE QUADRATURE, MTAC, VOL.17,
  8519. C          ISS.83 (1963), PP.245-256.
  8520. C
  8521. C    ..................................................................
  8522. C
  8523.     SUBROUTINE QA7(FCT,Y)
  8524. C
  8525. C
  8526.     X=18.52828
  8527.     Y=.1725718E-7*FCT(X)
  8528.     X=11.98999
  8529.     Y=Y+.9432969E-5*FCT(X)
  8530.     X=7.554091
  8531.     Y=Y+.0007101852*FCT(X)
  8532.     X=4.389793
  8533.     Y=Y+.01570011*FCT(X)
  8534.     X=2.180592
  8535.     Y=Y+.1370111*FCT(X)
  8536.     X=.7721379
  8537.     Y=Y+.5462112*FCT(X)
  8538.     X=.08511544
  8539.     Y=Y+1.072812*FCT(X)
  8540.     RETURN
  8541.     END
  8542. C
  8543. C    ..................................................................
  8544. C
  8545. C       SUBROUTINE QA8
  8546. C
  8547. C       PURPOSE
  8548. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X)/SQRT(X), SUMMED OVER X
  8549. C                              FROM 0 TO INFINITY).
  8550. C
  8551. C       USAGE
  8552. C          CALL QA8 (FCT,Y)
  8553. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8554. C
  8555. C       DESCRIPTION OF PARAMETERS
  8556. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8557. C          Y      - THE RESULTING INTEGRAL VALUE.
  8558. C
  8559. C       REMARKS
  8560. C          NONE
  8561. C
  8562. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8563. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8564. C          BY THE USER.
  8565. C
  8566. C       METHOD
  8567. C          EVALUATION IS DONE BY MEANS OF 8-POINT GENERALIZED GAUSSIAN-
  8568. C          LAGUERRE QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY,
  8569. C          WHENEVER FCT(X) IS A POLYNOMIAL UP TO DEGREE 15.
  8570. C          FOR REFERENCE, SEE
  8571. C          CONCUS/CASSATT/JAEHNIG/MELBY, TABLES FOR THE EVALUATION OF
  8572. C          INTEGRAL(X**BETA*EXP(-X)*F(X), SUMMED OVER X FROM 0 TO
  8573. C          INFINITY) BY GAUSS-LAGUERRE QUADRATURE, MTAC, VOL.17,
  8574. C          ISS.83 (1963), PP.245-256.
  8575. C
  8576. C    ..................................................................
  8577. C
  8578.     SUBROUTINE QA8(FCT,Y)
  8579. C
  8580. C
  8581.     X=21.98427
  8582.     Y=.5309615E-9*FCT(X)
  8583.     X=14.97262
  8584.     Y=Y+.4641962E-6*FCT(X)
  8585.     X=10.09332
  8586.     Y=Y+.5423720E-4*FCT(X)
  8587.     X=6.483145
  8588.     Y=Y+.001864568*FCT(X)
  8589.     X=3.809476
  8590.     Y=Y+.02576062*FCT(X)
  8591.     X=1.905114
  8592.     Y=Y+.1676201*FCT(X)
  8593.     X=.6772491
  8594.     Y=Y+.5612949*FCT(X)
  8595.     X=.07479188
  8596.     Y=Y+1.015859*FCT(X)
  8597.     RETURN
  8598.     END
  8599. C
  8600. C    ..................................................................
  8601. C
  8602. C       SUBROUTINE QA9
  8603. C
  8604. C       PURPOSE
  8605. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X)/SQRT(X), SUMMED OVER X
  8606. C                              FROM 0 TO INFINITY).
  8607. C
  8608. C       USAGE
  8609. C          CALL QA9 (FCT,Y)
  8610. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8611. C
  8612. C       DESCRIPTION OF PARAMETERS
  8613. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8614. C          Y      - THE RESULTING INTEGRAL VALUE.
  8615. C
  8616. C       REMARKS
  8617. C          NONE
  8618. C
  8619. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8620. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8621. C          BY THE USER.
  8622. C
  8623. C       METHOD
  8624. C          EVALUATION IS DONE BY MEANS OF 9-POINT GENERALIZED GAUSSIAN-
  8625. C          LAGUERRE QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY,
  8626. C          WHENEVER FCT(X) IS A POLYNOMIAL UP TO DEGREE 17.
  8627. C          FOR REFERENCE, SEE
  8628. C          CONCUS/CASSATT/JAEHNIG/MELBY, TABLES FOR THE EVALUATION OF
  8629. C          INTEGRAL(X**BETA*EXP(-X)*F(X), SUMMED OVER X FROM 0 TO
  8630. C          INFINITY) BY GAUSS-LAGUERRE QUADRATURE, MTAC, VOL.17,
  8631. C          ISS.83 (1963), PP.245-256.
  8632. C
  8633. C    ..................................................................
  8634. C
  8635.     SUBROUTINE QA9(FCT,Y)
  8636. C
  8637. C
  8638.     X=25.48598
  8639.     Y=.1565640E-10*FCT(X)
  8640.     X=18.04651
  8641.     Y=Y+.2093441E-7*FCT(X)
  8642.     X=12.77183
  8643.     Y=Y+.3621309E-5*FCT(X)
  8644.     X=8.769757
  8645.     Y=Y+.0001836225*FCT(X)
  8646.     X=5.694423
  8647.     Y=Y+.003777045*FCT(X)
  8648.     X=3.369176
  8649.     Y=Y+.03728008*FCT(X)
  8650.     X=1.692395
  8651.     Y=Y+.1946035*FCT(X)
  8652.     X=.6032364
  8653.     Y=Y+.5696146*FCT(X)
  8654.     X=.06670223
  8655.     Y=Y+.9669914*FCT(X)
  8656.     RETURN
  8657.     END
  8658. C
  8659. C    ..................................................................
  8660. C
  8661. C       SUBROUTINE QATR
  8662. C
  8663. C       PURPOSE
  8664. C          TO COMPUTE AN APPROXIMATION FOR INTEGRAL(FCT(X), SUMMED
  8665. C          OVER X FROM XL TO XU).
  8666. C
  8667. C       USAGE
  8668. C          CALL QATR (XL,XU,EPS,NDIM,FCT,Y,IER,AUX)
  8669. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT.
  8670. C
  8671. C       DESCRIPTION OF PARAMETERS
  8672. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  8673. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  8674. C          EPS    - THE UPPER BOUND OF THE ABSOLUTE ERROR.
  8675. C          NDIM   - THE DIMENSION OF THE AUXILIARY STORAGE ARRAY AUX.
  8676. C                   NDIM-1 IS THE MAXIMAL NUMBER OF BISECTIONS OF
  8677. C                   THE INTERVAL (XL,XU).
  8678. C          FCT    - THE NAME OF THE EXTERNAL FUNCTION SUBPROGRAM USED.
  8679. C          Y      - THE RESULTING APPROXIMATION FOR THE INTEGRAL VALUE.
  8680. C          IER    - A RESULTING ERROR PARAMETER.
  8681. C          AUX    - AN AUXILIARY STORAGE ARRAY WITH DIMENSION NDIM.
  8682. C
  8683. C       REMARKS
  8684. C          ERROR PARAMETER IER IS CODED IN THE FOLLOWING FORM
  8685. C          IER=0  - IT WAS POSSIBLE TO REACH THE REQUIRED ACCURACY.
  8686. C                   NO ERROR.
  8687. C          IER=1  - IT IS IMPOSSIBLE TO REACH THE REQUIRED ACCURACY
  8688. C                   BECAUSE OF ROUNDING ERRORS.
  8689. C          IER=2  - IT WAS IMPOSSIBLE TO CHECK ACCURACY BECAUSE NDIM
  8690. C                   IS LESS THAN 5, OR THE REQUIRED ACCURACY COULD NOT
  8691. C                   BE REACHED WITHIN NDIM-1 STEPS. NDIM SHOULD BE
  8692. C                   INCREASED.
  8693. C
  8694. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8695. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE CODED BY
  8696. C          THE USER. ITS ARGUMENT X SHOULD NOT BE DESTROYED.
  8697. C
  8698. C       METHOD
  8699. C          EVALUATION OF Y IS DONE BY MEANS OF TRAPEZOIDAL RULE IN
  8700. C          CONNECTION WITH ROMBERGS PRINCIPLE. ON RETURN Y CONTAINS
  8701. C          THE BEST POSSIBLE APPROXIMATION OF THE INTEGRAL VALUE AND
  8702. C          VECTOR AUX THE UPWARD DIAGONAL OF ROMBERG SCHEME.
  8703. C          COMPONENTS AUX(I) (I=1,2,...,IEND, WITH IEND LESS THAN OR
  8704. C          EQUAL TO NDIM) BECOME APPROXIMATIONS TO INTEGRAL VALUE WITH
  8705. C          DECREASING ACCURACY BY MULTIPLICATION WITH (XU-XL).
  8706. C          FOR REFERENCE, SEE
  8707. C          (1) FILIPPI, DAS VERFAHREN VON ROMBERG-STIEFEL-BAUER ALS
  8708. C              SPEZIALFALL DES ALLGEMEINEN PRINZIPS VON RICHARDSON,
  8709. C              MATHEMATIK-TECHNIK-WIRTSCHAFT, VOL.11, ISS.2 (1964),
  8710. C              PP.49-54.
  8711. C          (2) BAUER, ALGORITHM 60, CACM, VOL.4, ISS.6 (1961), PP.255.
  8712. C
  8713. C    ..................................................................
  8714. C
  8715.     SUBROUTINE QATR(XL,XU,EPS,NDIM,FCT,Y,IER,AUX)
  8716. C
  8717. C
  8718.     DIMENSION AUX(1)
  8719. C
  8720. C    PREPARATIONS OF ROMBERG-LOOP
  8721.     AUX(1)=.5*(FCT(XL)+FCT(XU))
  8722.     H=XU-XL
  8723.     IF(NDIM-1)8,8,1
  8724. 1    IF(H)2,10,2
  8725. C
  8726. C    NDIM IS GREATER THAN 1 AND H IS NOT EQUAL TO 0.
  8727. 2    HH=H
  8728.     E=EPS/ABS(H)
  8729.     DELT2=0.
  8730.     P=1.
  8731.     JJ=1
  8732.     DO 7 I=2,NDIM
  8733.     Y=AUX(1)
  8734.     DELT1=DELT2
  8735.     HD=HH
  8736.     HH=.5*HH
  8737.     P=.5*P
  8738.     X=XL+HH
  8739.     SM=0.
  8740.     DO 3 J=1,JJ
  8741.     SM=SM+FCT(X)
  8742. 3    X=X+HD
  8743.     AUX(I)=.5*AUX(I-1)+P*SM
  8744. C    A NEW APPROXIMATION OF INTEGRAL VALUE IS COMPUTED BY MEANS OF
  8745. C    TRAPEZOIDAL RULE.
  8746. C
  8747. C    START OF ROMBERGS EXTRAPOLATION METHOD.
  8748.     Q=1.
  8749.     JI=I-1
  8750.     DO 4 J=1,JI
  8751.     II=I-J
  8752.     Q=Q+Q
  8753.     Q=Q+Q
  8754. 4    AUX(II)=AUX(II+1)+(AUX(II+1)-AUX(II))/(Q-1.)
  8755. C    END OF ROMBERG-STEP
  8756. C
  8757.     DELT2=ABS(Y-AUX(1))
  8758.     IF(I-5)7,5,5
  8759. 5    IF(DELT2-E)10,10,6
  8760. 6    IF(DELT2-DELT1)7,11,11
  8761. 7    JJ=JJ+JJ
  8762. 8    IER=2
  8763. 9    Y=H*AUX(1)
  8764.     RETURN
  8765. 10    IER=0
  8766.     GO TO 9
  8767. 11    IER=1
  8768.     Y=H*Y
  8769.     RETURN
  8770.     END
  8771. C
  8772. C    ..................................................................
  8773. C
  8774. C       SAMPLE PROGRAM FOR INTEGRATION OF A TABULATED FUNCTION BY
  8775. C       NUMERICAL QUADRATURE - QDINT
  8776. C
  8777. C       PURPOSE
  8778. C          INTEGRATES A SET OF TABULATED VALUES FOR F(X) GIVEN THE
  8779. C          NUMBER OF VALUES AND THEIR SPACING
  8780. C
  8781. C       REMARKS
  8782. C          THE NUMBER OF VALUES MUST BE MORE THAN TWO AND THE SPACING
  8783. C          GREATER THAN ZERO
  8784. C
  8785. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8786. C          QSF
  8787. C
  8788. C       METHOD
  8789. C          READS CONTROL CARD CONTAINING THE CODE NUMBER, NUMBER OF
  8790. C          VALUES, AND THE SPACING OF THE FUNCTION VALUES CONTAINED
  8791. C          ON THE FOLLOWING DATA CARDS. DATA CARDS ARE THEN READ AND
  8792. C          INTEGRATION IS PERFORMED. MORE THAN ONE CONTROL CARD AND
  8793. C          CORRESPONDING DATA CAN BE INTEGRATED IN ONE RUN. EXECUTION
  8794. C          IS TERMINATED BY A BLANK CONTROL CARD.
  8795. C
  8796. C    ..................................................................
  8797. C
  8798. C       THE FOLLOWING DIMENSION MUST BE AS LARGE AS THE MAXIMUM NUMBER
  8799. C       OF TABULATED VALUES TO BE INTEGRATED
  8800. C
  8801. c    DIMENSION Z(500)
  8802. C
  8803. C       ...............................................................
  8804. C
  8805. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  8806. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  8807. C       STATEMENT WHICH FOLLOWS.
  8808. C
  8809. C    DOUBLE PRECISION Z,SPACE
  8810. C
  8811. C       ...............................................................
  8812. C
  8813. c10    FORMAT (2I5,F10.0)
  8814. c20    FORMAT(1H1,62HINTEGRATION OF TABULATED VALUES FOR DY/DX USING SUBR
  8815. c     1OUTINE QSF//1H ,10HFUNCTION  ,I5,3X,I5,17H TABULATED VALUES,
  8816. c     25X,10HINTERVAL =,E15.8//)
  8817. c22    FORMAT(1H ,17HILLEGAL CONDITION/)
  8818. c23    FORMAT(1H ,45HNUMBER OF TABULATED VALUES IS LESS THAN THREE)
  8819. c30    FORMAT(1H ,7X,'RESULTANT VALUE OF INTEGRAL AT EACH STEP IS ',/
  8820. c     1(1H ,6E15.8))
  8821. c32    FORMAT(7F10.0)
  8822. cC    OPEN (UNIT=5, DEVICE='CDR', ACCESS='SEQIN')
  8823. cC    OPEN (UNIT=6, DEVICE='LPT', ACCESS='SEQOUT')
  8824. cC
  8825. c35    READ(5,10)ICOD,NUMBR,SPACE
  8826. c    IF(ICOD+NUMBR)70,70,38
  8827. c38    WRITE(6,20)ICOD,NUMBR,SPACE
  8828. c50    READ(5,32)(Z(I),I=1,NUMBR)
  8829. c    IF(NUMBR-3)100,55,55
  8830. c55    CALL QSF(SPACE,Z,Z,NUMBR)
  8831. c60    WRITE(6,30)(Z(I),I=1,NUMBR)
  8832. c    GO TO 35
  8833. c   70    STOP
  8834. c100    WRITE(6,22)
  8835. c    WRITE (6,23)
  8836. c    GO TO 35
  8837. c200    WRITE(6,22)
  8838. c    GO TO 35
  8839. c    END
  8840. C
  8841. C    ..................................................................
  8842. C
  8843. C       SUBROUTINE QG10
  8844. C
  8845. C       PURPOSE
  8846. C          TO COMPUTE INTEGRAL(FCT(X), SUMMED OVER X FROM XL TO XU)
  8847. C
  8848. C       USAGE
  8849. C          CALL QG10(XL,XU,FCT,Y)
  8850. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8851. C
  8852. C       DESCRIPTION OF PARAMETERS
  8853. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  8854. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  8855. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8856. C          Y      - THE RESULTING INTEGRAL VALUE.
  8857. C
  8858. C       REMARKS
  8859. C          NONE
  8860. C
  8861. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8862. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8863. C          BY THE USER.
  8864. C
  8865. C       METHOD
  8866. C          EVALUATION IS DONE BY MEANS OF 10-POINT GAUSS QUADRATURE
  8867. C          FORMULA, WHICH INTEGRATES POLYNOMIALS UP TO DEGREE 19
  8868. C          EXACTLY.
  8869. C          FOR REFERENCE, SEE
  8870. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  8871. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.100-111 AND 337-338.
  8872. C
  8873. C    ..................................................................
  8874. C
  8875.     SUBROUTINE QG10(XL,XU,FCT,Y)
  8876. C
  8877. C
  8878.     A=.5*(XU+XL)
  8879.     B=XU-XL
  8880.     C=.4869533*B
  8881.     Y=.03333567*(FCT(A+C)+FCT(A-C))
  8882.     C=.4325317*B
  8883.     Y=Y+.07472567*(FCT(A+C)+FCT(A-C))
  8884.     C=.3397048*B
  8885.     Y=Y+.1095432*(FCT(A+C)+FCT(A-C))
  8886.     C=.2166977*B
  8887.     Y=Y+.1346334*(FCT(A+C)+FCT(A-C))
  8888.     C=.07443717*B
  8889.     Y=B*(Y+.1477621*(FCT(A+C)+FCT(A-C)))
  8890.     RETURN
  8891.     END
  8892. C
  8893. C    ..................................................................
  8894. C
  8895. C       SUBROUTINE QG2
  8896. C
  8897. C       PURPOSE
  8898. C          TO COMPUTE INTEGRAL(FCT(X), SUMMED OVER X FROM XL TO XU)
  8899. C
  8900. C       USAGE
  8901. C          CALL QG2 (XL,XU,FCT,Y)
  8902. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8903. C
  8904. C       DESCRIPTION OF PARAMETERS
  8905. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  8906. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  8907. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8908. C          Y      - THE RESULTING INTEGRAL VALUE.
  8909. C
  8910. C       REMARKS
  8911. C          NONE
  8912. C
  8913. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8914. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8915. C          BY THE USER.
  8916. C
  8917. C       METHOD
  8918. C          EVALUATION IS DONE BY MEANS OF 2-POINT GAUSS QUADRATURE
  8919. C          FORMULA, WHICH INTEGRATES POLYNOMIALS UP TO DEGREE 3
  8920. C          EXACTLY.
  8921. C          FOR REFERENCE, SEE
  8922. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  8923. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.100-111 AND 337-338.
  8924. C
  8925. C    ..................................................................
  8926. C
  8927.     SUBROUTINE QG2(XL,XU,FCT,Y)
  8928. C
  8929. C
  8930.     A=.5*(XU+XL)
  8931.     B=XU-XL
  8932.     Y=.2886751*B
  8933.     Y=.5*B*(FCT(A+Y)+FCT(A-Y))
  8934.     RETURN
  8935.     END
  8936. C
  8937. C    ..................................................................
  8938. C
  8939. C       SUBROUTINE QG3
  8940. C
  8941. C       PURPOSE
  8942. C          TO COMPUTE INTEGRAL(FCT(X), SUMMED OVER X FROM XL TO XU)
  8943. C
  8944. C       USAGE
  8945. C          CALL QG3 (XL,XU,FCT,Y)
  8946. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8947. C
  8948. C       DESCRIPTION OF PARAMETERS
  8949. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  8950. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  8951. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8952. C          Y      - THE RESULTING INTEGRAL VALUE.
  8953. C
  8954. C       REMARKS
  8955. C          NONE
  8956. C
  8957. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  8958. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  8959. C          BY THE USER.
  8960. C
  8961. C       METHOD
  8962. C          EVALUATION IS DONE BY MEANS OF 3-POINT GAUSS QUADRATURE
  8963. C          FORMULA, WHICH INTEGRATES POLYNOMIALS UP TO DEGREE 5
  8964. C          EXACTLY.
  8965. C          FOR REFERENCE, SEE
  8966. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  8967. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.100-111 AND 337-338.
  8968. C
  8969. C    ..................................................................
  8970. C
  8971.     SUBROUTINE QG3(XL,XU,FCT,Y)
  8972. C
  8973. C
  8974.     A=.5*(XU+XL)
  8975.     B=XU-XL
  8976.     Y=.3872983*B
  8977.     Y=.2777778*(FCT(A+Y)+FCT(A-Y))
  8978.     Y=B*(Y+.4444444*FCT(A))
  8979.     RETURN
  8980.     END
  8981. C
  8982. C    ..................................................................
  8983. C
  8984. C       SUBROUTINE QG4
  8985. C
  8986. C       PURPOSE
  8987. C          TO COMPUTE INTEGRAL(FCT(X), SUMMED OVER X FROM XL TO XU)
  8988. C
  8989. C       USAGE
  8990. C          CALL QG4 (XL,XU,FCT,Y)
  8991. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  8992. C
  8993. C       DESCRIPTION OF PARAMETERS
  8994. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  8995. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  8996. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  8997. C          Y      - THE RESULTING INTEGRAL VALUE.
  8998. C
  8999. C       REMARKS
  9000. C          NONE
  9001. C
  9002. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9003. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9004. C          BY THE USER.
  9005. C
  9006. C       METHOD
  9007. C          EVALUATION IS DONE BY MEANS OF 4-POINT GAUSS QUADRATURE
  9008. C          FORMULA, WHICH INTEGRATES POLYNOMIALS UP TO DEGREE 7
  9009. C          EXACTLY.
  9010. C          FOR REFERENCE, SEE
  9011. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9012. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.100-111 AND 337-338.
  9013. C
  9014. C    ..................................................................
  9015. C
  9016.     SUBROUTINE QG4(XL,XU,FCT,Y)
  9017. C
  9018. C
  9019.     A=.5*(XU+XL)
  9020.     B=XU-XL
  9021.     C=.4305682*B
  9022.     Y=.1739274*(FCT(A+C)+FCT(A-C))
  9023.     C=.1699905*B
  9024.     Y=B*(Y+.3260726*(FCT(A+C)+FCT(A-C)))
  9025.     RETURN
  9026.     END
  9027. C
  9028. C    ..................................................................
  9029. C
  9030. C       SUBROUTINE QG5
  9031. C
  9032. C       PURPOSE
  9033. C          TO COMPUTE INTEGRAL(FCT(X), SUMMED OVER X FROM XL TO XU)
  9034. C
  9035. C       USAGE
  9036. C          CALL QG5 (XL,XU,FCT,Y)
  9037. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9038. C
  9039. C       DESCRIPTION OF PARAMETERS
  9040. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  9041. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  9042. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9043. C          Y      - THE RESULTING INTEGRAL VALUE.
  9044. C
  9045. C       REMARKS
  9046. C          NONE
  9047. C
  9048. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9049. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9050. C          BY THE USER.
  9051. C
  9052. C       METHOD
  9053. C          EVALUATION IS DONE BY MEANS OF 5-POINT GAUSS QUADRATURE
  9054. C          FORMULA, WHICH INTEGRATES POLYNOMIALS UP TO DEGREE 9
  9055. C          EXACTLY.
  9056. C          FOR REFERENCE, SEE
  9057. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9058. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.100-111 AND 337-338.
  9059. C
  9060. C    ..................................................................
  9061. C
  9062.     SUBROUTINE QG5(XL,XU,FCT,Y)
  9063. C
  9064. C
  9065.     A=.5*(XU+XL)
  9066.     B=XU-XL
  9067.     C=.4530899*B
  9068.     Y=.1184634*(FCT(A+C)+FCT(A-C))
  9069.     C=.2692347*B
  9070.     Y=Y+.2393143*(FCT(A+C)+FCT(A-C))
  9071.     Y=B*(Y+.2844444*FCT(A))
  9072.     RETURN
  9073.     END
  9074. C
  9075. C    ..................................................................
  9076. C
  9077. C       SUBROUTINE QG6
  9078. C
  9079. C       PURPOSE
  9080. C          TO COMPUTE INTEGRAL(FCT(X), SUMMED OVER X FROM XL TO XU)
  9081. C
  9082. C       USAGE
  9083. C          CALL QG6 (XL,XU,FCT,Y)
  9084. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9085. C
  9086. C       DESCRIPTION OF PARAMETERS
  9087. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  9088. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  9089. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9090. C          Y      - THE RESULTING INTEGRAL VALUE.
  9091. C
  9092. C       REMARKS
  9093. C          NONE
  9094. C
  9095. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9096. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9097. C          BY THE USER.
  9098. C
  9099. C       METHOD
  9100. C          EVALUATION IS DONE BY MEANS OF 6-POINT GAUSS QUADRATURE
  9101. C          FORMULA, WHICH INTEGRATES POLYNOMIALS UP TO DEGREE 11
  9102. C          EXACTLY.
  9103. C          FOR REFERENCE, SEE
  9104. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9105. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.100-111 AND 337-338.
  9106. C
  9107. C    ..................................................................
  9108. C
  9109.     SUBROUTINE QG6(XL,XU,FCT,Y)
  9110. C
  9111. C
  9112.     A=.5*(XU+XL)
  9113.     B=XU-XL
  9114.     C=.4662348*B
  9115.     Y=.08566225*(FCT(A+C)+FCT(A-C))
  9116.     C=.3306047*B
  9117.     Y=Y+.1803808*(FCT(A+C)+FCT(A-C))
  9118.     C=.1193096*B
  9119.     Y=B*(Y+.2339570*(FCT(A+C)+FCT(A-C)))
  9120.     RETURN
  9121.     END
  9122. C
  9123. C    ..................................................................
  9124. C
  9125. C       SUBROUTINE QG7
  9126. C
  9127. C       PURPOSE
  9128. C          TO COMPUTE INTEGRAL(FCT(X), SUMMED OVER X FROM XL TO XU)
  9129. C
  9130. C       USAGE
  9131. C          CALL QG7 (XL,XU,FCT,Y)
  9132. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9133. C
  9134. C       DESCRIPTION OF PARAMETERS
  9135. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  9136. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  9137. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9138. C          Y      - THE RESULTING INTEGRAL VALUE.
  9139. C
  9140. C       REMARKS
  9141. C          NONE
  9142. C
  9143. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9144. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9145. C          BY THE USER.
  9146. C
  9147. C       METHOD
  9148. C          EVALUATION IS DONE BY MEANS OF 7-POINT GAUSS QUADRATURE
  9149. C          FORMULA, WHICH INTEGRATES POLYNOMIALS UP TO DEGREE 13
  9150. C          EXACTLY.
  9151. C          FOR REFERENCE, SEE
  9152. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9153. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.100-111 AND 337-338.
  9154. C
  9155. C    ..................................................................
  9156. C
  9157.     SUBROUTINE QG7(XL,XU,FCT,Y)
  9158. C
  9159. C
  9160.     A=.5*(XU+XL)
  9161.     B=XU-XL
  9162.     C=.4745540*B
  9163.     Y=.06474248*(FCT(A+C)+FCT(A-C))
  9164.     C=.3707656*B
  9165.     Y=Y+.1398527*(FCT(A+C)+FCT(A-C))
  9166.     C=.2029226*B
  9167.     Y=Y+.1909150*(FCT(A+C)+FCT(A-C))
  9168.     Y=B*(Y+.2089796*FCT(A))
  9169.     RETURN
  9170.     END
  9171. C
  9172. C    ..................................................................
  9173. C
  9174. C       SUBROUTINE QG8
  9175. C
  9176. C       PURPOSE
  9177. C          TO COMPUTE INTEGRAL(FCT(X), SUMMED OVER X FROM XL TO XU)
  9178. C
  9179. C       USAGE
  9180. C          CALL QG8 (XL,XU,FCT,Y)
  9181. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9182. C
  9183. C       DESCRIPTION OF PARAMETERS
  9184. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  9185. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  9186. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9187. C          Y      - THE RESULTING INTEGRAL VALUE.
  9188. C
  9189. C       REMARKS
  9190. C          NONE
  9191. C
  9192. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9193. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9194. C          BY THE USER.
  9195. C
  9196. C       METHOD
  9197. C          EVALUATION IS DONE BY MEANS OF 8-POINT GAUSS QUADRATURE
  9198. C          FORMULA, WHICH INTEGRATES POLYNOMIALS UP TO DEGREE 15
  9199. C          EXACTLY.
  9200. C          FOR REFERENCE, SEE
  9201. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9202. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.100-111 AND 337-338.
  9203. C
  9204. C    ..................................................................
  9205. C
  9206.     SUBROUTINE QG8(XL,XU,FCT,Y)
  9207. C
  9208. C
  9209.     A=.5*(XU+XL)
  9210.     B=XU-XL
  9211.     C=.4801449*B
  9212.     Y=.05061427*(FCT(A+C)+FCT(A-C))
  9213.     C=.3983332*B
  9214.     Y=Y+.1111905*(FCT(A+C)+FCT(A-C))
  9215.     C=.2627662*B
  9216.     Y=Y+.1568533*(FCT(A+C)+FCT(A-C))
  9217.     C=.09171732*B
  9218.     Y=B*(Y+.1813419*(FCT(A+C)+FCT(A-C)))
  9219.     RETURN
  9220.     END
  9221. C
  9222. C    ..................................................................
  9223. C
  9224. C       SUBROUTINE QG9
  9225. C
  9226. C       PURPOSE
  9227. C          TO COMPUTE INTEGRAL(FCT(X), SUMMED OVER X FROM XL TO XU)
  9228. C
  9229. C       USAGE
  9230. C          CALL QG9 (XL,XU,FCT,Y)
  9231. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9232. C
  9233. C       DESCRIPTION OF PARAMETERS
  9234. C          XL     - THE LOWER BOUND OF THE INTERVAL.
  9235. C          XU     - THE UPPER BOUND OF THE INTERVAL.
  9236. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9237. C          Y      - THE RESULTING INTEGRAL VALUE.
  9238. C
  9239. C       REMARKS
  9240. C          NONE
  9241. C
  9242. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9243. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9244. C          BY THE USER.
  9245. C
  9246. C       METHOD
  9247. C          EVALUATION IS DONE BY MEANS OF 9-POINT GAUSS QUADRATURE
  9248. C          FORMULA, WHICH INTEGRATES POLYNOMIALS UP TO DEGREE 17
  9249. C          EXACTLY.
  9250. C          FOR REFERENCE, SEE
  9251. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9252. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.100-111 AND 337-338.
  9253. C
  9254. C    ..................................................................
  9255. C
  9256.     SUBROUTINE QG9(XL,XU,FCT,Y)
  9257. C
  9258. C
  9259.     A=.5*(XU+XL)
  9260.     B=XU-XL
  9261.     C=.4840801*B
  9262.     Y=.04063719*(FCT(A+C)+FCT(A-C))
  9263.     C=.4180156*B
  9264.     Y=Y+.09032408*(FCT(A+C)+FCT(A-C))
  9265.     C=.3066857*B
  9266.     Y=Y+.1303053*(FCT(A+C)+FCT(A-C))
  9267.     C=.1621267*B
  9268.     Y=Y+.1561735*(FCT(A+C)+FCT(A-C))
  9269.     Y=B*(Y+.1651197*FCT(A))
  9270.     RETURN
  9271.     END
  9272. C
  9273. C    ..................................................................
  9274. C
  9275. C       SUBROUTINE QH10
  9276. C
  9277. C       PURPOSE
  9278. C          TO COMPUTE INTEGRAL(EXP(-X*X)*FCT(X), SUMMED OVER X FROM
  9279. C                              -INFINITY TO +INFINITY).
  9280. C
  9281. C       USAGE
  9282. C          CALL QH10(FCT,Y)
  9283. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9284. C
  9285. C       DESCRIPTION OF PARAMETERS
  9286. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9287. C          Y      - THE RESULTING INTEGRAL VALUE.
  9288. C
  9289. C       REMARKS
  9290. C          NONE
  9291. C
  9292. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9293. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9294. C          BY THE USER.
  9295. C
  9296. C       METHOD
  9297. C          EVALUATION IS DONE BY MEANS OF 10-POINT GAUSSIAN-HERMITE
  9298. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9299. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 19.
  9300. C          FOR REFERENCE, SEE
  9301. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9302. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.129-130 AND 343-346.
  9303. C
  9304. C    ..................................................................
  9305. C
  9306.     SUBROUTINE QH10(FCT,Y)
  9307. C
  9308. C
  9309.     X=3.436159
  9310.     Z=-X
  9311.     Y=.7640433E-5*(FCT(X)+FCT(Z))
  9312.     X=2.532732
  9313.     Z=-X
  9314.     Y=Y+.001343646*(FCT(X)+FCT(Z))
  9315.     X=1.756684
  9316.     Z=-X
  9317.     Y=Y+.03387439*(FCT(X)+FCT(Z))
  9318.     X=1.036611
  9319.     Z=-X
  9320.     Y=Y+.2401386*(FCT(X)+FCT(Z))
  9321.     X=.3429013
  9322.     Z=-X
  9323.     Y=Y+.6108626*(FCT(X)+FCT(Z))
  9324.     RETURN
  9325.     END
  9326. C
  9327. C    ..................................................................
  9328. C
  9329. C       SUBROUTINE QH2
  9330. C
  9331. C       PURPOSE
  9332. C          TO COMPUTE INTEGRAL(EXP(-X*X)*FCT(X), SUMMED OVER X FROM
  9333. C                              -INFINITY TO +INFINITY).
  9334. C
  9335. C       USAGE
  9336. C          CALL QH2 (FCT,Y)
  9337. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9338. C
  9339. C       DESCRIPTION OF PARAMETERS
  9340. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9341. C          Y      - THE RESULTING INTEGRAL VALUE.
  9342. C
  9343. C       REMARKS
  9344. C          NONE
  9345. C
  9346. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9347. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9348. C          BY THE USER.
  9349. C
  9350. C       METHOD
  9351. C          EVALUATION IS DONE BY MEANS OF 2-POINT GAUSSIAN-HERMITE
  9352. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9353. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 3.
  9354. C          FOR REFERENCE, SEE
  9355. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9356. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.129-130 AND 343-346.
  9357. C
  9358. C    ..................................................................
  9359. C
  9360.     SUBROUTINE QH2(FCT,Y)
  9361. C
  9362. C
  9363.     X=.7071068
  9364.     Z=-X
  9365.     Y=.8862269*(FCT(X)+FCT(Z))
  9366.     RETURN
  9367.     END
  9368. C
  9369. C    ..................................................................
  9370. C
  9371. C       SUBROUTINE QH3
  9372. C
  9373. C       PURPOSE
  9374. C          TO COMPUTE INTEGRAL(EXP(-X*X)*FCT(X), SUMMED OVER X FROM
  9375. C                              -INFINITY TO +INFINITY).
  9376. C
  9377. C       USAGE
  9378. C          CALL QH3 (FCT,Y)
  9379. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9380. C
  9381. C       DESCRIPTION OF PARAMETERS
  9382. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9383. C          Y      - THE RESULTING INTEGRAL VALUE.
  9384. C
  9385. C       REMARKS
  9386. C          NONE
  9387. C
  9388. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9389. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9390. C          BY THE USER.
  9391. C
  9392. C       METHOD
  9393. C          EVALUATION IS DONE BY MEANS OF 3-POINT GAUSSIAN-HERMITE
  9394. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9395. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 5.
  9396. C          FOR REFERENCE, SEE
  9397. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9398. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.129-130 AND 343-346.
  9399. C
  9400. C    ..................................................................
  9401. C
  9402.     SUBROUTINE QH3(FCT,Y)
  9403. C
  9404. C
  9405.     X=1.224745
  9406.     Z=-X
  9407.     Y=.2954090*(FCT(X)+FCT(Z))
  9408.     X=0.
  9409.     Y=Y+1.181636*FCT(X)
  9410.     RETURN
  9411.     END
  9412. C
  9413. C    ..................................................................
  9414. C
  9415. C       SUBROUTINE QH4
  9416. C
  9417. C       PURPOSE
  9418. C          TO COMPUTE INTEGRAL(EXP(-X*X)*FCT(X), SUMMED OVER X FROM
  9419. C                              -INFINITY TO +INFINITY).
  9420. C
  9421. C       USAGE
  9422. C          CALL QH4 (FCT,Y)
  9423. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9424. C
  9425. C       DESCRIPTION OF PARAMETERS
  9426. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9427. C          Y      - THE RESULTING INTEGRAL VALUE.
  9428. C
  9429. C       REMARKS
  9430. C          NONE
  9431. C
  9432. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9433. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9434. C          BY THE USER.
  9435. C
  9436. C       METHOD
  9437. C          EVALUATION IS DONE BY MEANS OF 4-POINT GAUSSIAN-HERMITE
  9438. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9439. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 7.
  9440. C          FOR REFERENCE, SEE
  9441. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9442. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.129-130 AND 343-346.
  9443. C
  9444. C    ..................................................................
  9445. C
  9446.     SUBROUTINE QH4(FCT,Y)
  9447. C
  9448. C
  9449.     X=1.650680
  9450.     Z=-X
  9451.     Y=.08131284*(FCT(X)+FCT(Z))
  9452.     X=.5246476
  9453.     Z=-X
  9454.     Y=Y+.8049141*(FCT(X)+FCT(Z))
  9455.     RETURN
  9456.     END
  9457. C
  9458. C    ..................................................................
  9459. C
  9460. C       SUBROUTINE QH5
  9461. C
  9462. C       PURPOSE
  9463. C          TO COMPUTE INTEGRAL(EXP(-X*X)*FCT(X), SUMMED OVER X FROM
  9464. C                              -INFINITY TO +INFINITY).
  9465. C
  9466. C       USAGE
  9467. C          CALL QH5 (FCT,Y)
  9468. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9469. C
  9470. C       DESCRIPTION OF PARAMETERS
  9471. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9472. C          Y      - THE RESULTING INTEGRAL VALUE.
  9473. C
  9474. C       REMARKS
  9475. C          NONE
  9476. C
  9477. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9478. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9479. C          BY THE USER.
  9480. C
  9481. C       METHOD
  9482. C          EVALUATION IS DONE BY MEANS OF 5-POINT GAUSSIAN-HERMITE
  9483. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9484. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 9.
  9485. C          FOR REFERENCE, SEE
  9486. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9487. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.129-130 AND 343-346.
  9488. C
  9489. C    ..................................................................
  9490. C
  9491.     SUBROUTINE QH5(FCT,Y)
  9492. C
  9493. C
  9494.     X=2.020183
  9495.     Z=-X
  9496.     Y=.01995324*(FCT(X)+FCT(Z))
  9497.     X=.9585725
  9498.     Z=-X
  9499.     Y=Y+.3936193*(FCT(X)+FCT(Z))
  9500.     X=0.
  9501.     Y=Y+.9453087*FCT(X)
  9502.     RETURN
  9503.     END
  9504. C
  9505. C    ..................................................................
  9506. C
  9507. C       SUBROUTINE QH6
  9508. C
  9509. C       PURPOSE
  9510. C          TO COMPUTE INTEGRAL(EXP(-X*X)*FCT(X), SUMMED OVER X FROM
  9511. C                              -INFINITY TO +INFINITY).
  9512. C
  9513. C       USAGE
  9514. C          CALL QH6 (FCT,Y)
  9515. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9516. C
  9517. C       DESCRIPTION OF PARAMETERS
  9518. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9519. C          Y      - THE RESULTING INTEGRAL VALUE.
  9520. C
  9521. C       REMARKS
  9522. C          NONE
  9523. C
  9524. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9525. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9526. C          BY THE USER.
  9527. C
  9528. C       METHOD
  9529. C          EVALUATION IS DONE BY MEANS OF 6-POINT GAUSSIAN-HERMITE
  9530. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9531. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 11.
  9532. C          FOR REFERENCE, SEE
  9533. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9534. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.129-130 AND 343-346.
  9535. C
  9536. C    ..................................................................
  9537. C
  9538.     SUBROUTINE QH6(FCT,Y)
  9539. C
  9540. C
  9541.     X=2.350605
  9542.     Z=-X
  9543.     Y=.004530010*(FCT(X)+FCT(Z))
  9544.     X=1.335849
  9545.     Z=-X
  9546.     Y=Y+.1570673*(FCT(X)+FCT(Z))
  9547.     X=.4360774
  9548.     Z=-X
  9549.     Y=Y+.7246296*(FCT(X)+FCT(Z))
  9550.     RETURN
  9551.     END
  9552. C
  9553. C    ..................................................................
  9554. C
  9555. C       SUBROUTINE QH7
  9556. C
  9557. C       PURPOSE
  9558. C          TO COMPUTE INTEGRAL(EXP(-X*X)*FCT(X), SUMMED OVER X FROM
  9559. C                              -INFINITY TO +INFINITY).
  9560. C
  9561. C       USAGE
  9562. C          CALL QH7 (FCT,Y)
  9563. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9564. C
  9565. C       DESCRIPTION OF PARAMETERS
  9566. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9567. C          Y      - THE RESULTING INTEGRAL VALUE.
  9568. C
  9569. C       REMARKS
  9570. C          NONE
  9571. C
  9572. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9573. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9574. C          BY THE USER.
  9575. C
  9576. C       METHOD
  9577. C          EVALUATION IS DONE BY MEANS OF 7-POINT GAUSSIAN-HERMITE
  9578. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9579. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 13.
  9580. C          FOR REFERENCE, SEE
  9581. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9582. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.129-130 AND 343-346.
  9583. C
  9584. C    ..................................................................
  9585. C
  9586.     SUBROUTINE QH7(FCT,Y)
  9587. C
  9588. C
  9589.     X=2.651961
  9590.     Z=-X
  9591.     Y=.0009717812*(FCT(X)+FCT(Z))
  9592.     X=1.673552
  9593.     Z=-X
  9594.     Y=Y+.05451558*(FCT(X)+FCT(Z))
  9595.     X=.8162879
  9596.     Z=-X
  9597.     Y=Y+.4256073*(FCT(X)+FCT(Z))
  9598.     X=0.
  9599.     Y=Y+.8102646*FCT(X)
  9600.     RETURN
  9601.     END
  9602. C
  9603. C    ..................................................................
  9604. C
  9605. C       SUBROUTINE QH8
  9606. C
  9607. C       PURPOSE
  9608. C          TO COMPUTE INTEGRAL(EXP(-X*X)*FCT(X), SUMMED OVER X FROM
  9609. C                              -INFINITY TO +INFINITY).
  9610. C
  9611. C       USAGE
  9612. C          CALL QH8 (FCT,Y)
  9613. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9614. C
  9615. C       DESCRIPTION OF PARAMETERS
  9616. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9617. C          Y      - THE RESULTING INTEGRAL VALUE.
  9618. C
  9619. C       REMARKS
  9620. C          NONE
  9621. C
  9622. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9623. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9624. C          BY THE USER.
  9625. C
  9626. C       METHOD
  9627. C          EVALUATION IS DONE BY MEANS OF 8-POINT GAUSSIAN-HERMITE
  9628. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9629. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 15.
  9630. C          FOR REFERENCE, SEE
  9631. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9632. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.129-130 AND 343-346.
  9633. C
  9634. C    ..................................................................
  9635. C
  9636.     SUBROUTINE QH8(FCT,Y)
  9637. C
  9638. C
  9639.     X=2.930637
  9640.     Z=-X
  9641.     Y=.0001996041*(FCT(X)+FCT(Z))
  9642.     X=1.981657
  9643.     Z=-X
  9644.     Y=Y+.01707798*(FCT(X)+FCT(Z))
  9645.     X=1.157194
  9646.     Z=-X
  9647.     Y=Y+.2078023*(FCT(X)+FCT(Z))
  9648.     X=.3811870
  9649.     Z=-X
  9650.     Y=Y+.6611470*(FCT(X)+FCT(Z))
  9651.     RETURN
  9652.     END
  9653. C
  9654. C    ..................................................................
  9655. C
  9656. C       SUBROUTINE QH9
  9657. C
  9658. C       PURPOSE
  9659. C          TO COMPUTE INTEGRAL(EXP(-X*X)*FCT(X), SUMMED OVER X FROM
  9660. C                              -INFINITY TO +INFINITY).
  9661. C
  9662. C       USAGE
  9663. C          CALL QH9 (FCT,Y)
  9664. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9665. C
  9666. C       DESCRIPTION OF PARAMETERS
  9667. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9668. C          Y      - THE RESULTING INTEGRAL VALUE.
  9669. C
  9670. C       REMARKS
  9671. C          NONE
  9672. C
  9673. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9674. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9675. C          BY THE USER.
  9676. C
  9677. C       METHOD
  9678. C          EVALUATION IS DONE BY MEANS OF 9-POINT GAUSSIAN-HERMITE
  9679. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9680. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 17.
  9681. C          FOR REFERENCE, SEE
  9682. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9683. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.129-130 AND 343-346.
  9684. C
  9685. C    ..................................................................
  9686. C
  9687.     SUBROUTINE QH9(FCT,Y)
  9688. C
  9689. C
  9690.     X=3.190993
  9691.     Z=-X
  9692.     Y=.3960698E-4*(FCT(X)+FCT(Z))
  9693.     X=2.266581
  9694.     Z=-X
  9695.     Y=Y+.004943624*(FCT(X)+FCT(Z))
  9696.     X=1.468553
  9697.     Z=-X
  9698.     Y=Y+.08847453*(FCT(X)+FCT(Z))
  9699.     X=.7235510
  9700.     Z=-X
  9701.     Y=Y+.4326516*(FCT(X)+FCT(Z))
  9702.     X=0.
  9703.     Y=Y+.7202352*FCT(X)
  9704.     RETURN
  9705.     END
  9706. C
  9707. C    ..................................................................
  9708. C
  9709. C       SUBROUTINE QHFE
  9710. C
  9711. C       PURPOSE
  9712. C          TO COMPUTE THE VECTOR OF INTEGRAL VALUES FOR A GIVEN
  9713. C          EQUIDISTANT TABLE OF FUNCTION AND DERIVATIVE VALUES.
  9714. C
  9715. C       USAGE
  9716. C          CALL QHFE (H,Y,DERY,Z,NDIM)
  9717. C
  9718. C       DESCRIPTION OF PARAMETERS
  9719. C          H      - THE INCREMENT OF ARGUMENT VALUES.
  9720. C          Y      - THE INPUT VECTOR OF FUNCTION VALUES.
  9721. C          DERY   - THE INPUT VECTOR OF DERIVATIVE VALUES.
  9722. C          Z      - THE RESULTING VECTOR OF INTEGRAL VALUES. Z MAY BE
  9723. C                   IDENTICAL WITH Y OR DERY.
  9724. C          NDIM   - THE DIMENSION OF VECTORS Y,DERY,Z.
  9725. C
  9726. C       REMARKS
  9727. C          NO ACTION IN CASE NDIM LESS THAN 1.
  9728. C
  9729. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9730. C          NONE
  9731. C
  9732. C       METHOD
  9733. C          BEGINNING WITH Z(1)=0, EVALUATION OF VECTOR Z IS DONE BY
  9734. C          MEANS OF HERMITEAN FOURTH ORDER INTEGRATION FORMULA.
  9735. C          FOR REFERENCE, SEE
  9736. C          (1) F.B.HILDEBRAND, INTRODUCTION TO NUMERICAL ANALYSIS,
  9737. C              MCGRAW-HILL, NEW YORK/TORONTO/LONDON, 1956, PP.314-319.
  9738. C          (2) R.ZURMUEHL, PRAKTISCHE MATHEMATIK FUER INGENIEURE UND
  9739. C              PHYSIKER, SPRINGER, BERLIN/GOETTINGEN/HEIDELBERG, 1963,
  9740. C              PP.227-230.
  9741. C
  9742. C    ..................................................................
  9743. C
  9744.     SUBROUTINE QHFE(H,Y,DERY,Z,NDIM)
  9745. C
  9746. C
  9747.     DIMENSION Y(1),DERY(1),Z(1)
  9748. C
  9749.     SUM2=0.
  9750.     IF(NDIM-1)4,3,1
  9751. 1    HH=.5*H
  9752.     HS=.1666667*H
  9753. C
  9754. C    INTEGRATION LOOP
  9755.     DO 2 I=2,NDIM
  9756.     SUM1=SUM2
  9757.     SUM2=SUM2+HH*((Y(I)+Y(I-1))+HS*(DERY(I-1)-DERY(I)))
  9758. 2    Z(I-1)=SUM1
  9759. 3    Z(NDIM)=SUM2
  9760. 4    RETURN
  9761.     END
  9762. C
  9763. C    ..................................................................
  9764. C
  9765. C       SUBROUTINE QHFG
  9766. C
  9767. C       PURPOSE
  9768. C          TO COMPUTE THE VECTOR OF INTEGRAL VALUES FOR A GIVEN
  9769. C          GENERAL TABLE OF ARGUMENT, FUNCTION, AND DERIVATIVE VALUES.
  9770. C
  9771. C       USAGE
  9772. C          CALL QHFG (X,Y,DERY,Z,NDIM)
  9773. C
  9774. C       DESCRIPTION OF PARAMETERS
  9775. C          X      - THE INPUT VECTOR OF ARGUMENT VALUES.
  9776. C          Y      - THE INPUT VECTOR OF FUNCTION VALUES.
  9777. C          DERY   - THE INPUT VECTOR OF DERIVATIVE VALUES.
  9778. C          Z      - THE RESULTING VECTOR OF INTEGRAL VALUES. Z MAY BE
  9779. C                   IDENTICAL WITH X,Y OR DERY.
  9780. C          NDIM   - THE DIMENSION OF VECTORS X,Y,DERY,Z.
  9781. C
  9782. C       REMARKS
  9783. C          NO ACTION IN CASE NDIM LESS THAN 1.
  9784. C
  9785. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9786. C          NONE
  9787. C
  9788. C       METHOD
  9789. C          BEGINNING WITH Z(1)=0, EVALUATION OF VECTOR Z IS DONE BY
  9790. C          MEANS OF HERMITEAN FOURTH ORDER INTEGRATION FORMULA.
  9791. C          FOR REFERENCE, SEE
  9792. C          (1) F.B.HILDEBRAND, INTRODUCTION TO NUMERICAL ANALYSIS,
  9793. C              MCGRAW-HILL, NEW YORK/TORONTO/LONDON, 1956, PP.314-319.
  9794. C          (2) R.ZURMUEHL, PRAKTISCHE MATHEMATIK FUER INGENIEURE UND
  9795. C              PHYSIKER, SPRINGER, BERLIN/GOETTINGEN/HEIDELBERG, 1963,
  9796. C              PP.227-230.
  9797. C
  9798. C    ..................................................................
  9799. C
  9800.     SUBROUTINE QHFG(X,Y,DERY,Z,NDIM)
  9801. C
  9802. C
  9803.     DIMENSION X(1),Y(1),DERY(1),Z(1)
  9804. C
  9805.     SUM2=0.
  9806.     IF(NDIM-1)4,3,1
  9807. C
  9808. C    INTEGRATION LOOP
  9809. 1    DO 2 I=2,NDIM
  9810.     SUM1=SUM2
  9811.     SUM2=.5*(X(I)-X(I-1))
  9812.     SUM2=SUM1+SUM2*((Y(I)+Y(I-1))+.3333333*SUM2*(DERY(I-1)-DERY(I)))
  9813. 2    Z(I-1)=SUM1
  9814. 3    Z(NDIM)=SUM2
  9815. 4    RETURN
  9816.     END
  9817. C
  9818. C    ..................................................................
  9819. C
  9820. C       SUBROUTINE QHSE
  9821. C
  9822. C       PURPOSE
  9823. C          TO COMPUTE THE VECTOR OF INTEGRAL VALUES FOR A GIVEN
  9824. C          EQUIDISTANT TABLE OF FUNCTION, FIRST DERIVATIVE,
  9825. C          AND SECOND DERIVATIVE VALUES.
  9826. C
  9827. C       USAGE
  9828. C          CALL QHSE (H,Y,FDY,SDY,Z,NDIM)
  9829. C
  9830. C       DESCRIPTION OF PARAMETERS
  9831. C          H      - THE INCREMENT OF ARGUMENT VALUES.
  9832. C          Y      - THE INPUT VECTOR OF FUNCTION VALUES.
  9833. C          FDY    - THE INPUT VECTOR OF FIRST DERIVATIVE.
  9834. C          SDY    - THE INPUT VECTOR OF SECOND DERIVATIVE.
  9835. C          Z      - THE RESULTING VECTOR OF INTEGRAL VALUES. Z MAY BE
  9836. C                   IDENTICAL WITH Y,FDY OR SDY.
  9837. C          NDIM   - THE DIMENSION OF VECTORS Y,FDY,SDY,Z.
  9838. C
  9839. C       REMARKS
  9840. C          NO ACTION IN CASE NDIM LESS THAN 1.
  9841. C
  9842. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9843. C          NONE
  9844. C
  9845. C       METHOD
  9846. C          BEGINNING WITH Z(1)=0, EVALUATION OF VECTOR Z IS DONE BY
  9847. C          MEANS OF HERMITEAN SIXTH ORDER INTEGRATION FORMULA.
  9848. C          FOR REFERENCE, SEE
  9849. C          R.ZURMUEHL, PRAKTISCHE MATHEMATIK FUER INGENIEURE UND
  9850. C          PHYSIKER, SPRINGER, BERLIN/GOETTINGEN/HEIDELBERG, 1963,
  9851. C          PP.227-230.
  9852. C
  9853. C    ..................................................................
  9854. C
  9855.     SUBROUTINE QHSE(H,Y,FDY,SDY,Z,NDIM)
  9856. C
  9857. C
  9858.     DIMENSION Y(1),FDY(1),SDY(1),Z(1)
  9859. C
  9860.     SUM2=0.
  9861.     IF(NDIM-1)4,3,1
  9862. 1    HH=.5*H
  9863.     HF=.2*H
  9864.     HT=.08333333*H
  9865. C
  9866. C    INTEGRATION LOOP
  9867.     DO 2 I=2,NDIM
  9868.     SUM1=SUM2
  9869.     SUM2=SUM2+HH*((Y(I-1)+Y(I))+HF*((FDY(I-1)-FDY(I))+
  9870.      1              HT*(SDY(I-1)+SDY(I))))
  9871. 2    Z(I-1)=SUM1
  9872. 3    Z(NDIM)=SUM2
  9873. 4    RETURN
  9874.     END
  9875. C
  9876. C    ..................................................................
  9877. C
  9878. C       SUBROUTINE QHSG
  9879. C
  9880. C       PURPOSE
  9881. C          TO COMPUTE THE VECTOR OF INTEGRAL VALUES FOR A GIVEN
  9882. C          GENERAL TABLE OF ARGUMENT, FUNCTION, FIRST DERIVATIVE,
  9883. C          AND SECOND DERIVATIVE VALUES.
  9884. C
  9885. C       USAGE
  9886. C          CALL QHSG (X,Y,FDY,SDY,Z,NDIM)
  9887. C
  9888. C       DESCRIPTION OF PARAMETERS
  9889. C          X      - THE INPUT VECTOR OF ARGUMENT VALUES.
  9890. C          Y      - THE INPUT VECTOR OF FUNCTION VALUES.
  9891. C          FDY    - THE INPUT VECTOR OF FIRST DERIVATIVE.
  9892. C          SDY    - THE INPUT VECTOR OF SECOND DERIVATIVE.
  9893. C          Z      - THE RESULTING VECTOR OF INTEGRAL VALUES. Z MAY BE
  9894. C                   IDENTICAL WITH X,Y,FDY OR SDY.
  9895. C          NDIM   - THE DIMENSION OF VECTORS X,Y,FDY,SDY,Z.
  9896. C
  9897. C       REMARKS
  9898. C          NO ACTION IN CASE NDIM LESS THAN 1.
  9899. C
  9900. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9901. C          NONE
  9902. C
  9903. C       METHOD
  9904. C          BEGINNING WITH Z(1)=0, EVALUATION OF VECTOR Z IS DONE BY
  9905. C          MEANS OF HERMITEAN SIXTH ORDER INTEGRATION FORMULA.
  9906. C          FOR REFERENCE, SEE
  9907. C          R.ZURMUEHL, PRAKTISCHE MATHEMATIK FUER INGENIEURE UND
  9908. C          PHYSIKER, SPRINGER, BERLIN/GOETTINGEN/HEIDELBERG, 1963,
  9909. C          PP.227-230.
  9910. C
  9911. C    ..................................................................
  9912. C
  9913.     SUBROUTINE QHSG(X,Y,FDY,SDY,Z,NDIM)
  9914. C
  9915. C
  9916.     DIMENSION X(1),Y(1),FDY(1),SDY(1),Z(1)
  9917. C
  9918.     SUM2=0.
  9919.     IF(NDIM-1)4,3,1
  9920. C
  9921. C    INTEGRATION LOOP
  9922. 1    DO 2 I=2,NDIM
  9923.     SUM1=SUM2
  9924.     SUM2=.5*(X(I)-X(I-1))
  9925.     SUM2=SUM1+SUM2*((Y(I-1)+Y(I))+.4*SUM2*((FDY(I-1)-FDY(I))+
  9926.      1     .1666667*SUM2*(SDY(I-1)+SDY(I))))
  9927. 2    Z(I-1)=SUM1
  9928. 3    Z(NDIM)=SUM2
  9929. 4    RETURN
  9930.     END
  9931. C
  9932. C    ..................................................................
  9933. C
  9934. C       SUBROUTINE QL10
  9935. C
  9936. C       PURPOSE
  9937. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X), SUMMED OVER X FROM 0
  9938. C                              TO INFINITY).
  9939. C
  9940. C       USAGE
  9941. C          CALL QL10(FCT,Y)
  9942. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  9943. C
  9944. C       DESCRIPTION OF PARAMETERS
  9945. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  9946. C          Y      - THE RESULTING INTEGRAL VALUE.
  9947. C
  9948. C       REMARKS
  9949. C          NONE
  9950. C
  9951. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  9952. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  9953. C          BY THE USER.
  9954. C
  9955. C       METHOD
  9956. C          EVALUATION IS DONE BY MEANS OF 10-POINT GAUSSIAN-LAGUERRE
  9957. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  9958. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 19.
  9959. C          FOR REFERENCE, SEE
  9960. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  9961. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.130-132 AND 347-352.
  9962. C
  9963. C    ..................................................................
  9964. C
  9965.     SUBROUTINE QL10(FCT,Y)
  9966. C
  9967. C
  9968.     X=29.92070
  9969.     Y=.9911827E-12*FCT(X)
  9970.     X=21.99659
  9971.     Y=Y+.1839565E-8*FCT(X)
  9972.     X=16.27926
  9973.     Y=Y+.4249314E-6*FCT(X)
  9974.     X=11.84379
  9975.     Y=Y+.2825923E-4*FCT(X)
  9976.     X=8.330153
  9977.     Y=Y+.7530084E-3*FCT(X)
  9978.     X=5.552496
  9979.     Y=Y+.009501517*FCT(X)
  9980.     X=3.401434
  9981.     Y=Y+.06208746*FCT(X)
  9982.     X=1.808343
  9983.     Y=Y+.2180683*FCT(X)
  9984.     X=.7294545
  9985.     Y=Y+.4011199*FCT(X)
  9986.     X=.1377935
  9987.     Y=Y+.3084411*FCT(X)
  9988.     RETURN
  9989.     END
  9990. C
  9991. C    ..................................................................
  9992. C
  9993. C       SUBROUTINE QL2
  9994. C
  9995. C       PURPOSE
  9996. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X), SUMMED OVER X FROM 0
  9997. C                              TO INFINITY).
  9998. C
  9999. C       USAGE
  10000. C          CALL QL2 (FCT,Y)
  10001. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  10002. C
  10003. C       DESCRIPTION OF PARAMETERS
  10004. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  10005. C          Y      - THE RESULTING INTEGRAL VALUE.
  10006. C
  10007. C       REMARKS
  10008. C          NONE
  10009. C
  10010. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10011. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  10012. C          BY THE USER.
  10013. C
  10014. C       METHOD
  10015. C          EVALUATION IS DONE BY MEANS OF 2-POINT GAUSSIAN-LAGUERRE
  10016. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  10017. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 3.
  10018. C          FOR REFERENCE, SEE
  10019. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  10020. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.130-132 AND 347-352.
  10021. C
  10022. C    ..................................................................
  10023. C
  10024.     SUBROUTINE QL2(FCT,Y)
  10025. C
  10026. C
  10027.     X=3.414214
  10028.     Y=.1464466*FCT(X)
  10029.     X=.5857864
  10030.     Y=Y+.8535534*FCT(X)
  10031.     RETURN
  10032.     END
  10033. C
  10034. C    ..................................................................
  10035. C
  10036. C       SUBROUTINE QL3
  10037. C
  10038. C       PURPOSE
  10039. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X), SUMMED OVER X FROM 0
  10040. C                              TO INFINITY).
  10041. C
  10042. C       USAGE
  10043. C          CALL QL3 (FCT,Y)
  10044. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  10045. C
  10046. C       DESCRIPTION OF PARAMETERS
  10047. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  10048. C          Y      - THE RESULTING INTEGRAL VALUE.
  10049. C
  10050. C       REMARKS
  10051. C          NONE
  10052. C
  10053. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10054. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  10055. C          BY THE USER.
  10056. C
  10057. C       METHOD
  10058. C          EVALUATION IS DONE BY MEANS OF 3-POINT GAUSSIAN-LAGUERRE
  10059. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  10060. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 5.
  10061. C          FOR REFERENCE, SEE
  10062. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  10063. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.130-132 AND 347-352.
  10064. C
  10065. C    ..................................................................
  10066. C
  10067.     SUBROUTINE QL3(FCT,Y)
  10068. C
  10069. C
  10070.     X=6.289945
  10071.     Y=.01038926*FCT(X)
  10072.     X=2.294280
  10073.     Y=Y+.2785177*FCT(X)
  10074.     X=.4157746
  10075.     Y=Y+.7110930*FCT(X)
  10076.     RETURN
  10077.     END
  10078. C
  10079. C    ..................................................................
  10080. C
  10081. C       SUBROUTINE QL4
  10082. C
  10083. C       PURPOSE
  10084. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X), SUMMED OVER X FROM 0
  10085. C                              TO INFINITY).
  10086. C
  10087. C       USAGE
  10088. C          CALL QL4 (FCT,Y)
  10089. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  10090. C
  10091. C       DESCRIPTION OF PARAMETERS
  10092. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  10093. C          Y      - THE RESULTING INTEGRAL VALUE.
  10094. C
  10095. C       REMARKS
  10096. C          NONE
  10097. C
  10098. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10099. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  10100. C          BY THE USER.
  10101. C
  10102. C       METHOD
  10103. C          EVALUATION IS DONE BY MEANS OF 4-POINT GAUSSIAN-LAGUERRE
  10104. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  10105. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 7.
  10106. C          FOR REFERENCE, SEE
  10107. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  10108. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.130-132 AND 347-352.
  10109. C
  10110. C    ..................................................................
  10111. C
  10112.     SUBROUTINE QL4(FCT,Y)
  10113. C
  10114. C
  10115.     X=9.395071
  10116.     Y=.5392947E-3*FCT(X)
  10117.     X=4.536620
  10118.     Y=Y+.03888791*FCT(X)
  10119.     X=1.745761
  10120.     Y=Y+.3574187*FCT(X)
  10121.     X=.3225477
  10122.     Y=Y+.6031541*FCT(X)
  10123.     RETURN
  10124.     END
  10125. C
  10126. C    ..................................................................
  10127. C
  10128. C       SUBROUTINE QL5
  10129. C
  10130. C       PURPOSE
  10131. C          TO COMPUTE INTEGRAL(EXP(-X)*FCT(X), SUMMED OVER X FROM 0
  10132. C                              TO INFINITY).
  10133. C
  10134. C       USAGE
  10135. C          CALL QL5 (FCT,Y)
  10136. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
  10137. C
  10138. C       DESCRIPTION OF PARAMETERS
  10139. C          FCT    - THE NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  10140. C          Y      - THE RESULTING INTEGRAL VALUE.
  10141. C
  10142. C       REMARKS
  10143. C          NONE
  10144. C
  10145. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10146. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  10147. C          BY THE USER.
  10148. C
  10149. C       METHOD
  10150. C          EVALUATION IS DONE BY MEANS OF 5-POINT GAUSSIAN-LAGUERRE
  10151. C          QUADRATURE FORMULA, WHICH INTEGRATES EXACTLY WHENEVER
  10152. C          FCT(X) IS A POLYNOMIAL UP TO DEGREE 9.
  10153. C          FOR REFERENCE, SEE
  10154. C          V.I.KRYLOV, APPROXIMATE CALCULATION OF INTEGRALS,
  10155. C          MACMILLAN, NEW YORK/LONDON, 1962, PP.130-132 AND 347-352.
  10156. C
  10157. C    ..................................................................
  10158. C
  10159.     SUBROUTINE QL5(FCT,Y)
  10160. C
  10161. C
  10162.     X=12.64080
  10163.     Y=.2336997E-4*FCT(X)
  10164.     X=7.085810
  10165.     Y=Y+.3611759E-2*FCT(X)
  10166.     X=3.596426
  10167.     Y=Y+.07594245*FCT(X)
  10168.     X=1.413403
  10169.     Y=Y+.3986668*FCT(X)
  10170.     X=.2635603
  10171.     Y=Y+.5217556*FCT(X)
  10172.     RETURN
  10173.     END
  10174. C
  10175. C     ..................................................................
  10176. C
  10177. C        SUBROUTINE QSF
  10178. C
  10179. C        PURPOSE
  10180. C           TO COMPUTE THE VECTOR OF INTEGRAL VALUES FOR A GIVEN
  10181. C           EQUIDISTANT TABLE OF FUNCTION VALUES.
  10182. C
  10183. C        USAGE
  10184. C           CALL QSF (H,Y,Z,NDIM)
  10185. C
  10186. C        DESCRIPTION OF PARAMETERS
  10187. C           H      - THE INCREMENT OF ARGUMENT VALUES.
  10188. C           Y      - THE INPUT VECTOR OF FUNCTION VALUES.
  10189. C           Z      - THE RESULTING VECTOR OF INTEGRAL VALUES. Z MAY BE
  10190. C                    IDENTICAL WITH Y.
  10191. C           NDIM   - THE DIMENSION OF VECTORS Y AND Z.
  10192. C
  10193. C        REMARKS
  10194. C           NO ACTION IN CASE NDIM LESS THAN 3.
  10195. C
  10196. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10197. C           NONE
  10198. C
  10199. C        METHOD
  10200. C           BEGINNING WITH Z(1)=0, EVALUATION OF VECTOR Z IS DONE BY
  10201. C           MEANS OF SIMPSONS RULE TOGETHER WITH NEWTONS 3/8 RULE OR A
  10202. C           COMBINATION OF THESE TWO RULES. TRUNCATION ERROR IS OF
  10203. C           ORDER H**5 (I.E. FOURTH ORDER METHOD). ONLY IN CASE NDIM=3
  10204. C           TRUNCATION ERROR OF Z(2) IS OF ORDER H**4.
  10205. C           FOR REFERENCE, SEE
  10206. C           (1) F.B.HILDEBRAND, INTRODUCTION TO NUMERICAL ANALYSIS,
  10207. C               MCGRAW-HILL, NEW YORK/TORONTO/LONDON, 1956, PP.71-76.
  10208. C           (2) R.ZURMUEHL, PRAKTISCHE MATHEMATIK FUER INGENIEURE UND
  10209. C               PHYSIKER, SPRINGER, BERLIN/GOETTINGEN/HEIDELBERG, 1963,
  10210. C               PP.214-221.
  10211. C
  10212. C     ..................................................................
  10213. C
  10214.       SUBROUTINE QSF(H,Y,Z,NDIM)
  10215. C
  10216. C
  10217.       DIMENSION Y(1),Z(1)
  10218. C
  10219.       HT=.3333333*H
  10220.       IF(NDIM-5)7,8,1
  10221. C
  10222. C     NDIM IS GREATER THAN 5. PREPARATIONS OF INTEGRATION LOOP
  10223.     1 SUM1=Y(2)+Y(2)
  10224.       SUM1=SUM1+SUM1
  10225.       SUM1=HT*(Y(1)+SUM1+Y(3))
  10226.       AUX1=Y(4)+Y(4)
  10227.       AUX1=AUX1+AUX1
  10228.       AUX1=SUM1+HT*(Y(3)+AUX1+Y(5))
  10229.       AUX2=HT*(Y(1)+3.875*(Y(2)+Y(5))+2.625*(Y(3)+Y(4))+Y(6))
  10230.       SUM2=Y(5)+Y(5)
  10231.       SUM2=SUM2+SUM2
  10232.       SUM2=AUX2-HT*(Y(4)+SUM2+Y(6))
  10233.       Z(1)=0.
  10234.       AUX=Y(3)+Y(3)
  10235.       AUX=AUX+AUX
  10236.       Z(2)=SUM2-HT*(Y(2)+AUX+Y(4))
  10237.       Z(3)=SUM1
  10238.       Z(4)=SUM2
  10239.       IF(NDIM-6)5,5,2
  10240. C
  10241. C     INTEGRATION LOOP
  10242.     2 DO 4 I=7,NDIM,2
  10243.       SUM1=AUX1
  10244.       SUM2=AUX2
  10245.       AUX1=Y(I-1)+Y(I-1)
  10246.       AUX1=AUX1+AUX1
  10247.       AUX1=SUM1+HT*(Y(I-2)+AUX1+Y(I))
  10248.       Z(I-2)=SUM1
  10249.       IF(I-NDIM)3,6,6
  10250.     3 AUX2=Y(I)+Y(I)
  10251.       AUX2=AUX2+AUX2
  10252.       AUX2=SUM2+HT*(Y(I-1)+AUX2+Y(I+1))
  10253.     4 Z(I-1)=SUM2
  10254.     5 Z(NDIM-1)=AUX1
  10255.       Z(NDIM)=AUX2
  10256.       RETURN
  10257.     6 Z(NDIM-1)=SUM2
  10258.       Z(NDIM)=AUX1
  10259.       RETURN
  10260. C     END OF INTEGRATION LOOP
  10261. C
  10262.     7 IF(NDIM-3)12,11,8
  10263. C
  10264. C     NDIM IS EQUAL TO 4 OR 5
  10265.     8 SUM2=1.125*HT*(Y(1)+Y(2)+Y(2)+Y(2)+Y(3)+Y(3)+Y(3)+Y(4))
  10266.       SUM1=Y(2)+Y(2)
  10267.       SUM1=SUM1+SUM1
  10268.       SUM1=HT*(Y(1)+SUM1+Y(3))
  10269.       Z(1)=0.
  10270.       AUX1=Y(3)+Y(3)
  10271.       AUX1=AUX1+AUX1
  10272.       Z(2)=SUM2-HT*(Y(2)+AUX1+Y(4))
  10273.       IF(NDIM-5)10,9,9
  10274.     9 AUX1=Y(4)+Y(4)
  10275.       AUX1=AUX1+AUX1
  10276.       Z(5)=SUM1+HT*(Y(3)+AUX1+Y(5))
  10277.    10 Z(3)=SUM1
  10278.       Z(4)=SUM2
  10279.       RETURN
  10280. C
  10281. C     NDIM IS EQUAL TO 3
  10282.    11 SUM1=HT*(1.25*Y(1)+Y(2)+Y(2)-.25*Y(3))
  10283.       SUM2=Y(2)+Y(2)
  10284.       SUM2=SUM2+SUM2
  10285.       Z(3)=HT*(Y(1)+SUM2+Y(3))
  10286.       Z(1)=0.
  10287.       Z(2)=SUM1
  10288.    12 RETURN
  10289.       END
  10290. C
  10291. C     ..................................................................
  10292. C
  10293. C        SUBROUTINE RADD
  10294. C
  10295. C        PURPOSE
  10296. C           ADD ROW OF ONE MATRIX TO ROW OF ANOTHER MATRIX
  10297. C
  10298. C        USAGE
  10299. C           CALL RADD(A,IRA,R,IRR,N,M,MS,L)
  10300. C
  10301. C        DESCRIPTION OF PARAMETERS
  10302. C           A   - NAME OF INPUT MATRIX
  10303. C           IRA - ROW IN MATRIX A TO BE ADDED TO ROW IRR OF MATRIX R
  10304. C           R   - NAME OF OUTPUT MATRIX
  10305. C           IRR - ROW IN MATRIX R WHERE SUMMATION IS DEVELOPED
  10306. C           N   - NUMBER OF ROWS IN A
  10307. C           M   - NUMBER OF COLUMNS IN A AND R
  10308. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  10309. C                  0 - GENERAL
  10310. C                  1 - SYMMETRIC
  10311. C                  2 - DIAGONAL
  10312. C           L   - NUMBER OF ROWS IN R
  10313. C
  10314. C        REMARKS
  10315. C           MATRIX R MUST BE A GENERAL MATRIX
  10316. C           MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRIX A UNLESS
  10317. C           A IS GENERAL
  10318. C
  10319. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10320. C           LOC
  10321. C
  10322. C        METHOD
  10323. C           EACH ELEMENT OF ROW IRA OF MATRIX A IS ADDED TO
  10324. C           CORRESPONDING ELEMENT OF ROW IRR OF MATRIX R
  10325. C
  10326. C     ..................................................................
  10327. C
  10328.       SUBROUTINE RADD(A,IRA,R,IRR,N,M,MS,L)
  10329.       DIMENSION A(1),R(1)
  10330. C
  10331.       IR=IRR-L
  10332.       DO 2 J=1,M
  10333.       IR=IR+L
  10334. C
  10335. C        LOCATE INPUT ELEMENT FOR ANY MATRIX STORAGE MODE
  10336. C
  10337.       CALL LOC(IRA,J,IA,N,M,MS)
  10338. C
  10339. C        TEST FOR ZERO ELEMENT IN DIAGONAL MATRIX
  10340. C
  10341.       IF(IA) 1,2,1
  10342. C
  10343. C        ADD ELEMENTS
  10344. C
  10345.     1 R(IR)=R(IR)+A(IA)
  10346.     2 CONTINUE
  10347.       RETURN
  10348.       END
  10349. C
  10350. C     ..................................................................
  10351. C
  10352. C        SUBROUTINE RANK
  10353. C
  10354. C        PURPOSE
  10355. C           RANK A VECTOR OF VALUES
  10356. C
  10357. C        USAGE
  10358. C           CALL RANK(A,R,N)
  10359. C
  10360. C        DESCRIPTION OF PARAMETERS
  10361. C           A - INPUT VECTOR OF N VALUES
  10362. C           R - OUTPUT VECTOR OF LENGTH N. SMALLEST VALUE IS RANKED 1,
  10363. C               LARGEST IS RANKED N. TIES ARE ASSIGNED AVERAGE OF TIED
  10364. C               RANKS
  10365. C           N - NUMBER OF VALUES
  10366. C
  10367. C        REMARKS
  10368. C           NONE
  10369. C
  10370. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10371. C           NONE
  10372. C
  10373. C        METHOD
  10374. C           VECTOR IS SEARCHED FOR SUCCESSIVELY LARGER ELEMENTS. IF TIES
  10375. C           OCCUR, THEY ARE LOCATED AND THEIR RANK VALUE COMPUTED.
  10376. C           FOR EXAMPLE, IF 2 VALUES ARE TIED FOR SIXTH RANK, THEY ARE
  10377. C           ASSIGNED A RANK OF 6.5 (=(6+7)/2)
  10378. C
  10379. C     ..................................................................
  10380. C
  10381.       SUBROUTINE RANK(A,R,N)
  10382.       DIMENSION A(1),R(1)
  10383. C
  10384. C        INITIALIZATION
  10385. C
  10386.       DO 10 I=1,N
  10387.    10 R(I)=0.0
  10388. C
  10389. C        FIND RANK OF DATA
  10390. C
  10391.       DO 100 I=1,N
  10392. C
  10393. C        TEST WHETHER DATA POINT IS ALREADY RANKED
  10394. C
  10395.       IF(R(I)) 20, 20, 100
  10396. C
  10397. C        DATA POINT TO BE RANKED
  10398. C
  10399.    20 SMALL=0.0
  10400.       EQUAL=0.0
  10401.       X=A(I)
  10402.       DO 50 J=1,N
  10403.       IF(A(J)-X) 30, 40, 50
  10404. C        COUNT NUMBER OF DATA POINTS WHICH ARE SMALLER
  10405. C
  10406. C
  10407.    30 SMALL=SMALL+1.0
  10408.       GO TO 50
  10409. C
  10410. C        COUNT NUMBER OF DATA POINTS WHICH ARE EQUAL
  10411. C
  10412.    40 EQUAL=EQUAL+1.0
  10413.       R(J)=-1.0
  10414.    50 CONTINUE
  10415. C
  10416. C        TEST FOR TIE
  10417. C
  10418.       IF(EQUAL-1.0) 60, 60, 70
  10419. C
  10420. C        STORE RANK OF DATA POINT WHERE NO TIE
  10421. C
  10422.    60 R(I)=SMALL+1.0
  10423.       GO TO 100
  10424. C
  10425. C        CALCULATE RANK OF TIED DATA POINTS
  10426. C
  10427.    70 P=SMALL + (EQUAL + 1.0)*0.5
  10428.       DO 90 J=I,N
  10429.       IF(R(J)+1.0) 90, 80, 90
  10430.    80 R(J)=P
  10431.    90 CONTINUE
  10432.   100 CONTINUE
  10433.       RETURN
  10434.       END
  10435. C
  10436. C     ..................................................................
  10437. C
  10438. C        SUBROUTINE RCPY
  10439. C
  10440. C        PURPOSE
  10441. C           COPY SPECIFIED ROW OF A MATRIX INTO A VECTOR
  10442. C
  10443. C        USAGE
  10444. C           CALL RCPY (A,L,R,N,M,MS)
  10445. C
  10446. C        DESCRIPTION OF PARAMETERS
  10447. C           A - NAME OF INPUT MATRIX
  10448. C           L - ROW OF A TO BE MOVED TO R
  10449. C           R - NAME OF OUTPUT VECTOR OF LENGTH M
  10450. C           N - NUMBER OR ROWS IN A
  10451. C           M - NUMBER OF COLUMNS IN A
  10452. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  10453. C                  0 - GENERAL
  10454. C                  1 - SYMMETRIC
  10455. C                  2 - DIAGONAL
  10456. C
  10457. C        REMARKS
  10458. C           NONE
  10459. C
  10460. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10461. C           LOC
  10462. C
  10463. C        METHOD
  10464. C           ELEMENTS OF ROW L ARE MOVED TO CORRESPONDING POSITIONS
  10465. C           OF VECTOR R
  10466. C
  10467. C     ..................................................................
  10468. C
  10469.       SUBROUTINE RCPY(A,L,R,N,M,MS)
  10470.       DIMENSION A(1),R(1)
  10471. C
  10472.       DO 3 J=1,M
  10473. C
  10474. C        LOCATE ELEMENT FOR ANY MATRIX STORAGE MODE
  10475. C
  10476.       CALL LOC(L,J,LJ,N,M,MS)
  10477. C
  10478. C        TEST FOR ZERO ELEMENT IN DIAGONAL MATRIX
  10479. C
  10480.       IF(LJ) 1,2,1
  10481. C
  10482. C        MOVE ELEMENT TO R
  10483. C
  10484.     1 R(J)=A(LJ)
  10485.       GO TO 3
  10486.     2 R(J)=0.0
  10487.     3 CONTINUE
  10488.       RETURN
  10489.       END
  10490. C
  10491. C     ..................................................................
  10492. C
  10493. C        SUBROUTINE RCUT
  10494. C
  10495. C        PURPOSE
  10496. C           PARTITION A MATRIX BETWEEN SPECIFIED ROWS TO FORM TWO
  10497. C           RESULTANT MATRICES
  10498. C
  10499. C        USAGE
  10500. C           CALL RCUT (A,L,R,S,N,M,MS)
  10501. C
  10502. C        DESCRIPTION OF PARAMETERS
  10503. C           A - NAME OF INPUT MATRIX
  10504. C           L - ROW OF A ABOVE WHICH PARTITIONING TAKES PLACE
  10505. C           R - NAME OF MATRIX TO BE FORMED FROM UPPER PORTION OF A
  10506. C           S - NAME OF MATRIX TO BE FORMED FROM LOWER PORTION OF A
  10507. C           N - NUMBER OF ROWS IN A
  10508. C           M - NUMBER OF COLUMNS IN A
  10509. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  10510. C                  0 - GENERAL
  10511. C                  1 - SYMMETRIC
  10512. C                  2 - DIAGONAL
  10513. C
  10514. C        REMARKS
  10515. C           MATRIX R CANNOT BE IN SAME LOCATION AS MATRIX A
  10516. C           MATRIX S CANNOT BE IN SAME LOCATION AS MATRIX A
  10517. C           MATRIX R CANNOT BE IN SAME LOCATION AS MATRIX S
  10518. C           MATRIX R AND MATRIX S ARE ALWAYS GENERAL MATRICES
  10519. C
  10520. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10521. C           LOC
  10522. C
  10523. C        METHOD
  10524. C           ELEMENTS OF MATRIX A ABOVE ROW L ARE MOVED TO FORM MATRIX R
  10525. C           OF L-1 ROWS AND M COLUMNS. ELEMENTS OF MATRIX A IN ROW L
  10526. C           AND BELOW ARE MOVED TO FORM MATRIX S OF N-L+1 ROWS AND M
  10527. C           COLUMNS
  10528. C
  10529. C     ..................................................................
  10530. C
  10531.       SUBROUTINE RCUT(A,L,R,S,N,M,MS)
  10532.       DIMENSION A(1),R(1),S(1)
  10533. C
  10534.       IR=0
  10535.       IS=0
  10536.       DO 70 J=1,M
  10537.       DO 70 I=1,N
  10538. C
  10539. C        FIND LOCATION IN OUTPUT MATRIX AND SET TO ZERO
  10540. C
  10541.       IF(I-L) 20,10,10
  10542.    10 IS=IS+1
  10543.       S(IS)=0.0
  10544.       GO TO 30
  10545.    20 IR=IR+1
  10546.       R(IR)=0.0
  10547. C
  10548. C        LOCATE ELEMENT FOR ANY MATRIX STORAGE MODE
  10549. C
  10550.    30 CALL LOC(I,J,IJ,N,M,MS)
  10551. C
  10552. C        TEST FOR ZERO ELEMENT IN DIAGONAL MATRIX
  10553. C
  10554.       IF(IJ) 40,70,40
  10555. C
  10556. C        DETERMINE WHETHER ABOVE OR BELOW L
  10557. C
  10558.    40 IF(I-L) 60,50,50
  10559.    50 S(IS)=A(IJ)
  10560.       GO TO 70
  10561.    60 R(IR)=A(IJ)
  10562.    70 CONTINUE
  10563.       RETURN
  10564.       END
  10565. C
  10566. C     ..................................................................
  10567. C
  10568. C        FUNCTION RECP
  10569. C
  10570. C        PURPOSE
  10571. C           CALCULATE RECIPROCAL OF AN ELEMENT. THIS IS A FORTRAN
  10572. C           FUNCTION SUBPROGRAM WHICH MAY BE USED AS AN ARGUMENT BY
  10573. C           SUBROUTINE MFUN.
  10574. C
  10575. C        USAGE
  10576. C           RECP(E)
  10577. C
  10578. C        DESCRIPTION OF PARAMETERS
  10579. C           E - MATRIX ELEMENT
  10580. C
  10581. C        REMARKS
  10582. C           RECIPROCAL OF ZERO IS TAKEN TO BE 1.0E75
  10583. C
  10584. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10585. C           NONE
  10586. C
  10587. C        METHOD
  10588. C           RECIPROCAL OF ELEMENT E IS PLACED IN RECP
  10589. C
  10590. C     ..................................................................
  10591. C
  10592.       FUNCTION RECP(E)
  10593. C
  10594.       BIG=1.0E37
  10595. C
  10596. C        TEST ELEMENT FOR ZERO
  10597. C
  10598.       IF(E) 1,2,1
  10599. C
  10600. C        IF NON-ZERO, CALCULATE RECIPROCAL
  10601. C
  10602.     1 RECP=1.0/E
  10603.       RETURN
  10604. C
  10605. C        IF ZERO, SET EQUAL TO INFINITY
  10606. C
  10607.     2 RECP=SIGN(BIG,E)
  10608.       RETURN
  10609.       END
  10610. C
  10611. C     ..................................................................
  10612. C
  10613. C        SUBROUTINE RINT
  10614. C
  10615. C        PURPOSE
  10616. C           INTERCHANGE TWO ROWS OF A MATRIX
  10617. C
  10618. C        USAGE
  10619. C           CALL RINT(A,N,M,LA,LB)
  10620. C
  10621. C        DESCRIPTION OF PARAMETERS
  10622. C           A  - NAME OF MATRIX
  10623. C           N  - NUMBER OF ROWS IN A
  10624. C           M  - NUMBER OF COLUMNS IN A
  10625. C           LA - ROW TO BE INTERCHANGED WITH ROW LB
  10626. C           LB - ROW TO BE INTERCHANGED WITH ROW LA
  10627. C
  10628. C        REMARKS
  10629. C           MATRIX A MUST BE A GENERAL MATRIX
  10630. C
  10631. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10632. C           NONE
  10633. C
  10634. C        METHOD
  10635. C           EACH ELEMENT OF ROW LA IS INTERCHANGED WITH CORRESPONDING
  10636. C           ELEMENT OF ROW LB
  10637. C
  10638. C     ..................................................................
  10639. C
  10640.       SUBROUTINE RINT(A,N,M,LA,LB)
  10641.       DIMENSION A(1)
  10642. C
  10643.       LAJ=LA-N
  10644.       LBJ=LB-N
  10645.       DO 3 J=1,M
  10646. C
  10647. C        LOCATE ELEMENTS IN BOTH ROWS
  10648. C
  10649.       LAJ=LAJ+N
  10650.       LBJ=LBJ+N
  10651. C
  10652. C        INTERCHANGE ELEMENTS
  10653. C
  10654.       SAVE=A(LAJ)
  10655.       A(LAJ)=A(LBJ)
  10656.     3 A(LBJ)=SAVE
  10657.       RETURN
  10658.       END
  10659. C
  10660. C     ..................................................................
  10661. C
  10662. C        SUBROUTINE RK1
  10663. C
  10664. C        PURPOSE
  10665. C           INTEGRATES A FIRST ORDER DIFFERENTIAL EQUATION
  10666. C           DY/DX=FUN(X,Y) UP TO A SPECIFIED FINAL VALUE
  10667. C
  10668. C        USAGE
  10669. C           CALL RK1(FUN,HI,XI,YI,XF,YF,ANSX,ANSY,IER)
  10670. C
  10671. C        DESCRIPTION OF PARAMETERS
  10672. C           FUN -USER-SUPPLIED FUNCTION SUBPROGRAM WITH ARGUMENTS X,Y
  10673. C                WHICH GIVES DY/DX
  10674. C           HI  -THE STEP SIZE
  10675. C           XI  -INITIAL VALUE OF X
  10676. C           YI  -INITIAL VALUE OF Y WHERE YI=Y(XI)
  10677. C           XF  -FINAL VALUE OF X
  10678. C           YF  -FINAL VALUE OF Y
  10679. C           ANSX-RESULTANT FINAL VALUE OF X
  10680. C           ANSY-RESULTANT FINAL VALUE OF Y
  10681. C                EITHER ANSX WILL EQUAL XF OR ANSY WILL EQUAL YF
  10682. C                DEPENDING ON WHICH IS REACHED FIRST
  10683. C           IER -ERROR CODE
  10684. C                IER=0 NO ERROR
  10685. C                IER=1 STEP SIZE IS ZERO
  10686. C
  10687. C        REMARKS
  10688. C           IF XI IS GREATER THAN XF, ANSX=XI AND ANSY=YI
  10689. C           IF H IS ZERO, IER IS SET TO ONE, ANSX IS SET TO XI, AND
  10690. C           ANSY IS SET TO ZERO
  10691. C
  10692. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10693. C           FUN IS A TWO ARGUMENT FUNCTION SUBPROGRAM FURNISHED BY THE
  10694. C           USER.  DY/DX=FUN (X,Y)
  10695. C           CALLING PROGRAM MUST HAVE FORTRAN EXTERNAL STATEMENT
  10696. C           CONTAINING NAMES OF FUNCTION SUBPROGRAMS LISTED IN CALL TO
  10697. C           RK1
  10698. C
  10699. C        METHOD
  10700. C           USES FOURTH ORDER RUNGE-KUTTA INTEGRATION PROCESS ON A
  10701. C           RECURSIVE BASIS AS SHOWN IN F.B. HILDEBRAND, 'INTRODUCTION
  10702. C           TO NUMERICAL ANALYSIS',MCGRAW-HILL,1956. PROCESS IS
  10703. C           TERMINATED AND FINAL VALUE ADJUSTED WHEN EITHER XF OR YF
  10704. C           IS REACHED.
  10705. C
  10706. C     ..................................................................
  10707. C
  10708.       SUBROUTINE RK1(FUN,HI,XI,YI,XF,YF,ANSX,ANSY,IER)
  10709. C
  10710. C        ...............................................................
  10711. C
  10712. C        IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  10713. C        C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  10714. C        STATEMENT WHICH FOLLOWS.
  10715. C
  10716. C     DOUBLE PRECISION HI,XI,YI,XF,YF,ANSX,ANSY,H,XN,YN,HNEW,XN1,YN1,
  10717. C    1                 XX,YY,XNEW,YNEW,H2,T1,T2,T3,T4,FUN
  10718. C
  10719. C        THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  10720. C        APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  10721. C        ROUTINE.
  10722. C
  10723. C        USER FUNCTION SUBPROGRAM, FUN, MUST BE IN DOUBLE PRECISION.
  10724. C
  10725. C        ...............................................................
  10726. C
  10727. C     IF XF IS LESS THAN OR EQUAL TO XI, RETURN XI,YI AS ANSWER
  10728. C
  10729.       IER=0
  10730.       IF(XF-XI) 11,11,12
  10731.    11 ANSX=XI
  10732.       ANSY=YI
  10733.       RETURN
  10734. C
  10735. C     TEST INTERVAL VALUE
  10736. C
  10737.    12 H=HI
  10738.       IF(HI) 16,14,20
  10739.    14 IER=1
  10740.       ANSX=XI
  10741.       ANSY=0.0
  10742.       RETURN
  10743.    16 H=-HI
  10744. C
  10745. C     SET XN=INITIAL X,YN=INITIAL Y
  10746. C
  10747.    20 XN=XI
  10748.       YN=YI
  10749. C
  10750. C     INTEGRATE ONE TIME STEP
  10751. C
  10752.       HNEW=H
  10753.       JUMP=1
  10754.       GO TO 170
  10755.    25 XN1=XX
  10756.       YN1=YY
  10757. C
  10758. C     COMPARE XN1 (=X(N+1)) TO X FINAL AND BRANCH ACCORDINGLY
  10759. C
  10760.       IF(XN1-XF)50,30,40
  10761. C
  10762. C     XN1=XF, RETURN (XF,YN1) AS ANSWER
  10763. C
  10764.    30 ANSX=XF
  10765.       ANSY=YN1
  10766.       GO TO 160
  10767. C
  10768. C     XN1 GREATER THAN XF, SET NEW STEP SIZE AND INTEGRATE ONE STEP
  10769. C     RETURN RESULTS OF INTEGRATION AS ANSWER
  10770. C
  10771.    40 HNEW=XF-XN
  10772.       JUMP=2
  10773.       GO TO 170
  10774.    45 ANSX=XX
  10775.       ANSY=YY
  10776.       GO TO 160
  10777. C
  10778. C     XN1 LESS THAN X FINAL, CHECK IF (YN,YN1) SPAN Y FINAL
  10779. C
  10780. C
  10781.    50 IF((YN1-YF)*(YF-YN))60,70,110
  10782. C
  10783. C     YN1 AND YN DO NOT SPAN YF. SET (XN,YN) AS (XN1,YN1) AND REPEAT
  10784. C
  10785.    60 YN=YN1
  10786.       XN=XN1
  10787.       GO TO 170
  10788. C
  10789. C     EITHER YN OR YN1 =YF. CHECK WHICH AND SET PROPER (X,Y) AS ANSWER
  10790. C
  10791.    70 IF(YN1-YF)80,100,80
  10792.    80 ANSY=YN
  10793.       ANSX=XN
  10794.       GO TO 160
  10795.   100 ANSY=YN1
  10796.       ANSX=XN1
  10797.       GO TO 160
  10798. C
  10799. C     YN AND YN1 SPAN YF. TRY TO FIND X VALUE ASSOCIATED WITH YF
  10800. C
  10801.   110 DO 140 I=1,10
  10802. C
  10803. C     INTERPOLATE TO FIND NEW TIME STEP AND INTEGRATE ONE STEP
  10804. C     TRY TEN INTERPOLATIONS AT MOST
  10805. C
  10806.       HNEW=((YF-YN )/(YN1-YN))*(XN1-XN)
  10807.       JUMP=3
  10808.       GO TO 170
  10809.   115 XNEW=XX
  10810.       YNEW=YY
  10811. C
  10812. C     COMPARE COMPUTED Y VALUE WITH YF AND BRANCH
  10813. C
  10814.       IF(YNEW-YF)120,150,130
  10815. C
  10816. C     ADVANCE, YF IS BETWEEN YNEW AND YN1
  10817. C
  10818.   120 YN=YNEW
  10819.       XN=XNEW
  10820.       GO TO 140
  10821. C
  10822. C     ADVANCE, YF IS BETWEEN YN AND YNEW
  10823. C
  10824.   130 YN1=YNEW
  10825.       XN1=XNEW
  10826.   140 CONTINUE
  10827. C
  10828. C     RETURN (XNEW,YF) AS ANSWER
  10829. C
  10830.   150 ANSX=XNEW
  10831.       ANSY=YF
  10832.   160 RETURN
  10833. C
  10834.   170 H2=HNEW/2.0
  10835.       T1=HNEW*FUN(XN,YN)
  10836.       T2=HNEW*FUN(XN+H2,YN+T1/2.0)
  10837.       T3=HNEW*FUN(XN+H2,YN+T2/2.0)
  10838.       T4=HNEW*FUN(XN+HNEW,YN+T3)
  10839.       YY=YN+(T1+2.0*T2+2.0*T3+T4)/6.0
  10840.       XX=XN+HNEW
  10841.       GO TO (25,45,115), JUMP
  10842. C
  10843.       END
  10844. C
  10845. C     ..................................................................
  10846. C
  10847. C        SUBROUTINE RK2
  10848. C
  10849. C        PURPOSE
  10850. C           INTEGRATES A FIRST ORDER DIFFERENTIAL EQUATION
  10851. C           DY/DX=FUN(X,Y) AND PRODUCES A TABLE OF INTEGRATED VALUES
  10852. C
  10853. C        USAGE
  10854. C           CALL RK2(FUN,H,XI,YI,K,N,VEC)
  10855. C
  10856. C        DESCRIPTION OF PARAMETERS
  10857. C           FUN-USER-SUPPLIED FUNCTION SUBPROGRAM WITH ARGUMENTS X,Y
  10858. C               WHICH GIVES DY/DX
  10859. C           H  -STEP SIZE
  10860. C           XI -INITIAL VALUE OF X
  10861. C           YI -INITIAL VALUE OF Y WHERE YI=Y(XI)
  10862. C           K  -THE INTERVAL AT WHICH COMPUTED VALUES ARE TO BE STORED
  10863. C           N  -THE NUMBER OF VALUES TO BE STORED
  10864. C           VEC-THE RESULTANT VECTOR OF LENGTH N IN WHICH COMPUTED
  10865. C               VALUES OF Y ARE TO BE STORED
  10866. C
  10867. C        REMARKS
  10868. C           NONE
  10869. C
  10870. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10871. C           FUN - USER-SUPPLIED FUNCTION SUBPROGRAM FOR DY/DX
  10872. C           CALLING PROGRAM MUST HAVE FORTRAN EXTERNAL STATEMENT
  10873. C           CONTAINING NAMES OF FUNCTION SUBPROGRAMS LISTED IN CALL TO
  10874. C           RK2
  10875. C
  10876. C        METHOD
  10877. C           FOURTH ORDER RUNGE-KUTTA INTEGRATION ON A RECURSIVE BASIS AS
  10878. C           SHOWN IN F.B. HILDEBRAND, 'INTRODUCTION TO NUMERICAL
  10879. C           ANALYSIS', MCGRAW-HILL, NEW YORK, 1956
  10880. C
  10881. C     ..................................................................
  10882. C
  10883.       SUBROUTINE RK2(FUN,H,XI,YI,K,N,VEC)
  10884. C
  10885. C        ...............................................................
  10886. C
  10887. C        IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  10888. C        C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  10889. C        STATEMENT WHICH FOLLOWS.
  10890. C
  10891. C     DOUBLE PRECISION H,XI,YI,VEC,H2,Y,X,T1,T2,T3,T4,FUN
  10892. C
  10893. C        THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  10894. C        APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  10895. C        ROUTINE.
  10896. C
  10897. C        USER FUNCTION SUBPROGRAM, FUN, MUST BE IN DOUBLE PRECISION.
  10898. C
  10899. C        ...............................................................
  10900. C
  10901.       DIMENSION VEC(1)
  10902.       H2=H/2.
  10903.       Y=YI
  10904.       X=XI
  10905.       DO 2 I=1,N
  10906.       DO 1 J=1,K
  10907.       T1=H*FUN(X,Y)
  10908.       T2=H*FUN(X+H2,Y+T1/2.)
  10909.       T3=H*FUN(X+H2,Y+T2/2.)
  10910.       T4=H*FUN(X+H,Y+T3)
  10911.       Y= Y+(T1+2.*T2+2.*T3+T4)/6.
  10912.     1 X=X+H
  10913.     2 VEC(I)=Y
  10914.       RETURN
  10915.       END
  10916. C
  10917. C     ..................................................................
  10918. C
  10919. C        SUBROUTINE RSRT
  10920. C
  10921. C        PURPOSE
  10922. C           SORT ROWS OF A MATRIX
  10923. C
  10924. C        USAGE
  10925. C           CALL RSRT(A,B,R,N,M,MS)
  10926. C
  10927. C        DESCRIPTION OF PARAMETERS
  10928. C           A - NAME OF INPUT MATRIX TO BE SORTED
  10929. C           B - NAME OF INPUT VECTOR WHICH CONTAINS SORTING KEY
  10930. C           R - NAME OF SORTED OUTPUT MATRIX
  10931. C           N - NUMBER OF ROWS IN A AND R AND LENGTH OF B
  10932. C           M - NUMBER OF COLUMNS IN A AND R
  10933. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  10934. C                  0 - GENERAL
  10935. C                  1 - SYMMETRIC
  10936. C                  2 - DIAGONAL
  10937. C
  10938. C        REMARKS
  10939. C           MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRIX A
  10940. C           MATRIX R IS ALWAYS A GENERAL MATRIX
  10941. C           N MUST BE GREATER THAN ONE.
  10942. C        M ALSO MUST BE AT LEAST TWO
  10943. C
  10944. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  10945. C           LOC
  10946. C
  10947. C        METHOD
  10948. C           ROWS OF INPUT MATRIX A ARE SORTED TO FORM OUTPUT MATRIX R.
  10949. C           THE SORTED ROW SEQUENCE IS DETERMINED BY THE VALUES OF
  10950. C           ELEMENTS IN COLUMN VECTOR B. THE LOWEST VALUED ELEMENT IN
  10951. C           B WILL CAUSE THE CORRESPONDING ROW OF A TO BE PLACED IN THE
  10952. C           FIRST ROW OF R. THE HIGHEST VALUED ELEMENT OF B WILL CAUSE
  10953. C           THE CORRESPONDING ROW OF A TO BE PLACED IN THE LAST ROW OF
  10954. C           R. IF DUPLICATE VALUES EXIST IN B, THE CORRESPONDING ROWS
  10955. C           OF A ARE MOVED TO R IN THE SAME ORDER AS IN A.
  10956. C
  10957. C     ..................................................................
  10958. C
  10959.       SUBROUTINE RSRT(A,B,R,N,M,MS)
  10960.       DIMENSION A(1),B(1),R(1)
  10961. C
  10962. C        MOVE SORTING KEY VECTOR TO FIRST COLUMN OF OUTPUT MATRIX
  10963. C        AND BUILD ORIGINAL SEQUENCE LIST IN SECOND COLUMN
  10964. C
  10965.       DO 10 I=1,N
  10966.       R(I)=B(I)
  10967.       I2=I+N
  10968.    10 R(I2)=I
  10969. C
  10970. C        SORT ELEMENTS IN SORTING KEY VECTOR (ORIGINAL SEQUENCE LIST
  10971. C        IS RESEQUENCED ACCORDINGLY)
  10972. C
  10973.       L=N+1
  10974.    20 ISORT=0
  10975.       L=L-1
  10976.       DO 40 I=2,L
  10977.       IF(R(I)-R(I-1)) 30,40,40
  10978.    30 ISORT=1
  10979.       RSAVE=R(I)
  10980.       R(I)=R(I-1)
  10981.       R(I-1)=RSAVE
  10982.       I2=I+N
  10983.       SAVER=R(I2)
  10984.       R(I2)=R(I2-1)
  10985.       R(I2-1)=SAVER
  10986.    40 CONTINUE
  10987.       IF(ISORT) 20,50,20
  10988. C
  10989. C        MOVE ROWS FROM MATRIX A TO MATRIX R (NUMBER IN SECOND COLUMN
  10990. C        OF R REPRESENTS ROW NUMBER OF MATRIX A TO BE MOVED)
  10991. C
  10992.    50 DO 80 I=1,N
  10993. C
  10994. C        GET ROW NUMBER IN MATRIX A
  10995. C
  10996.       I2=I+N
  10997.       IN=R(I2)
  10998. C
  10999.       IR=I-N
  11000.       DO 80 J=1,M
  11001. C
  11002. C        LOCATE ELEMENT IN OUTPUT MATRIX
  11003. C
  11004.       IR=IR+N
  11005. C
  11006. C        LOCATE ELEMENT IN INPUT MATRIX
  11007. C
  11008.       CALL LOC(IN,J,IA,N,M,MS)
  11009. C
  11010. C        TEST FOR ZERO ELEMENT IN DIAGONAL MATRIX
  11011. C
  11012.       IF(IA) 60,70,60
  11013. C
  11014. C        MOVE ELEMENT TO OUTPUT MATRIX
  11015. C
  11016.    60 R(IR)=A(IA)
  11017.       GO TO 80
  11018.    70 R(IR)=0
  11019.    80 CONTINUE
  11020.       RETURN
  11021.       END
  11022. C
  11023. C     ..................................................................
  11024. C
  11025. C        SUBROUTINE RSUM
  11026. C
  11027. C        PURPOSE
  11028. C           SUM ELEMENTS OF EACH ROW TO FORM COLUMN VECTOR
  11029. C
  11030. C        USAGE
  11031. C           CALL RSUM (A,R,N,M,MS)
  11032. C
  11033. C        DESCRIPTION OF PARAMETERS
  11034. C           A - NAME OF INPUT MATRIX
  11035. C           R - NAME OF VECTOR OF LENGTH N
  11036. C           N - NUMBER OF ROWS IN A
  11037. C           M - NUMBER OF COLUMNS IN A
  11038. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  11039. C                  0 - GENERAL
  11040. C                  1 - SYMMETRIC
  11041. C                  2 - DIAGONAL
  11042. C
  11043. C        REMARKS
  11044. C           VECTOR R CANNOT BE IN THE SAME LOCATION AS MATRIX A
  11045. C           UNLESS A IS GENERAL
  11046. C
  11047. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11048. C           LOC
  11049. C
  11050. C        METHOD
  11051. C           ELEMENTS ARE SUMMED ACROSS EACH ROW INTO A CORRESPONDING
  11052. C           ELEMENT OF OUTPUT COLUMN VECTOR R
  11053. C
  11054. C     ..................................................................
  11055. C
  11056.       SUBROUTINE RSUM(A,R,N,M,MS)
  11057.       DIMENSION A(1),R(1)
  11058. C
  11059.       DO 3 I=1,N
  11060. C
  11061. C        CLEAR OUTPUT LOCATION
  11062. C
  11063.       R(I)=0.0
  11064. C
  11065.       DO 3 J=1,M
  11066. C
  11067. C        LOCATE ELEMENT FOR ANY MATRIX STORAGE MODE
  11068. C
  11069.       CALL LOC(I,J,IJ,N,M,MS)
  11070. C
  11071. C        TEST FOR ZERO ELEMENT IN DIAGONAL MATRIX
  11072. C
  11073.       IF(IJ) 2,3,2
  11074. C
  11075. C        ACCUMULATE IN OUTPUT VECTOR
  11076. C
  11077.     2 R(I)=R(I)+A(IJ)
  11078.     3 CONTINUE
  11079.       RETURN
  11080.       END
  11081. C
  11082. C     ..................................................................
  11083. C
  11084. C        SUBROUTINE RTAB
  11085. C
  11086. C        PURPOSE
  11087. C           TABULATE ROWS OF A MATRIX TO FORM A SUMMARY MATRIX
  11088. C
  11089. C        USAGE
  11090. C           CALL RTAB(A,B,R,S,N,M,MS,L)
  11091. C
  11092. C        DESCRIPTION OF PARAMETERS
  11093. C           A - NAME OF INPUT MATRIX
  11094. C           B - NAME OF INPUT VECTOR OF LENGTH N CONTAINING KEY
  11095. C           R - NAME OF OUTPUT MATRIX CONTAINING SUMMARY OF ROW DATA.
  11096. C               IT IS INITIALLY SET TO ZERO BY THIS SUBROUTINE.
  11097. C           S - NAME OF OUTPUT VECTOR OF LENGTH L+1 CONTAINING COUNTS
  11098. C           N - NUMBER OF ROWS IN A
  11099. C           M - NUMBER OF COLUMNS IN A AND R
  11100. C           L - NUMBER OF ROWS IN R
  11101. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  11102. C                  0 - GENERAL
  11103. C                  1 - SYMMETRIC
  11104. C                  2 - DIAGONAL
  11105. C
  11106. C        REMARKS
  11107. C           MATRIX R IS ALWAYS A GENERAL MATRIX
  11108. C
  11109. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11110. C           LOC
  11111. C           RADD
  11112. C
  11113. C        METHOD
  11114. C           ROWS OF DATA IN MATRIX A ARE TABULATED BASED ON THE KEY
  11115. C           CONTAINED IN VECTOR B. THE FLOATING POINT NUMBER IN B(I) IS
  11116. C           TRUNCATED TO FORM J. THE ITH ROW OF A IS ADDED TO THE JTH
  11117. C           ROW OF R ELEMENT BY ELEMENT AND ONE IS ADDED TO S(J). IF J
  11118. C           IS NOT BETWEEN ONE AND L, ONE IS ADDED TO S(L+1). THIS
  11119. C           PROCEDURE IS REPEATED FOR EVERY ELEMENT IN VECTOR B.
  11120. C           UPON COMPLETION, THE OUTPUT MATRIX R CONTAINS A SUMMARY OF
  11121. C           ROW DATA AS SPECIFIED BY VECTOR B. EACH ELEMENT IN VECTOR S
  11122. C           CONTAINS A COUNT OF THE NUMBER OF ROWS OF A USED TO FORM THE
  11123. C           CORRESPONDING ROW OF R. ELEMENT S(L+1) CONTAINS A COUNT OF
  11124. C           THE NUMBER OF ROWS OF A NOT INCLUDED IN R AS A RESULT OF J
  11125. C           BEING LESS THAN ONE OR GREATER THAN L.
  11126. C
  11127. C     ..................................................................
  11128. C
  11129.       SUBROUTINE RTAB(A,B,R,S,N,M,MS,L)
  11130.       DIMENSION A(1),B(1),R(1),S(1)
  11131. C
  11132. C        CLEAR OUTPUT AREAS
  11133. C
  11134.       CALL LOC(M,L,IT,M,L,0)
  11135.       DO 10 IR=1,IT
  11136.    10 R(IR)=0.0
  11137.       DO 20 IS=1,L
  11138.    20 S(IS)=0.0
  11139.       S(L+1)=0.0
  11140. C
  11141.       DO 60 I=1,N
  11142. C
  11143. C        TEST FOR THE KEY OUTSIDE THE RANGE
  11144. C
  11145.       JR=B(I)
  11146.       IF (JR-1) 50,40,30
  11147.    30 IF (JR-L) 40,40,50
  11148. C
  11149. C
  11150. C        ADD ROW OF A TO ROW OF R AND 1 TO COUNT
  11151. C
  11152.    40 CALL RADD(A,I,R,JR,N,M,MS,L)
  11153.       S(JR)=S(JR)+1.0
  11154.       GO TO 60
  11155. C
  11156.    50 S(L+1)=S(L+1)+1.0
  11157.    60 CONTINUE
  11158.       RETURN
  11159.       END
  11160. C
  11161. C     ..................................................................
  11162. C
  11163. C        SUBROUTINE RTIE
  11164. C
  11165. C        PURPOSE
  11166. C           ADJOIN TWO MATRICES WITH SAME COLUMN DIMENSION TO FORM ONE
  11167. C           RESULTANT MATRIX (SEE METHOD)
  11168. C
  11169. C        USAGE
  11170. C           CALL RTIE(A,B,R,N,M,MSA,MSB,L)
  11171. C
  11172. C        DESCRIPTION OF PARAMETERS
  11173. C           A - NAME OF FIRST INPUT MATRIX
  11174. C           B - NAME OF SECOND INPUT MATRIX
  11175. C           R - NAME OF OUTPUT MATRIX
  11176. C           N - NUMBER OF ROWS IN A
  11177. C           M - NUMBER OF COLUMNS IN A,B,R
  11178. C           MSA - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  11179. C                  0 - GENERAL
  11180. C                  1 - SYMMETRIC
  11181. C                  2 - DIAGONAL
  11182. C           MSB - SAME AS MSA EXCEPT FOR MATRIX B
  11183. C           L - NUMBER OF ROWS IN B
  11184. C
  11185. C        REMARKS
  11186. C           MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRICES A OR B
  11187. C           MATRIX R IS ALWAYS A GENERAL MATRIX
  11188. C           MATRIX A MUST HAVE THE SAME NUMBER OF COLUMNS AS MATRIX B
  11189. C
  11190. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11191. C           LOC
  11192. C
  11193. C        METHOD
  11194. C           MATRIX B IS ATTACHED TO THE BOTTOM OF MATRIX A .
  11195. C           THE RESULTANT MATRIX R CONTAINS N+L ROWS AND M COLUMNS.
  11196. C
  11197. C     ..................................................................
  11198. C
  11199.       SUBROUTINE RTIE(A,B,R,N,M,MSA,MSB,L)
  11200.       DIMENSION A(1),B(1),R(1)
  11201. C
  11202.       NN=N
  11203.       IR=0
  11204.       NX=NN
  11205.       MSX=MSA
  11206.       DO 9 J=1,M
  11207.       DO 8 II=1,2
  11208.       DO 7 I=1,NN
  11209.       IR=IR+1
  11210.       R(IR)=0.0
  11211. C
  11212. C        LOCATE ELEMENT FOR ANY MATRIX STORAGE MODE
  11213. C
  11214.       CALL LOC(I,J,IJ,NN,M,MSX)
  11215. C
  11216. C        TEST FOR ZERO ELEMENT IN DIAGONAL MATRIX
  11217. C
  11218.       IF(IJ) 2,7,2
  11219. C
  11220. C        MOVE ELEMENT TO MATRIX R
  11221. C
  11222.     2 GO TO(3,4),II
  11223.     3 R(IR)=A(IJ)
  11224.       GO TO 7
  11225.     4 R(IR)=B(IJ)
  11226.     7 CONTINUE
  11227. C
  11228. C        REPEAT ABOVE FOR MATRIX B
  11229. C
  11230.       MSX=MSB
  11231.     8 NN=L
  11232. C
  11233. C        RESET FOR NEXT COLUMN
  11234. C
  11235.       MSX=MSA
  11236.     9 NN=NX
  11237.       RETURN
  11238.       END
  11239. C
  11240. C     ..................................................................
  11241. C
  11242. C        SUBROUTINE RTMI
  11243. C
  11244. C        PURPOSE
  11245. C           TO SOLVE GENERAL NONLINEAR EQUATIONS OF THE FORM FCT(X)=0
  11246. C           BY MEANS OF MUELLER-S ITERATION METHOD.
  11247. C
  11248. C        USAGE
  11249. C           CALL RTMI (X,F,FCT,XLI,XRI,EPS,IEND,IER)
  11250. C           PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT.
  11251. C
  11252. C        DESCRIPTION OF PARAMETERS
  11253. C           X      - RESULTANT ROOT OF EQUATION FCT(X)=0.
  11254. C           F      - RESULTANT FUNCTION VALUE AT ROOT X.
  11255. C           FCT    - NAME OF THE EXTERNAL FUNCTION SUBPROGRAM USED.
  11256. C           XLI    - INPUT VALUE WHICH SPECIFIES THE INITIAL LEFT BOUND
  11257. C                    OF THE ROOT X.
  11258. C           XRI    - INPUT VALUE WHICH SPECIFIES THE INITIAL RIGHT BOUND
  11259. C                    OF THE ROOT X.
  11260. C           EPS    - INPUT VALUE WHICH SPECIFIES THE UPPER BOUND OF THE
  11261. C                    ERROR OF RESULT X.
  11262. C           IEND   - MAXIMUM NUMBER OF ITERATION STEPS SPECIFIED.
  11263. C           IER    - RESULTANT ERROR PARAMETER CODED AS FOLLOWS
  11264. C                     IER=0 - NO ERROR,
  11265. C                     IER=1 - NO CONVERGENCE AFTER IEND ITERATION STEPS
  11266. C                             FOLLOWED BY IEND SUCCESSIVE STEPS OF
  11267. C                             BISECTION,
  11268. C                     IER=2 - BASIC ASSUMPTION FCT(XLI)*FCT(XRI) LESS
  11269. C                             THAN OR EQUAL TO ZERO IS NOT SATISFIED.
  11270. C
  11271. C        REMARKS
  11272. C           THE PROCEDURE ASSUMES THAT FUNCTION VALUES AT INITIAL
  11273. C           BOUNDS XLI AND XRI HAVE NOT THE SAME SIGN. IF THIS BASIC
  11274. C           ASSUMPTION IS NOT SATISFIED BY INPUT VALUES XLI AND XRI, THE
  11275. C           PROCEDURE IS BYPASSED AND GIVES THE ERROR MESSAGE IER=2.
  11276. C
  11277. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11278. C           THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  11279. C           BY THE USER.
  11280. C
  11281. C        METHOD
  11282. C           SOLUTION OF EQUATION FCT(X)=0 IS DONE BY MEANS OF MUELLER-S
  11283. C           ITERATION METHOD OF SUCCESSIVE BISECTIONS AND INVERSE
  11284. C           PARABOLIC INTERPOLATION, WHICH STARTS AT THE INITIAL BOUNDS
  11285. C           XLI AND XRI. CONVERGENCE IS QUADRATIC IF THE DERIVATIVE OF
  11286. C           FCT(X) AT ROOT X IS NOT EQUAL TO ZERO. ONE ITERATION STEP
  11287. C           REQUIRES TWO EVALUATIONS OF FCT(X). FOR TEST ON SATISFACTORY
  11288. C           ACCURACY SEE FORMULAE (3,4) OF MATHEMATICAL DESCRIPTION.
  11289. C           FOR REFERENCE, SEE G. K. KRISTIANSEN, ZERO OF ARBITRARY
  11290. C           FUNCTION, BIT, VOL. 3 (1963), PP.205-206.
  11291. C
  11292. C     ..................................................................
  11293. C
  11294.       SUBROUTINE RTMI(X,F,FCT,XLI,XRI,EPS,IEND,IER)
  11295. C
  11296. C
  11297. C     PREPARE ITERATION
  11298.       IER=0
  11299.       XL=XLI
  11300.       XR=XRI
  11301.       X=XL
  11302.       TOL=X
  11303.       F=FCT(TOL)
  11304.       IF(F)1,16,1
  11305.     1 FL=F
  11306.       X=XR
  11307.       TOL=X
  11308.       F=FCT(TOL)
  11309.       IF(F)2,16,2
  11310.     2 FR=F
  11311.       IF(SIGN(1.,FL)+SIGN(1.,FR))25,3,25
  11312. C
  11313. C     BASIC ASSUMPTION FL*FR LESS THAN 0 IS SATISFIED.
  11314. C     GENERATE TOLERANCE FOR FUNCTION VALUES.
  11315.     3 I=0
  11316.       TOLF=100.*EPS
  11317. C
  11318. C
  11319. C     START ITERATION LOOP
  11320.     4 I=I+1
  11321. C
  11322. C     START BISECTION LOOP
  11323.       DO 13 K=1,IEND
  11324.       X=.5*(XL+XR)
  11325.       TOL=X
  11326.       F=FCT(TOL)
  11327.       IF(F)5,16,5
  11328.     5 IF(SIGN(1.,F)+SIGN(1.,FR))7,6,7
  11329. C
  11330. C     INTERCHANGE XL AND XR IN ORDER TO GET THE SAME SIGN IN F AND FR
  11331.     6 TOL=XL
  11332.       XL=XR
  11333.       XR=TOL
  11334.       TOL=FL
  11335.       FL=FR
  11336.       FR=TOL
  11337.     7 TOL=F-FL
  11338.       A=F*TOL
  11339.       A=A+A
  11340.       IF(A-FR*(FR-FL))8,9,9
  11341.     8 IF(I-IEND)17,17,9
  11342.     9 XR=X
  11343.       FR=F
  11344. C
  11345. C     TEST ON SATISFACTORY ACCURACY IN BISECTION LOOP
  11346.       TOL=EPS
  11347.       A=ABS(XR)
  11348.       IF(A-1.)11,11,10
  11349.    10 TOL=TOL*A
  11350.    11 IF(ABS(XR-XL)-TOL)12,12,13
  11351.    12 IF(ABS(FR-FL)-TOLF)14,14,13
  11352.    13 CONTINUE
  11353. C     END OF BISECTION LOOP
  11354. C
  11355. C     NO CONVERGENCE AFTER IEND ITERATION STEPS FOLLOWED BY IEND
  11356. C     SUCCESSIVE STEPS OF BISECTION OR STEADILY INCREASING FUNCTION
  11357. C     VALUES AT RIGHT BOUNDS. ERROR RETURN.
  11358.       IER=1
  11359.    14 IF(ABS(FR)-ABS(FL))16,16,15
  11360.    15 X=XL
  11361.       F=FL
  11362.    16 RETURN
  11363. C
  11364. C     COMPUTATION OF ITERATED X-VALUE BY INVERSE PARABOLIC INTERPOLATION
  11365.    17 A=FR-F
  11366.       DX=(X-XL)*FL*(1.+F*(A-TOL)/(A*(FR-FL)))/TOL
  11367.       XM=X
  11368.       FM=F
  11369.       X=XL-DX
  11370.       TOL=X
  11371.       F=FCT(TOL)
  11372.       IF(F)18,16,18
  11373. C
  11374. C     TEST ON SATISFACTORY ACCURACY IN ITERATION LOOP
  11375.    18 TOL=EPS
  11376.       A=ABS(X)
  11377.       IF(A-1.)20,20,19
  11378.    19 TOL=TOL*A
  11379.    20 IF(ABS(DX)-TOL)21,21,22
  11380.    21 IF(ABS(F)-TOLF)16,16,22
  11381. C
  11382. C     PREPARATION OF NEXT BISECTION LOOP
  11383.    22 IF(SIGN(1.,F)+SIGN(1.,FL))24,23,24
  11384.    23 XR=X
  11385.       FR=F
  11386.       GO TO 4
  11387.    24 XL=X
  11388.       FL=F
  11389.       XR=XM
  11390.       FR=FM
  11391.       GO TO 4
  11392. C     END OF ITERATION LOOP
  11393. C
  11394. C
  11395. C     ERROR RETURN IN CASE OF WRONG INPUT DATA
  11396.    25 IER=2
  11397.       RETURN
  11398.       END
  11399. C
  11400. C     ..................................................................
  11401. C
  11402. C        SUBROUTINE RTNI
  11403. C
  11404. C        PURPOSE
  11405. C           TO SOLVE GENERAL NONLINEAR EQUATIONS OF THE FORM F(X)=0
  11406. C           BY MEANS OF NEWTON-S ITERATION METHOD.
  11407. C
  11408. C        USAGE
  11409. C           CALL RTNI (X,F,DERF,FCT,XST,EPS,IEND,IER)
  11410. C           PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT.
  11411. C
  11412. C        DESCRIPTION OF PARAMETERS
  11413. C           X      - RESULTANT ROOT OF EQUATION F(X)=0.
  11414. C           F      - RESULTANT FUNCTION VALUE AT ROOT X.
  11415. C           DERF   - RESULTANT VALUE OF DERIVATIVE AT ROOT X.
  11416. C           FCT    - NAME OF THE EXTERNAL SUBROUTINE USED. IT COMPUTES
  11417. C                    TO GIVEN ARGUMENT X FUNCTION VALUE F AND DERIVATIVE
  11418. C                    DERF. ITS PARAMETER LIST MUST BE X,F,DERF.
  11419. C           XST    - INPUT VALUE WHICH SPECIFIES THE INITIAL GUESS OF
  11420. C                    THE ROOT X.
  11421. C           EPS    - INPUT VALUE WHICH SPECIFIES THE UPPER BOUND OF THE
  11422. C                    ERROR OF RESULT X.
  11423. C           IEND   - MAXIMUM NUMBER OF ITERATION STEPS SPECIFIED.
  11424. C           IER    - RESULTANT ERROR PARAMETER CODED AS FOLLOWS
  11425. C                     IER=0 - NO ERROR,
  11426. C                     IER=1 - NO CONVERGENCE AFTER IEND ITERATION STEPS,
  11427. C                     IER=2 - AT ANY ITERATION STEP DERIVATIVE DERF WAS
  11428. C                             EQUAL TO ZERO.
  11429. C
  11430. C        REMARKS
  11431. C           THE PROCEDURE IS BYPASSED AND GIVES THE ERROR MESSAGE IER=2
  11432. C           IF AT ANY ITERATION STEP DERIVATIVE OF F(X) IS EQUAL TO 0.
  11433. C           POSSIBLY THE PROCEDURE WOULD BE SUCCESSFUL IF IT IS STARTED
  11434. C           ONCE MORE WITH ANOTHER INITIAL GUESS XST.
  11435. C
  11436. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11437. C           THE EXTERNAL SUBROUTINE FCT(X,F,DERF) MUST BE FURNISHED
  11438. C           BY THE USER.
  11439. C
  11440. C        METHOD
  11441. C           SOLUTION OF EQUATION F(X)=0 IS DONE BY MEANS OF NEWTON-S
  11442. C           ITERATION METHOD, WHICH STARTS AT THE INITIAL GUESS XST OF
  11443. C           A ROOT X. CONVERGENCE IS QUADRATIC IF THE DERIVATIVE OF
  11444. C           F(X) AT ROOT X IS NOT EQUAL TO ZERO. ONE ITERATION STEP
  11445. C           REQUIRES ONE EVALUATION OF F(X) AND ONE EVALUATION OF THE
  11446. C           DERIVATIVE OF F(X). FOR TEST ON SATISFACTORY ACCURACY SEE
  11447. C           FORMULAE (2) OF MATHEMATICAL DESCRIPTION.
  11448. C           FOR REFERENCE, SEE R. ZURMUEHL, PRAKTISCHE MATHEMATIK FUER
  11449. C           INGENIEURE UND PHYSIKER, SPRINGER, BERLIN/GOETTINGEN/
  11450. C           HEIDELBERG, 1963, PP.12-17.
  11451. C
  11452. C     ..................................................................
  11453. C
  11454.       SUBROUTINE RTNI(X,F,DERF,FCT,XST,EPS,IEND,IER)
  11455. C
  11456. C
  11457. C     PREPARE ITERATION
  11458.       IER=0
  11459.       X=XST
  11460.       TOL=X
  11461.       CALL FCT(TOL,F,DERF)
  11462.       TOLF=100.*EPS
  11463. C
  11464. C
  11465. C     START ITERATION LOOP
  11466.       DO 6 I=1,IEND
  11467.       IF(F)1,7,1
  11468. C
  11469. C     EQUATION IS NOT SATISFIED BY X
  11470.     1 IF(DERF)2,8,2
  11471. C
  11472. C     ITERATION IS POSSIBLE
  11473.     2 DX=F/DERF
  11474.       X=X-DX
  11475.       TOL=X
  11476.       CALL FCT(TOL,F,DERF)
  11477. C
  11478. C     TEST ON SATISFACTORY ACCURACY
  11479.       TOL=EPS
  11480.       A=ABS(X)
  11481.       IF(A-1.)4,4,3
  11482.     3 TOL=TOL*A
  11483.     4 IF(ABS(DX)-TOL)5,5,6
  11484.     5 IF(ABS(F)-TOLF)7,7,6
  11485.     6 CONTINUE
  11486. C     END OF ITERATION LOOP
  11487. C
  11488. C
  11489. C     NO CONVERGENCE AFTER IEND ITERATION STEPS. ERROR RETURN.
  11490.       IER=1
  11491.     7 RETURN
  11492. C
  11493. C     ERROR RETURN IN CASE OF ZERO DIVISOR
  11494.     8 IER=2
  11495.       RETURN
  11496.       END
  11497. C
  11498. C     ..................................................................
  11499. C
  11500. C        SUBROUTINE RTWI
  11501. C
  11502. C        PURPOSE
  11503. C           TO SOLVE GENERAL NONLINEAR EQUATIONS OF THE FORM X=FCT(X)
  11504. C           BY MEANS OF WEGSTEIN-S ITERATION METHOD.
  11505. C
  11506. C        USAGE
  11507. C           CALL RTWI (X,VAL,FCT,XST,EPS,IEND,IER)
  11508. C           PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT.
  11509. C
  11510. C        DESCRIPTION OF PARAMETERS
  11511. C           X      - RESULTANT ROOT OF EQUATION X=FCT(X).
  11512. C           VAL    - RESULTANT VALUE OF X-FCT(X) AT ROOT X.
  11513. C           FCT    - NAME OF THE EXTERNAL FUNCTION SUBPROGRAM USED.
  11514. C           XST    - INPUT VALUE WHICH SPECIFIES THE INITIAL GUESS OF
  11515. C                    THE ROOT X.
  11516. C           EPS    - INPUT VALUE WHICH SPECIFIES THE UPPER BOUND OF THE
  11517. C                    ERROR OF RESULT X.
  11518. C           IEND   - MAXIMUM NUMBER OF ITERATION STEPS SPECIFIED.
  11519. C           IER    - RESULTANT ERROR PARAMETER CODED AS FOLLOWS
  11520. C                     IER=0 - NO ERROR,
  11521. C                     IER=1 - NO CONVERGENCE AFTER IEND ITERATION STEPS,
  11522. C                     IER=2 - AT ANY ITERATION STEP THE DENOMINATOR OF
  11523. C                             ITERATION FORMULA WAS EQUAL TO ZERO.
  11524. C
  11525. C        REMARKS
  11526. C           THE PROCEDURE IS BYPASSED AND GIVES THE ERROR MESSAGE IER=2
  11527. C           IF AT ANY ITERATION STEP THE DENOMINATOR OF ITERATION
  11528. C           FORMULA WAS EQUAL TO ZERO. THAT MEANS THAT THERE IS AT
  11529. C           LEAST ONE POINT IN THE RANGE IN WHICH ITERATION MOVES WITH
  11530. C           DERIVATIVE OF FCT(X) EQUAL TO 1.
  11531. C
  11532. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11533. C           THE EXTERNAL FUNCTION SUBPROGRAM FCT(X) MUST BE FURNISHED
  11534. C           BY THE USER.
  11535. C
  11536. C        METHOD
  11537. C           SOLUTION OF EQUATION X=FCT(X) IS DONE BY MEANS OF
  11538. C           WEGSTEIN-S ITERATION METHOD, WHICH STARTS AT THE INITIAL
  11539. C           GUESS XST OF A ROOT X. ONE ITERATION STEP REQUIRES ONE
  11540. C           EVALUATION OF FCT(X). FOR TEST ON SATISFACTORY ACCURACY SEE
  11541. C           FORMULAE (2) OF MATHEMATICAL DESCRIPTION.
  11542. C           FOR REFERENCE, SEE
  11543. C           (1) G. N. LANCE, NUMERICAL METHODS FOR HIGH SPEED COMPUTERS,
  11544. C               ILIFFE, LONDON, 1960, PP.134-138,
  11545. C           (2) J. WEGSTEIN, ALGORITHM 2, CACM, VOL.3, ISS.2 (1960),
  11546. C               PP.74,
  11547. C           (3) H.C. THACHER, ALGORITHM 15, CACM, VOL.3, ISS.8 (1960),
  11548. C               PP.475,
  11549. C           (4) J.G. HERRIOT, ALGORITHM 26, CACM, VOL.3, ISS.11 (1960),
  11550. C               PP.603.
  11551. C
  11552. C     ..................................................................
  11553. C
  11554.       SUBROUTINE RTWI(X,VAL,FCT,XST,EPS,IEND,IER)
  11555. C
  11556. C
  11557. C     PREPARE ITERATION
  11558.       IER=0
  11559.       TOL=XST
  11560.       X=FCT(TOL)
  11561.       A=X-XST
  11562.       B=-A
  11563.       TOL=X
  11564.       VAL=X-FCT(TOL)
  11565. C
  11566. C
  11567. C     START ITERATION LOOP
  11568.       DO 6 I=1,IEND
  11569.       IF(VAL)1,7,1
  11570. C
  11571. C     EQUATION IS NOT SATISFIED BY X
  11572.     1 B=B/VAL-1.
  11573.       IF(B)2,8,2
  11574. C
  11575. C     ITERATION IS POSSIBLE
  11576.     2 A=A/B
  11577.       X=X+A
  11578.       B=VAL
  11579.       TOL=X
  11580.       VAL=X-FCT(TOL)
  11581. C
  11582. C     TEST ON SATISFACTORY ACCURACY
  11583.       TOL=EPS
  11584.       D=ABS(X)
  11585.       IF(D-1.)4,4,3
  11586.     3 TOL=TOL*D
  11587.     4 IF(ABS(A)-TOL)5,5,6
  11588.     5 IF(ABS(VAL)-10.*TOL)7,7,6
  11589.     6 CONTINUE
  11590. C     END OF ITERATION LOOP
  11591. C
  11592. C
  11593. C     NO CONVERGENCE AFTER IEND ITERATION STEPS. ERROR RETURN.
  11594.       IER=1
  11595.     7 RETURN
  11596. C
  11597. C     ERROR RETURN IN CASE OF ZERO DIVISOR
  11598.     8 IER=2
  11599.       RETURN
  11600.       END
  11601. C
  11602. C     ..................................................................
  11603. C
  11604. C        SUBROUTINE SADD
  11605. C
  11606. C        PURPOSE
  11607. C           ADD A SCALAR TO EACH ELEMENT OF A MATRIX TO FORM A RESULTANT
  11608. C           MATRIX
  11609. C
  11610. C        USAGE
  11611. C           CALL SADD(A,C,R,N,M,MS)
  11612. C
  11613. C        DESCRIPTION OF PARAMETERS
  11614. C           A - NAME OF INPUT MATRIX
  11615. C           C - SCALAR
  11616. C           R - NAME OF OUTPUT MATRIX
  11617. C           N - NUMBER OF ROWS IN MATRIX A AND R
  11618. C           M - NUMBER OF COLUMNS IN MATRIX A AND R
  11619. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A (AND R)
  11620. C                  0 - GENERAL
  11621. C                  1 - SYMMETRIC
  11622. C                  2 - DIAGONAL
  11623. C
  11624. C        REMARKS
  11625. C           NONE
  11626. C
  11627. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11628. C           LOC
  11629. C
  11630. C        METHOD
  11631. C           SCALAR IS ADDED TO EACH ELEMENT OF MATRIX
  11632. C
  11633. C     ..................................................................
  11634. C
  11635.       SUBROUTINE SADD(A,C,R,N,M,MS)
  11636.       DIMENSION A(1),R(1)
  11637. C
  11638. C        COMPUTE VECTOR LENGTH, IT
  11639. C
  11640.       CALL LOC(N,M,IT,N,M,MS)
  11641. C
  11642. C        ADD SCALAR
  11643. C
  11644.       DO 1 I=1,IT
  11645.     1 R(I)=A(I)+C
  11646.       RETURN
  11647.       END
  11648. C
  11649. C    ..................................................................
  11650. C
  11651. C       SUBROUTINE SCLA
  11652. C
  11653. C       PURPOSE
  11654. C          SET EACH ELEMENT OF A MATRIX EQUAL TO A GIVEN SCALAR
  11655. C
  11656. C       USAGE
  11657. C          CALL SCLA (A,C,N,M,MS)
  11658. C
  11659. C       DESCRIPTION OF PARAMETERS
  11660. C          A - NAME OF INPUT MATRIX
  11661. C          C - SCALAR
  11662. C          N - NUMBER OF ROWS IN MATRIX A
  11663. C          M - NUMBER OF COLUMNS IN MATRIX A
  11664. C          MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  11665. C                 0 - GENERAL
  11666. C                 1 - SYMMETRIC
  11667. C                 2 - DIAGONAL
  11668. C
  11669. C       REMARKS
  11670. C          NONE
  11671. C
  11672. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11673. C          LOC
  11674. C
  11675. C       METHOD
  11676. C          EACH ELEMENT OF MATRIX A IS REPLACED BY SCALAR C
  11677. C
  11678. C    ..................................................................
  11679. C
  11680.     SUBROUTINE SCLA(A,C,N,M,MS)
  11681.     DIMENSION A(1)
  11682. C
  11683. C       COMPUTE VECTOR LENGTH, IT
  11684. C
  11685.     CALL LOC(N,M,IT,N,M,MS)
  11686. C
  11687. C       REPLACE BY SCALAR
  11688. C
  11689.     DO 1 I=1,IT
  11690. 1    A(I)=C
  11691.     RETURN
  11692.     END
  11693. C
  11694. C    ..................................................................
  11695. C
  11696. C       SUBROUTINE SCMA
  11697. C
  11698. C       PURPOSE
  11699. C          MULTIPLY COLUMN OF MATRIX BY A SCALAR AND ADD TO ANOTHER
  11700. C          COLUMN OF THE SAME MATRIX
  11701. C
  11702. C       USAGE
  11703. C          CALL SCMA(A,C,N,LA,LB)
  11704. C
  11705. C       DESCRIPTION OF PARAMETERS
  11706. C          A  - NAME OF MATRIX
  11707. C          C  - SCALAR
  11708. C          N  - NUMBER OF ROWS IN A
  11709. C          LA - COLUMN IN A TO BE MULTIPLIED BY SCALAR
  11710. C          LB - COLUMN IN A TO WHICH PRODUCT IS ADDED
  11711. C               IF 0 IS SPECIFIED, PRODUCT REPLACES ELEMENTS IN LA
  11712. C
  11713. C       REMARKS
  11714. C          MATRIX A MUST BE A GENERAL MATRIX
  11715. C
  11716. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11717. C          NONE
  11718. C
  11719. C       METHOD
  11720. C          EACH ELEMENT OF COLUMN LA IS MULTIPLIED BY SCALAR C AND THE
  11721. C          PRODUCT IS ADDED TO THE CORRESPONDING ELEMENT OF COLUMN LB.
  11722. C          COLUMN LA REMAINS UNAFFECTED BY THE OPERATION.
  11723. C          IF PARAMETER LB CONTAINS ZERO, MULTIPLICATION BY THE SCALAR
  11724. C          IS PERFORMED AND THE PRODUCT REPLACES ELEMENTS IN LA.
  11725. C
  11726. C    ..................................................................
  11727. C
  11728.     SUBROUTINE SCMA(A,C,N,LA,LB)
  11729.     DIMENSION A(1)
  11730. C
  11731. C       LOCATE STARTING POINT OF BOTH COLUMNS
  11732. C
  11733.     ILA=N*(LA-1)
  11734.     ILB=N*(LB-1)
  11735. C
  11736.     DO 3 I=1,N
  11737.     ILA=ILA+1
  11738.     ILB=ILB+1
  11739. C
  11740. C       CHECK LB FOR ZERO
  11741. C
  11742.     IF(LB) 1,2,1
  11743. C
  11744. C       IF NOT MULTIPLY BY CONSTANT AND ADD TO SECOND COLUMN
  11745. C
  11746. 1    A(ILB)=A(ILA)*C+A(ILB)
  11747.     GO TO 3
  11748. C
  11749. C       OTHERWISE, MULTIPLY COLUMN BY CONSTANT
  11750. C
  11751. 2    A(ILA)=A(ILA)*C
  11752. 3    CONTINUE
  11753.     RETURN
  11754.     END
  11755. C
  11756. C     ..................................................................
  11757. C
  11758. C        SUBROUTINE SDIV
  11759. C
  11760. C        PURPOSE
  11761. C           DIVIDE EACH ELEMENT OF A MATRIX BY A SCALAR TO FORM A
  11762. C           RESULTANT MATRIX
  11763. C
  11764. C        USAGE
  11765. C           CALL SDIV(A,C,R,N,M,MS)
  11766. C
  11767. C        DESCRIPTION OF PARAMETERS
  11768. C           A - NAME OF INPUT MATRIX
  11769. C           C - SCALAR
  11770. C           R - NAME OF OUTPUT MATRIX
  11771. C           N - NUMBER OF ROWS IN MATRIX A AND R
  11772. C           M - NUMBER OF COLUMNS IN MATRIX A AND R
  11773. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A (AND R)
  11774. C                  0 - GENERAL
  11775. C                  1 - SYMMETRIC
  11776. C                  2 - DIAGONAL
  11777. C
  11778. C        REMARKS
  11779. C           IF SCALAR IS ZERO, DIVISION IS PERFORMED ONLY ONCE TO CAUSE
  11780. C           FLOATING POINT OVERFLOW CONDITION
  11781. C
  11782. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  11783. C           LOC
  11784. C
  11785. C        METHOD
  11786. C           EACH ELEMENT OF MATRIX IS DIVIDED BY SCALAR
  11787. C
  11788. C     ..................................................................
  11789. C
  11790.       SUBROUTINE SDIV(A,C,R,N,M,MS)
  11791.       DIMENSION A(1),R(1)
  11792. C
  11793. C        COMPUTE VECTOR LENGTH, IT
  11794. C
  11795.       CALL LOC(N,M,IT,N,M,MS)
  11796. C
  11797. C        DIVIDE BY SCALAR (IF SCALAR IS ZERO, DIVIDE ONLY ONCE)
  11798. C
  11799.       IF(C) 2,1,2
  11800.     1 IT=1
  11801.     2 DO 3 I=1,IT
  11802.     3 R(I)=A(I)/C
  11803.       RETURN
  11804.       END
  11805. C
  11806. C    ..................................................................
  11807. C
  11808. C       SUBROUTINE SE15
  11809. C
  11810. C       PURPOSE
  11811. C          TO COMPUTE A VECTOR OF SMOOTHED FUNCTION VALUES GIVEN A
  11812. C          VECTOR OF FUNCTION VALUES WHOSE ENTRIES CORRESPOND TO
  11813. C          EQUIDISTANTLY SPACED ARGUMENT VALUES.
  11814. C
  11815. C       USAGE
  11816. C          CALL SE15(Y,Z,NDIM,IER)
  11817. C
  11818. C       DESCRIPTION OF PARAMETERS
  11819. C          Y     -  GIVEN VECTOR OF FUNCTION VALUES (DIMENSION NDIM)
  11820. C          Z     -  RESULTING VECTOR OF SMOOTHED FUNCTION VALUES
  11821. C                   (DIMENSION NDIM)
  11822. C          NDIM  -  DIMENSION OF VECTORS Y AND Z
  11823. C          IER   -  RESULTING ERROR PARAMETER
  11824. C                   IER = -1  - NDIM IS LESS THAN 5
  11825. C                   IER =  0  - NO ERROR
  11826. C
  11827. C       REMARKS
  11828. C          (1)  IF IER=-1 THERE HAS BEEN NO COMPUTATION.
  11829. C          (2)   Z CAN HAVE THE SAME STORAGE ALLOCATION AS Y.  IF Y IS
  11830. C                DISTINCT FROM Z, THEN IT IS NOT DESTROYED.
  11831. C
  11832. C       SUBROUTINE AND FUNCTION SUBPROGRAMS REQUIRED
  11833. C          NONE
  11834. C
  11835. C       METHOD
  11836. C          IF X IS THE (SUPPRESSED) VECTOR OF ARGUMENT VALUES, THEN
  11837. C          EXCEPT AT THE POINTS X(1),X(2),X(NDIM-1) AND X(NDIM), EACH
  11838. C          SMOOTHED VALUE Z(I) IS OBTAINED BY EVALUATING AT X(I) THE
  11839. C          LEAST-SQUARES POLYNOMIAL OF DEGREE 1 RELEVANT TO THE 5
  11840. C          SUCCESSIVE POINTS (X(I+K),Y(I+K)) K = -2,-1,...,2.  (SEE
  11841. C          HILDEBRAND, F.B., INTRODUCTION TO NUMERICAL ANALYSIS,
  11842. C          MC GRAW-HILL, NEW YORK/TORONTO/LONDON, 1956, PP. 295-302.)
  11843. C
  11844. C    ..................................................................
  11845. C
  11846.     SUBROUTINE SE15(Y,Z,NDIM,IER)
  11847. C
  11848. C
  11849.     DIMENSION Y(1),Z(1)
  11850. C
  11851. C       TEST OF DIMENSION
  11852.     IF(NDIM-5)3,1,1
  11853. C
  11854. C       PREPARE LOOP
  11855. 1    A=Y(1)+Y(1)
  11856.     C=Y(2)+Y(2)
  11857.     B=.2*(A+Y(1)+C+Y(3)-Y(5))
  11858.     C=.1*(A+A+C+Y(2)+Y(3)+Y(3)+Y(4))
  11859. C
  11860. C       START LOOP
  11861.     DO 2 I=5,NDIM
  11862.     A=B
  11863.     B=C
  11864.     C=.2*(Y(I-4)+Y(I-3)+Y(I-2)+Y(I-1)+Y(I))
  11865. 2    Z(I-4)=A
  11866. C       END OF LOOP
  11867. C
  11868. C       UPDATE LAST FOUR COMPONENTS
  11869.     A=Y(NDIM)+Y(NDIM)
  11870.     A=.1*(A+A+Y(NDIM-1)+Y(NDIM-1)+Y(NDIM-1)+Y(NDIM-2)+Y(NDIM-2)
  11871.      1      +Y(NDIM-3))
  11872.     Z(NDIM-3)=B
  11873.     Z(NDIM-2)=C
  11874.     Z(NDIM-1)=A
  11875.     Z(NDIM)=A+A-C
  11876.     IER=0
  11877.     RETURN
  11878. C
  11879. C       ERROR EXIT IN CASE NDIM IS LESS THAN 5
  11880. 3    IER=-1
  11881.     RETURN
  11882.     END
  11883. C
  11884. C    ..................................................................
  11885. C
  11886. C       SUBROUTINE SE35
  11887. C
  11888. C       PURPOSE
  11889. C          TO COMPUTE A VECTOR OF SMOOTHED FUNCTION VALUES GIVEN A
  11890. C          VECTOR OF FUNCTION VALUES WHOSE ENTRIES CORRESPOND TO
  11891. C          EQUIDISTANTLY SPACED ARGUMENT VALUES.
  11892. C
  11893. C       USAGE
  11894. C          CALL SE35(Y,Z,NDIM,IER)
  11895. C
  11896. C       DESCRIPTION OF PARAMETERS
  11897. C          Y     -  GIVEN VECTOR OF FUNCTION VALUES (DIMENSION NDIM)
  11898. C          Z     -  RESULTING VECTOR OF SMOOTHED FUNCTION VALUES
  11899. C                   (DIMENSION NDIM)
  11900. C          NDIM  -  DIMENSION OF VECTORS Y AND Z
  11901. C          IER   -  RESULTING ERROR PARAMETER
  11902. C                   IER = -1  - NDIM IS LESS THAN 5
  11903. C                   IER =  0  - NO ERROR
  11904. C
  11905. C       REMARKS
  11906. C          (1)  IF IER=-1 THERE HAS BEEN NO COMPUTATION.
  11907. C          (2)   Z CAN HAVE THE SAME STORAGE ALLOCATION AS Y.  IF Y IS
  11908. C                DISTINCT FROM Z, THEN IT IS NOT DESTROYED.
  11909. C
  11910. C       SUBROUTINE AND FUNCTION SUBPROGRAMS REQUIRED
  11911. C          NONE
  11912. C
  11913. C       METHOD
  11914. C          IF X IS THE (SUPPRESSED) VECTOR OF ARGUMENT VALUES, THEN
  11915. C          EXCEPT AT THE POINTS X(1),X(2),X(NDIM-1) AND X(NDIM), EACH
  11916. C          SMOOTHED VALUE Z(I) IS OBTAINED BY EVALUATING AT X(I) THE
  11917. C          LEAST-SQUARES POLYNOMIAL OF DEGREE 3 RELEVANT TO THE 5
  11918. C          SUCCESSIVE POINTS (X(I+K),Y(I+K)) K = -2,-1,...,2.  (SEE
  11919. C          HILDEBRAND, F.B., INTRODUCTION TO NUMERICAL ANALYSIS,
  11920. C          MC GRAW-HILL, NEW YORK/TORONTO/LONDON, 1956, PP. 295-302.)
  11921. C
  11922. C    ..................................................................
  11923. C
  11924.     SUBROUTINE SE35(Y,Z,NDIM,IER)
  11925. C
  11926. C
  11927.     DIMENSION Y(1),Z(1)
  11928. C
  11929. C       TEST OF DIMENSION
  11930.     IF(NDIM-5)4,1,1
  11931. C
  11932. C       PREPARE LOOP
  11933. 1    B=Y(1)
  11934.     C=Y(2)
  11935. C
  11936. C       START LOOP
  11937.     DO 3 I=5,NDIM
  11938.     A=B
  11939.     B=C
  11940.     C=Y(I-2)
  11941. C
  11942. C       GENERATE FOURTH CENTRAL DIFFERENCE
  11943.     D=C-B-Y(I-1)
  11944.     D=D+D+C
  11945.     D=D+D+A+Y(I)
  11946. C
  11947. C       CHECK FIRST TWO COMPONENTS
  11948.     IF(I-5)2,2,3
  11949. 2    Z(1)=A-.01428571*D
  11950.     Z(2)=B+.05714286*D
  11951. 3    Z(I-2)=C-.08571429*D
  11952. C       END OF LOOP
  11953. C
  11954. C       UPDATE LAST TWO COMPONENTS
  11955.     Z(NDIM-1)=Y(NDIM-1)+.05714286*D
  11956.     Z(NDIM)=Y(NDIM)-.01428571*D
  11957.     IER=0
  11958.     RETURN
  11959. C
  11960. C       ERROR EXIT IN CASE NDIM IS LESS THAN 5
  11961. 4    IER=-1
  11962.     RETURN
  11963.     END
  11964. C
  11965. C    ..................................................................
  11966. C
  11967. C       SUBROUTINE SG13
  11968. C
  11969. C       PURPOSE
  11970. C          TO COMPUTE A VECTOR OF SMOOTHED FUNCTION VALUES GIVEN
  11971. C          VECTORS OF ARGUMENT VALUES AND CORRESPONDING FUNCTION
  11972. C          VALUES.
  11973. C
  11974. C       USAGE
  11975. C          CALL SG13(X,Y,Z,NDIM,IER)
  11976. C
  11977. C       DESCRIPTION OF PARAMETERS
  11978. C          X     -  GIVEN VECTOR OF ARGUMENT VALUES (DIMENSION NDIM)
  11979. C          Y     -  GIVEN VECTOR OF FUNCTION VALUES CORRESPONDING TO X
  11980. C                   (DIMENSION NDIM)
  11981. C          Z     -  RESULTING VECTOR OF SMOOTHED FUNCTION VALUES
  11982. C                   (DIMENSION NDIM)
  11983. C          NDIM  -  DIMENSION OF VECTORS X,Y,AND Z
  11984. C          IER   -  RESULTING ERROR PARAMETER
  11985. C                   IER = -1  - NDIM IS LESS THAN 3
  11986. C                   IER =  0  - NO ERROR
  11987. C
  11988. C       REMARKS
  11989. C          (1)  IF IER=-1 THERE HAS BEEN NO COMPUTATION.
  11990. C          (2)   Z CAN HAVE THE SAME STORAGE ALLOCATION AS X OR Y.  IF
  11991. C                X OR Y IS DISTINCT FROM Z, THEN IT IS NOT DESTROYED.
  11992. C
  11993. C       SUBROUTINES AND SUBPROGRAMS REQUIRED
  11994. C          NONE
  11995. C
  11996. C       METHOD
  11997. C          EXCEPT AT THE ENDPOINTS X(1) AND X(NDIM), EACH SMOOTHED
  11998. C          VALUE Z(I) IS OBTAINED BY EVALUATING AT X(I) THE LEAST-
  11999. C          SQUARES POLYNOMIAL OF DEGREE 1 RELEVANT TO THE 3 SUCCESSIVE
  12000. C          POINTS (X(I+K),Y(I+K)) K = -1,0,1.(SEE HILDEBRAND, F.B.,
  12001. C          INTRODUCTION  TO NUMERICAL ANALYSIS, MC GRAW-HILL, NEW YORK/
  12002. C          TORONTO/LONDON, 1956, PP.258-311.)
  12003. C
  12004. C    ..................................................................
  12005. C
  12006.     SUBROUTINE SG13(X,Y,Z,NDIM,IER)
  12007. C
  12008. C
  12009.     DIMENSION X(1),Y(1),Z(1)
  12010. C
  12011. C       TEST OF DIMENSION
  12012.     IF(NDIM-3)7,1,1
  12013. C
  12014. C       START LOOP
  12015. 1    DO 6 I=3,NDIM
  12016.     XM=.3333333*(X(I-2)+X(I-1)+X(I))
  12017.     YM=.3333333*(Y(I-2)+Y(I-1)+Y(I))
  12018.     T1=X(I-2)-XM
  12019.     T2=X(I-1)-XM
  12020.     T3=X(I)-XM
  12021.     XM=T1*T1+T2*T2+T3*T3
  12022.     IF(XM)3,3,2
  12023. 2    XM=(T1*(Y(I-2)-YM)+T2*(Y(I-1)-YM)+T3*(Y(I)-YM))/XM
  12024. C
  12025. C       CHECK FIRST POINT
  12026. 3    IF(I-3)4,4,5
  12027. 4    H=XM*T1+YM
  12028. 5    Z(I-2)=H
  12029. 6    H=XM*T2+YM
  12030. C       END OF LOOP
  12031. C
  12032. C       UPDATE LAST TWO COMPONENTS
  12033.     Z(NDIM-1)=H
  12034.     Z(NDIM)=XM*T3+YM
  12035.     IER=0
  12036.     RETURN
  12037. C
  12038. C       ERROR EXIT IN CASE NDIM IS LESS THAN 3
  12039. 7    IER=-1
  12040.     RETURN
  12041.     END
  12042. C
  12043. C    ..................................................................
  12044. C
  12045. C       SUBROUTINE SICI
  12046. C
  12047. C       PURPOSE
  12048. C          COMPUTES THE SINE AND COSINE INTEGRAL
  12049. C
  12050. C       USAGE
  12051. C          CALL SICI(SI,CI,X)
  12052. C
  12053. C       DESCRIPTION OF PARAMETERS
  12054. C          SI    - THE RESULTANT VALUE SI(X)
  12055. C          CI    - THE RESULTANT VALUE CI(X)
  12056. C          X     - THE ARGUMENT OF SI(X) AND CI(X)
  12057. C
  12058. C       REMARKS
  12059. C          THE ARGUMENT VALUE REMAINS UNCHANGED
  12060. C
  12061. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12062. C          NONE
  12063. C
  12064. C       METHOD
  12065. C          DEFINITION
  12066. C          SI(X)=INTEGRAL(SIN(T)/T)
  12067. C          CI(X)=INTEGRAL(COS(T)/T)
  12068. C          EVALUATION
  12069. C          REDUCTION OF RANGE USING SYMMETRY.
  12070. C          DIFFERENT APPROXIMATIONS ARE USED FOR ABS(X) GREATER
  12071. C          THAN 4 AND FOR ABS(X) LESS THAN 4.
  12072. C          REFERENCE
  12073. C          LUKE AND WIMP, 'POLYNOMIAL APPROXIMATIONS TO INTEGRAL
  12074. C          TRANSFORMS',  MATHEMATICAL TABLES AND OTHER AIDS TO
  12075. C          COMPUTATION, VOL. 15, 1961, ISSUE 74, PP. 174-178.
  12076. C
  12077. C    ..................................................................
  12078. C
  12079.     SUBROUTINE SICI(SI,CI,X)
  12080.     Z=ABS(X)
  12081.     IF(Z-4.)1,1,4
  12082. 1    Y=(4.-Z)*(4.+Z)
  12083.     SI=-1.570797E0
  12084.     IF(Z)3,2,3
  12085. 2    CI=-1.7E38                                                                0
  12086.     RETURN
  12087. 3     SI=X*(((((1.753141E-9*Y+1.568988E-7)*Y+1.374168E-5)*Y+6.939889E-4)
  12088.      1*Y+1.964882E-2)*Y+4.395509E-1+SI/X)
  12089.       CI=((5.772156E-1+ALOG(Z))/Z-Z*(((((1.386985E-10*Y+1.584996E-8)*Y
  12090.      1+1.725752E-6)*Y+1.185999E-4)*Y+4.990920E-3)*Y+1.315308E-1))*Z
  12091.     RETURN
  12092. 4    SI=SIN(Z)
  12093.     Y=COS(Z)
  12094.     Z=4./Z
  12095.       U=((((((((4.048069E-3*Z-2.279143E-2)*Z+5.515070E-2)*Z-7.261642E-2)
  12096.      1*Z+4.987716E-2)*Z-3.332519E-3)*Z-2.314617E-2)*Z-1.134958E-5)*Z
  12097.      2+6.250011E-2)*Z+2.583989E-10
  12098.     V=(((((((((-5.108699E-3*Z+2.819179E-2)*Z-6.537283E-2)*Z
  12099.      1+7.902034E-2)*Z-4.400416E-2)*Z-7.945556E-3)*Z+2.601293E-2)*Z
  12100.      2-3.764000E-4)*Z-3.122418E-2)*Z-6.646441E-7)*Z+2.500000E-1
  12101.     CI=Z*(SI*V-Y*U)
  12102.     SI=-Z*(SI*U+Y*V)
  12103.     IF(X)5,6,6
  12104. 5    SI=3.141593E0-SI
  12105. 6    RETURN
  12106.     END
  12107. C
  12108. C    ..................................................................
  12109. C
  12110. C       SUBROUTINE SIGNT
  12111. C
  12112. C       PURPOSE
  12113. C          TO PERFORM A NON-PARAMETRIC SIGN TEST, GIVEN TWO SETS OF
  12114. C          MATCHED OBSERVATIONS.  IT TESTS THE NULL HYPOTHESIS THAT THE
  12115. C          DIFFERENCES BETWEEN EACH PAIR OF MATCHED OBSERVATIONS HAS A
  12116. C          MEDIAN EQUAL TO ZERO.
  12117. C
  12118. C       USAGE
  12119. C          CALL SIGNT (N,A,B,K,M,P,IE)
  12120. C
  12121. C       DESCRIPTION OF PARAMETERS
  12122. C          N - NUMBER OF OBSERVATIONS IN SETS A AND B
  12123. C          A - INPUT VECTOR OF LENGTH N CONTAINING DATA FROM THE FIRST
  12124. C              SAMPLE, A
  12125. C          B - INPUT VECTOR OF LENGTH N CONTAINING DATA FROM THE SECOND
  12126. C              SAMPLE, B
  12127. C          K - OUTPUT VARIABLE CONTAINING THE NUMBER OF PAIRS OF
  12128. C              OBSERVATIONS FROM THE TWO SAMPLES WHOSE DIFFERENCES ARE
  12129. C              NON-ZERO
  12130. C          M - OUTPUT VARIABLE CONTAINING THE NUMBER OF PLUS OR MINUS
  12131. C              DIFFERENCES, WHICHEVER IS FEWER.
  12132. C          P - COMPUTED PROBABILITY OF AS FEW AS M NUMBER OF PAIRS
  12133. C              HAVING THE SAME SIGN, ASSUMING THAT THE SAMPLES CAME
  12134. C              FROM THE SAME POPULATION.
  12135. C          IE- 0, IF THERE IS NO ERROR.
  12136. C              1, IF K IS ZERO.  IN THIS CASE, P IS SET TO 1.0 AND
  12137. C              M TO 0.
  12138. C
  12139. C       REMARKS
  12140. C          IF K IS LESS THAN OR EQUAL TO 25, THE PROBABILITY WILL BE
  12141. C          COMPUTED USING THE BINOMIAL DISTRIBUTION.  IF K IS GREATER
  12142. C          THAN 25, THE PROBABILITY WILL BE COMPUTED USING THE NORMAL
  12143. C          APPROXIMATION TO THE BINOMIAL DISTRIBUTION.
  12144. C          P COMPUTED IS THE PROBABILITY FOR A ONE-TAILED TEST.  THUS,
  12145. C          FOR A TWO TAILED TEST, DOUBLE THE VALUE FOR P.
  12146. C
  12147. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12148. C          NDTR
  12149. C
  12150. C       METHOD
  12151. C          REFER TO DIXON AND MASSEY, INTRODUCTION TO STATISTICAL
  12152. C          ANALYSIS (MCGRAW-HILL, 1957).
  12153. C
  12154. C    ..................................................................
  12155. C
  12156.     SUBROUTINE SIGNT (N,A,B,K,M,P,IE)
  12157. C
  12158.     DIMENSION A(1),B(1)
  12159.     DOUBLE PRECISION FN,FD
  12160. C
  12161. C       INITIALIZATION
  12162. C
  12163.     IE=0
  12164.     K=0
  12165.     MPLUS=0
  12166.     MMINS=0
  12167. C
  12168. C       FIND (+) OR (-) DIFFERENCE
  12169. C
  12170.     DO 40 I=1,N
  12171.     D=A(I)-B(I)
  12172.     IF(D) 20, 40, 30
  12173. C
  12174. C       (-) DIFFERENCE
  12175. C
  12176. 20    K=K+1
  12177.     MMINS=MMINS+1
  12178.     GO TO 40
  12179. C
  12180. C       (+) DIFFERENCE
  12181. C
  12182. 30    K=K+1
  12183.     MPLUS=MPLUS+1
  12184. C
  12185. 40    CONTINUE
  12186.     IF(K) 41,41,42
  12187. 41    IE=1
  12188.     P=1.0
  12189.     M=0
  12190.     GO TO 95
  12191. 42    FK=K
  12192. C
  12193. C       FIND THE NUMBER OF FEWER SIGNS
  12194. C
  12195.     IF(MPLUS-MMINS) 45, 45, 50
  12196. 45    M=MPLUS
  12197.     GO TO 55
  12198. 50    M=MMINS
  12199. C
  12200. C       TEST WHETHER K IS GREATER THAN 25
  12201. C
  12202. 55    IF(K-25) 60, 60, 77
  12203. C
  12204. C       K IS LESS THAN OR EQUAL TO 25
  12205. C
  12206. 60    P=1.0
  12207.     IF(M) 75, 75, 65
  12208. 65    FN=1.0
  12209.     FD=1.0
  12210.     DO 70 I=1,M
  12211.     FI=I
  12212.     FN=FN*(FK-(FI-1.0))
  12213.     FD=FD*FI
  12214. 70    P=P+FN/FD
  12215. C
  12216. 75    P=P/(2.0**K)
  12217.     GO TO 95
  12218. C
  12219. C       K IS GREATER THAN 25.  COMPUTE MEAN, STANDARD DEVIATION, AND Z
  12220. C
  12221. 77    U=0.5*FK
  12222.     S=0.5*SQRT(FK)
  12223.     FM=M
  12224.     IF(FM-U) 80, 85, 85
  12225. 80    CON=0.5
  12226.     GO TO 90
  12227. 85    CON=0.0
  12228. 90    Z=(FM+CON-U)/S
  12229. C
  12230. C       COMPUTE P ASSOCIATED WITH THE VALUE AS EXTREME AS Z
  12231. C
  12232.     CALL NDTR (Z,P,D)
  12233. C
  12234. 95    RETURN
  12235.     END
  12236. C
  12237. C    ..................................................................
  12238. C
  12239. C       SUBROUTINE SIMQ
  12240. C
  12241. C       PURPOSE
  12242. C          OBTAIN SOLUTION OF A SET OF SIMULTANEOUS LINEAR EQUATIONS,
  12243. C          AX=B
  12244. C
  12245. C       USAGE
  12246. C          CALL SIMQ(A,B,N,KS)
  12247. C
  12248. C       DESCRIPTION OF PARAMETERS
  12249. C          A - MATRIX OF COEFFICIENTS STORED COLUMNWISE.  THESE ARE
  12250. C              DESTROYED IN THE COMPUTATION.  THE SIZE OF MATRIX A IS
  12251. C              N BY N.
  12252. C          B - VECTOR OF ORIGINAL CONSTANTS (LENGTH N). THESE ARE
  12253. C              REPLACED BY FINAL SOLUTION VALUES, VECTOR X.
  12254. C          N - NUMBER OF EQUATIONS AND VARIABLES. N MUST BE .GT. ONE.
  12255. C          KS - OUTPUT DIGIT
  12256. C               0 FOR A NORMAL SOLUTION
  12257. C               1 FOR A SINGULAR SET OF EQUATIONS
  12258. C
  12259. C       REMARKS
  12260. C          MATRIX A MUST BE GENERAL.
  12261. C          IF MATRIX IS SINGULAR , SOLUTION VALUES ARE MEANINGLESS.
  12262. C          AN ALTERNATIVE SOLUTION MAY BE OBTAINED BY USING MATRIX
  12263. C          INVERSION (MINV) AND MATRIX PRODUCT (GMPRD).
  12264. C
  12265. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12266. C          NONE
  12267. C
  12268. C       METHOD
  12269. C          METHOD OF SOLUTION IS BY ELIMINATION USING LARGEST PIVOTAL
  12270. C          DIVISOR. EACH STAGE OF ELIMINATION CONSISTS OF INTERCHANGING
  12271. C          ROWS WHEN NECESSARY TO AVOID DIVISION BY ZERO OR SMALL
  12272. C          ELEMENTS.
  12273. C          THE FORWARD SOLUTION TO OBTAIN VARIABLE N IS DONE IN
  12274. C          N STAGES. THE BACK SOLUTION FOR THE OTHER VARIABLES IS
  12275. C          CALCULATED BY SUCCESSIVE SUBSTITUTIONS. FINAL SOLUTION
  12276. C          VALUES ARE DEVELOPED IN VECTOR B, WITH VARIABLE 1 IN B(1),
  12277. C          VARIABLE 2 IN B(2),........, VARIABLE N IN B(N).
  12278. C          IF NO PIVOT CAN BE FOUND EXCEEDING A TOLERANCE OF 0.0,
  12279. C          THE MATRIX IS CONSIDERED SINGULAR AND KS IS SET TO 1. THIS
  12280. C          TOLERANCE CAN BE MODIFIED BY REPLACING THE FIRST STATEMENT.
  12281. C
  12282. C    ..................................................................
  12283. C
  12284.     SUBROUTINE SIMQ(A,B,N,KS)
  12285.     DIMENSION A(1),B(1)
  12286. C
  12287. C       FORWARD SOLUTION
  12288. C
  12289.     TOL=0.0
  12290.     KS=0
  12291.     JJ=-N
  12292.     DO 65 J=1,N
  12293.     JY=J+1
  12294.     JJ=JJ+N+1
  12295.     BIGA=0
  12296.     IT=JJ-J
  12297.     DO 30 I=J,N
  12298. C
  12299. C       SEARCH FOR MAXIMUM COEFFICIENT IN COLUMN
  12300. C
  12301.     IJ=IT+I
  12302.     IF(ABS(BIGA)-ABS(A(IJ))) 20,30,30
  12303. 20    BIGA=A(IJ)
  12304.     IMAX=I
  12305. 30    CONTINUE
  12306. C
  12307. C       TEST FOR PIVOT LESS THAN TOLERANCE (SINGULAR MATRIX)
  12308. C
  12309.     IF(ABS(BIGA)-TOL) 35,35,40
  12310. 35    KS=1
  12311.     RETURN
  12312. C
  12313. C       INTERCHANGE ROWS IF NECESSARY
  12314. C
  12315. 40    I1=J+N*(J-2)
  12316.     IT=IMAX-J
  12317.     DO 50 K=J,N
  12318.     I1=I1+N
  12319.     I2=I1+IT
  12320.     SAVE=A(I1)
  12321.     A(I1)=A(I2)
  12322.     A(I2)=SAVE
  12323. C
  12324. C       DIVIDE EQUATION BY LEADING COEFFICIENT
  12325. C
  12326. 50    A(I1)=A(I1)/BIGA
  12327.     SAVE=B(IMAX)
  12328.     B(IMAX)=B(J)
  12329.     B(J)=SAVE/BIGA
  12330. C
  12331. C       ELIMINATE NEXT VARIABLE
  12332. C
  12333.     IF(J-N) 55,70,55
  12334. 55    IQS=N*(J-1)
  12335.     DO 65 IX=JY,N
  12336.     IXJ=IQS+IX
  12337.     IT=J-IX
  12338.     DO 60 JX=JY,N
  12339.     IXJX=N*(JX-1)+IX
  12340.     JJX=IXJX+IT
  12341. 60    A(IXJX)=A(IXJX)-(A(IXJ)*A(JJX))
  12342. 65    B(IX)=B(IX)-(B(J)*A(IXJ))
  12343. C
  12344. C       BACK SOLUTION
  12345. C
  12346. 70    NY=N-1
  12347.     IT=N*N
  12348.     DO 80 J=1,NY
  12349.     IA=IT-J
  12350.     IB=N-J
  12351.     IC=N
  12352.     DO 80 K=1,J
  12353.     B(IB)=B(IB)-A(IA)*B(IC)
  12354.     IA=IA-N
  12355. 80    IC=IC-1
  12356.     RETURN
  12357.     END
  12358. C
  12359. C    ..................................................................
  12360. C
  12361. C       SUBROUTINE SMO
  12362. C
  12363. C       PURPOSE
  12364. C          TO SMOOTH OR FILTER SERIES A BY WEIGHTS W.
  12365. C
  12366. C       USAGE
  12367. C          CALL SMO (A,N,W,M,L,R)
  12368. C
  12369. C       DESCRIPTION OF PARAMETERS
  12370. C          A - INPUT VECTOR OF LENGTH N CONTAINING TIME SERIES DATA.
  12371. C          N - LENGTH OF SERIES A.
  12372. C          W - INPUT VECTOR OF LENGTH M CONTAINING WEIGHTS.
  12373. C          M - NUMBER OF ITEMS IN WEIGHT VECTOR.  M MUST BE AN ODD
  12374. C              INTEGER.  (IF M IS AN EVEN INTEGER, ANY FRACTION
  12375. C              RESULTING FROM THE CALCULATION OF (L*(M-1))/2 IN (1)
  12376. C              AND (2) BELOW WILL BE TRUNCATED.)
  12377. C          L - SELECTION INTEGER.  FOR EXAMPLE, L=12 MEANS THAT WEIGHTS
  12378. C              ARE APPLIED TO EVERY 12-TH ITEM OF A.  L=1 APPLIES
  12379. C              WEIGHTS TO SUCCESSIVE ITEMS OF A.  FOR MONTHLY DATA,
  12380. C              L=12 GIVES YEAR-TO-YEAR AVERAGES AND L=1 GIVES MONTH-TO-
  12381. C              MONTH AVERAGES.
  12382. C          R - OUTPUT VECTOR OF LENGTH N.  FROM IL TO IH ELEMENTS OF
  12383. C              THE VECTOR R ARE FILLED WITH THE SMOOTHED SERIES AND
  12384. C              OTHER ELEMENTS WITH ZERO, WHERE
  12385. C                   IL=(L*(M-1))/2+1  ................ (1)
  12386. C                   IH=N-(L*(M-1))/2  ................ (2)
  12387. C
  12388. C       REMARKS
  12389. C          N MUST BE GREATER THAN OR EQUAL TO THE PRODUCT OF L*M.
  12390. C
  12391. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12392. C          NONE
  12393. C
  12394. C       METHOD
  12395. C          REFER TO THE ARTICLE 'FORTRAN SUBROUTINES FOR TIME SERIES
  12396. C          ANALYSIS', BY J. R. HEALY AND B. P. BOGERT, COMMUNICATIONS
  12397. C          OF ACM, V.6, NO.1, JANUARY, 1963.
  12398. C
  12399. C    ..................................................................
  12400. C
  12401.     SUBROUTINE SMO (A,N,W,M,L,R)
  12402.     DIMENSION A(1),W(1),R(1)
  12403. C
  12404. C    INITIALIZATION
  12405. C
  12406.     DO 110 I=1,N
  12407. 110    R(I)=0.0
  12408.     IL=(L*(M-1))/2+1
  12409.     IH=N-(L*(M-1))/2
  12410. C
  12411. C    SMOOTH SERIES A BY WEIGHTS W
  12412. C
  12413.     DO 120 I=IL,IH
  12414.     K=I-IL+1
  12415.     DO 120 J=1,M
  12416.     IP=(J*L)-L+K
  12417. 120    R(I)=R(I)+A(IP)*W(J)
  12418.     RETURN
  12419.     END
  12420. C
  12421. C    ..................................................................
  12422. C
  12423. C       SAMPLE PROGRAM FOR REAL AND COMPLEX ROOTS OF A REAL POLY-
  12424. C       NOMIAL - SMPRT
  12425. C
  12426. C       PURPOSE
  12427. C          COMPUTES THE REAL AND COMPLEX ROOTS OF A REAL POLYNOMIAL
  12428. C          WHOSE COEFFICIENTS ARE INPUT.
  12429. C
  12430. C       REMARKS
  12431. C          THE ORDER OF THE POLYNOMIAL MUST BE GREATER THAN ONE AND
  12432. C          LESS THAN THIRTY SEVEN
  12433. C
  12434. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12435. C          POLRT
  12436. C
  12437. C       METHOD
  12438. C          READS A CONTROL CARD CONTAINING THE IDENTIFICATION CODE AND
  12439. C          THE ORDER OF THE POLYNOMIAL WHOSE COEFFICIENTS ARE
  12440. C          CONTAINED ON THE FOLLOWING DATA CARDS. THE COEFFICIENTS
  12441. C          ARE THEN READ AND THE ROOTS ARE COMPUTED.
  12442. C          MORE THAN ONE CONTROL CARD AND CORRESPONDING DATA CAN BE
  12443. C          PROCESSED. EXECUTION IS TERMINATED BY A BLANK CONTROL CARD.
  12444. C
  12445. C    ..................................................................
  12446. C
  12447. c       DIMENSION A(37),W(37),ROOTR(37),ROOTI(37)
  12448. C
  12449. C       ...............................................................
  12450. C
  12451. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  12452. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  12453. C       STATEMENT WHICH FOLLOWS.
  12454. C
  12455. C    DOUBLE PRECISION A,W,ROOTR,ROOTI
  12456. C
  12457. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  12458. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  12459. C       ROUTINE.
  12460. C
  12461. C       ...............................................................
  12462. C
  12463. C    OPEN (UNIT=5, DEVICE='CDR', ACCESS='SEQIN')
  12464. C    OPEN (UNIT=6, DEVICE='LPT', ACCESS='SEQOUT')
  12465. c5    READ(5,10)ID,IORD
  12466. c10    FORMAT(1X,I4,3X,I2)
  12467. c    IF(ID+IORD)100,100,20
  12468. c20    WRITE(6,30)ID,IORD
  12469. c30    FORMAT(1H1,61HREAL AND COMPLEX ROOTS OF A POLYNOMIAL USING SUBROUT
  12470. c     1INE POLRT///  17H FOR POLYNOMIAL  ,I4,2X,10HOF ORDER  ,I2//1H ,
  12471. c     226HTHE INPUT COEFFICIENTS ARE,//)
  12472. c    J=IORD+1
  12473. c    READ(5,40)(A(I),I=1,J)
  12474. c40    FORMAT(7F10.0)
  12475. c    WRITE(6,50)(A(I),I=1,J)
  12476. c50    FORMAT(6E16.7)
  12477. c    CALL POLRT(A,W,IORD,ROOTR,ROOTI,IER)
  12478. c    IF(IER-1)90,60,70
  12479. c60    WRITE(6,65)
  12480. c65    FORMAT(//1H ,33HORDER OF POLYNOMIAL LESS THAN ONE)
  12481. c    GO TO 5
  12482. c70    IF(IER-3)75,80,78
  12483. c75    WRITE(6,77)
  12484. c77    FORMAT(//1H ,35HORDER OF POLYNOMIAL GREATER THAN 36)
  12485. c    GO TO 5
  12486. c78    WRITE(6,79)
  12487. c79    FORMAT(//1H ,31H HIGH ORDER COEFFICIENT IS ZERO)
  12488. c    GO TO 5
  12489. c80    WRITE(6,85)
  12490. c85    FORMAT(//1H ,49HUNABLE TO DETERMINE ROOT. THOSE ALREADY FOUND ARE)
  12491. c90    WRITE(6,95)
  12492. c95    FORMAT(//1H ,5X,9HREAL ROOT,6X,12HCOMPLEX ROOT//)
  12493. c    DO 96 I=1,IORD
  12494. c96    WRITE(6,97)ROOTR(I),ROOTI(I)
  12495. c97    FORMAT(1H ,2E16.7)
  12496. c    GO TO 5
  12497. c  100    STOP
  12498. c    END
  12499. C
  12500. C     ..................................................................
  12501. C
  12502. C        SUBROUTINE SMPY
  12503. C
  12504. C        PURPOSE
  12505. C           MULTIPLY EACH ELEMENT OF A MATRIX BY A SCALAR TO FORM A
  12506. C           RESULTANT MATRIX
  12507. C
  12508. C        USAGE
  12509. C           CALL SMPY(A,C,R,N,M,MS)
  12510. C
  12511. C        DESCRIPTION OF PARAMETERS
  12512. C           A - NAME OF INPUT MATRIX
  12513. C           C - SCALAR
  12514. C           R - NAME OF OUTPUT MATRIX
  12515. C           N - NUMBER OF ROWS IN MATRIX A AND R
  12516. C           M - NUMBER OF COLUMNS IN MATRIX A AND R
  12517. C           MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A (AND R)
  12518. C                  0 - GENERAL
  12519. C                  1 - SYMMETRIC
  12520. C                  2 - DIAGONAL
  12521. C
  12522. C        REMARKS
  12523. C           NONE
  12524. C
  12525. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12526. C           LOC
  12527. C
  12528. C        METHOD
  12529. C           SCALAR IS MULTIPLIED BY EACH ELEMENT OF MATRIX
  12530. C
  12531. C     ..................................................................
  12532. C
  12533.       SUBROUTINE SMPY(A,C,R,N,M,MS)
  12534.       DIMENSION A(1),R(1)
  12535. C
  12536. C        COMPUTE VECTOR LENGTH, IT
  12537. C
  12538.       CALL LOC(N,M,IT,N,M,MS)
  12539. C
  12540. C        MULTIPLY BY SCALAR
  12541. C
  12542.       DO 1 I=1,IT
  12543.     1 R(I)=A(I)*C
  12544.       RETURN
  12545.       END
  12546. C
  12547. C    ..................................................................
  12548. C
  12549. C       SAMPLE MAIN PROGRAM - SOLN
  12550. C
  12551. C       PURPOSE
  12552. C          SOLUTION OF A SET OF SIMULTANEOUS EQUATIONS
  12553. C
  12554. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12555. C          SIMQ
  12556. C          MATIN
  12557. C          MXOUT
  12558. C          LOC
  12559. C
  12560. C       METHOD
  12561. C          A MATRIX OF SIMULTANEOUS EQUATIONS COEFFICIENTS AND A VECTOR
  12562. C          OF CONSTANTS ARE READ FROM THE STANDARD INPUT DEVICE. THE
  12563. C          SOLUTION IS OBTAINED AND LISTED ON THE STANDARD OUTPUT
  12564. C          DEVICE. THIS PROCEDURE IS REPEATED FOR OTHER SETS OF
  12565. C          EQUATIONS UNTIL A BLANK CARD IS ENCOUNTERED.
  12566. C
  12567. C    ..................................................................
  12568. C
  12569. C       MATRIX IS DIMENSIONED FOR 2500 ELEMENTS. THEREFORE, NUMBER OF
  12570. C       EQUATIONS TO BE SOLVED CANNOT EXCEED 50 UNLESS DIMENSION
  12571. C       STATEMENT IS CHANGED
  12572. cC
  12573. c    DIMENSION A(2500),B(50)
  12574. cC
  12575. c10    FORMAT(1H1,34HSOLUTION OF SIMULTANEOUS EQUATIONS)
  12576. c11    FORMAT(1H0,44HDIMENSIONED AREA TOO SMALL FOR INPUT MATRIX ,I4)
  12577. c12    FORMAT(1H0,20HEXECUTION TERMINATED)
  12578. c13    FORMAT(1H0,47HROW AND COLUMN DIMENSIONS NOT EQUAL FOR MATRIX ,I4)
  12579. c14    FORMAT(1H0,42HINCORRECT NUMBER OF DATA CARDS FOR MATRIX ,I4)
  12580. c15    FORMAT(1H0,18HGO ON TO NEXT CASE)
  12581. c16    FORMAT(1H0,38HSTRUCTURE CODE IS NOT ZERO FOR MATRIX ,I4)
  12582. c17    FORMAT(1H1,17HORIGINAL B VECTOR,////)
  12583. c18    FORMAT(1H1,15HSOLUTION VALUES,////)
  12584. c19    FORMAT(1H0,18HMATRIX IS SINGULAR)
  12585. c20    FORMAT(7F10.0)
  12586. c21    FORMAT(I3,10X,E16.6)
  12587. c22    FORMAT(1H0,11HEND OF CASE)
  12588. cC    OPEN (UNIT=5, DEVICE='CDR', ACCESS='SEQIN')
  12589. cC    OPEN (UNIT=6, DEVICE='LPT', ACCESS='SEQOUT')
  12590. cC
  12591. cC    ..................................................................
  12592. cC
  12593. c    WRITE (6,10)
  12594. c25    CALL MATIN(ICOD,A,2500,N,M,MS,IER)
  12595. c    IF(N) 30,95,30
  12596. c30    IF(IER-1) 45,35,40
  12597. c35    WRITE(6,11) ICOD
  12598. c    GO TO 90
  12599. c40    WRITE(6,14) ICOD
  12600. c    GO TO 95
  12601. c45    IF(N-M) 50,55,50
  12602. c50    WRITE(6,13) ICOD
  12603. c    GO TO 90
  12604. c55    IF(MS) 60,65,60
  12605. c60    WRITE(6,16) ICOD
  12606. c    GO TO 90
  12607. c65    CALL MXOUT(ICOD,A,N,M,MS,60,120,2)
  12608. c    READ(5,20)(B(I),I=1,N)
  12609. c    WRITE(6,17)
  12610. c    DO 70 I=1,N
  12611. c70    WRITE(6,21) I,B(I)
  12612. c    CALL SIMQ(A,B,N,KS)
  12613. c    IF(KS-1) 80,75,80
  12614. c75    WRITE(6,19)
  12615. c    WRITE(6,15)
  12616. c    GO TO 25
  12617. c80    WRITE(6,18)
  12618. c    DO 85 I=1,N
  12619. c85    WRITE(6,21) I,B(I)
  12620. c    WRITE(6,22)
  12621. c    GO TO 25
  12622. c90    READ(5,20)(B(I),I=1,N)
  12623. c    WRITE(6,15)
  12624. c    GO TO 25
  12625. c95    WRITE(6,12)
  12626. c    STOP
  12627. c    END
  12628. C
  12629. C    ..................................................................
  12630. C
  12631. C       SUBROUTINE SRANK
  12632. C
  12633. C       PURPOSE
  12634. C          TEST CORRELATION BETWEEN TWO VARIABLES BY MEANS OF SPEARMAN
  12635. C          RANK CORRELATION COEFFICIENT
  12636. C
  12637. C       USAGE
  12638. C          CALL SRANK(A,B,R,N,RS,T,NDF,NR)
  12639. C
  12640. C       DESCRIPTION OF PARAMETERS
  12641. C          A   - INPUT VECTOR OF N OBSERVATIONS FOR FIRST VARIABLE
  12642. C          B   - INPUT VECTOR OF N OBSERVATIONS FOR SECOND VARIABLE
  12643. C          R   - OUTPUT VECTOR FOR RANKED DATA, LENGTH IS 2*N. SMALLEST
  12644. C                OBSERVATION IS RANKED 1, LARGEST IS RANKED N. TIES
  12645. C                ARE ASSIGNED AVERAGE OF TIED RANKS.
  12646. C          N   - NUMBER OF OBSERVATIONS
  12647. C          RS  - SPEARMAN RANK CORRELATION COEFFICIENT (OUTPUT)
  12648. C          T   - TEST OF SIGNIFICANCE OF RS (OUTPUT)
  12649. C          NDF - NUMBER OF DEGREES OF FREEDOM (OUTPUT)
  12650. C          NR  - CODE, 0 FOR UNRANKED DATA IN A AND B, 1 FOR RANKED
  12651. C                DATA IN A AND B (INPUT)
  12652. C
  12653. C       REMARKS
  12654. C          T IS SET TO ZERO IF N IS LESS THAN TEN
  12655. C
  12656. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12657. C          RANK
  12658. C          TIE
  12659. C
  12660. C       METHOD
  12661. C          DESCRIBED IN S. SIEGEL, 'NONPARAMETRIC STATISTICS FOR THE
  12662. C          BEHAVIORAL SCIENCES', MCGRAW-HILL, NEW YORK, 1956,
  12663. C          CHAPTER 9
  12664. C
  12665. C    ..................................................................
  12666. C
  12667.     SUBROUTINE SRANK(A,B,R,N,RS,T,NDF,NR)
  12668.     DIMENSION A(1),B(1),R(1)
  12669. C
  12670.     FNNN=N*N*N-N
  12671. C
  12672. C       DETERMINE WHETHER DATA IS RANKED
  12673. C
  12674.     IF(NR-1) 5, 10, 5
  12675. C
  12676. C       RANK DATA IN A AND B VECTORS AND ASSIGN TIED OBSERVATIONS
  12677. C       AVERAGE OF TIED RANKS
  12678. C
  12679. 5    CALL RANK (A,R,N)
  12680.     CALL RANK (B,R(N+1),N)
  12681.     GO TO 40
  12682. C
  12683. C       MOVE RANKED DATA TO R VECTOR
  12684. C
  12685. 10    DO 20 I=1,N
  12686. 20    R(I)=A(I)
  12687.     DO 30 I=1,N
  12688.     J=I+N
  12689. 30    R(J)=B(I)
  12690. C
  12691. C       COMPUTE SUM OF SQUARES OF RANK DIFFERENCES
  12692. C
  12693. 40    D=0.0
  12694.     DO 50 I=1,N
  12695.     J=I+N
  12696. 50    D=D+(R(I)-R(J))*(R(I)-R(J))
  12697. C
  12698. C       COMPUTE TIED SCORE INDEX
  12699. C
  12700.     KT=1
  12701.     CALL TIE (R,N,KT,TSA)
  12702.     CALL TIE (R(N+1),N,KT,TSB)
  12703. C
  12704. C       COMPUTE SPEARMAN RANK CORRELATION COEFFICIENT
  12705. C
  12706.     IF(TSA) 60,55,60
  12707. 55    IF(TSB) 60,57,60
  12708. 57    RS=1.0-6.0*D/FNNN
  12709.     GO TO 70
  12710. 60    X=FNNN/12.0-TSA
  12711.     Y=X+TSA-TSB
  12712.     RS=(X+Y-D)/(2.0*(SQRT(X*Y)))
  12713. C
  12714. C       COMPUTE T AND DEGREES OF FREEDOM IF N IS 10 OR LARGER
  12715. C
  12716.     T=0.0
  12717. 70    IF(N-10) 80,75,75
  12718. 75    T=RS*SQRT(FLOAT(N-2)/(1.0-RS*RS))
  12719. 80    NDF=N-2
  12720.     RETURN
  12721.     END
  12722. C
  12723. C    ..................................................................
  12724. C
  12725. C       SUBROUTINE SRATE
  12726. C
  12727. C       PURPOSE
  12728. C          TO COMPUTE THE PROPORTION OF SUBJECTS SURVIVING, THE
  12729. C          SURVIVAL RATES AND THE STANDARD ERRORS FOR SUCCESSIVELY
  12730. C          REDUCED TIME PERIODS.  THE SURVIVAL RATE IS COMPUTED FOR
  12731. C          EACH OF K PERIODS, WHERE K IS A CONSTANT TO BE SPECIFIED AND
  12732. C          IS LESS THAN OR EQUAL TO N (WHERE N = TOTAL NUMBER OF
  12733. C          PERIODS).
  12734. C
  12735. C       USAGE
  12736. C          CALL SRATE (N,K,X,IE)
  12737. C
  12738. C       DESCRIPTION OF PARAMETERS
  12739. C          N - THE TOTAL NUMBER OF PERIODS AFTER TREATMENT OR DIAGNOSIS
  12740. C          K - THE SPECIFIED PERIOD UP TO WHICH SURVIVAL RATES ARE TO
  12741. C              BE CALCULATED
  12742. C          X - AN INPUT AND OUTPUT MATRIX (N X 9) CONTAINING THE
  12743. C              FOLLOWING INFORMATION
  12744. C              FOR INPUT--STORED IN THE N ROWS OF EACH COLUMN
  12745. C                 COL 1 - NUMBER OF SUBJECTS ALIVE AT THE BEGINNING OF
  12746. C                         PERIOD
  12747. C                 COL 2 - NUMBER OF SUBJECTS WHICH DIED DURING THE
  12748. C                         PERIOD
  12749. C                 COL 3 - NUMBER OF SUBJECTS LOST TO FOLLOW-UP DURING
  12750. C                         THE PERIOD
  12751. C                 COL 4 - NUMBER OF SUBJECTS WITHDRAWN ALIVE DURING THE
  12752. C                         PERIOD
  12753. C                   FOR OUTPUT--STORED IN THE FIRST K ROWS OF EACH
  12754. C                   COLUMN
  12755. C                 COL 5 - EFFECTIVE NUMBER EXPOSED TO THE RISK OF DYING
  12756. C                 COL 6 - PROPORTION WHO DIED DURING THE PERIOD
  12757. C                 COL 7 - PROPORTION WHO SURVIVED DURING THE PERIOD
  12758. C                 COL 8 - SURVIAL RATE
  12759. C                 COL 9 - STANDARD ERROR OF THE SURVIVAL RATE
  12760. C          IE- 1, IF K IS NOT IN THE CLOSED INTERVAL (0,N).
  12761. C              2, IF THE NUMBER OF SUBJECTS ALIVE AT THE BEGINNING
  12762. C              OF PERIOD I IS LESS THAN THE SUM OF THOSE WHICH DIED,
  12763. C              WERE LOST, OR WERE WITHDRAWN DURING PERIOD I (I=1,...N)
  12764. C              3, IF THE NUMBER OF SUBJECTS WHICH DIED, WERE LOST, OR
  12765. C              WERE WITHDRAWN IN PERIOD I IS NOT EQUAL TO THE NUMBER
  12766. C              ALIVE AT THE BEGINNING OF PERIOD I LESS THE NUMBER
  12767. C              ALIVE AT THE BEGINNING OF PERIOD I + 1 (I=1,...N-1)
  12768. C
  12769. C       REMARKS
  12770. C          IF THE SUBJECTS IN A GIVEN GROUP ARE ALL DIAGNOSED OR
  12771. C          TREATED AT THE SAME TIME, THE CONSTANT K MAY BE SET EQUAL TO
  12772. C          N .  IF THE SUBJECTS IN A GIVEN GOUP ENTER THE STUDY AT
  12773. C          VARYING TIMES, K CAN BE NO GREATER THAN N-1.
  12774. C
  12775. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12776. C          NONE
  12777. C
  12778. C       METHOD
  12779. C          REFER TO S. J. CUTLER AND F. EDERER 'MAXIMUM UTILIZATION OF
  12780. C          THE LIFE TABLE METHOD IN ANALYZING SURVIVAL', JOURNAL OF
  12781. C          CHRONIC DISEASES, DECEMBER, 1958.  PP 699-712.
  12782. C
  12783. C    ..................................................................
  12784. C
  12785.     SUBROUTINE SRATE (N,K,X,IE)
  12786. C
  12787.     DIMENSION X(1)
  12788. C
  12789. C       INITIALIZATION AND ERROR CHECKING
  12790. C
  12791.     IE=0
  12792.     NP4=4*N+1
  12793.     NP9=NP4+NP4+N-2
  12794.     DO 1 I=NP4,NP9
  12795. 1    X(I)=0.0
  12796.     IF (K) 2,2,3
  12797. 2    IE=1
  12798.     GO TO 45
  12799. 3    IF(K-N) 4,4,2
  12800. 4    DO 9 I=1,N
  12801.     NP4=I+N
  12802.     NP9=NP4+N
  12803.     NP1=NP9+N
  12804.     IF(INT(X(I)-X(NP4)-X(NP9)-X(NP1)+.01)) 5,6,6
  12805. 5    IE=2
  12806.     GO TO 45
  12807. 6    IF(I-N) 7,9,9
  12808. 7    IF (INT(X(I+1)-X(I)+X(NP4)+X(NP9)+X(NP1)+.01)) 8,9,8
  12809. 8    IE=3
  12810.       GO TO 45
  12811. 9    CONTINUE
  12812. 15    L1=0
  12813.     L2=L1+N
  12814.     L3=L2+N
  12815.     L4=L3+N
  12816.     L5=L4+N
  12817.     L6=L5+N
  12818.     L7=L6+N
  12819.     L8=L7+N
  12820.     L9=L8+N
  12821.     LD=L2
  12822.     LE=L5
  12823.     LQ=L6
  12824.     SUM=0.0
  12825. C
  12826.     DO 40 I=1,K
  12827. C
  12828. C       COMPUTE EFFECTIVE NUMBER EXPOSED TO RISK OF DYING
  12829. C
  12830.     L1=L1+1
  12831.     L3=L3+1
  12832.     L4=L4+1
  12833.     L5=L5+1
  12834.     X(L5)=X(L1)-(X(L3)+X(L4))/2.0
  12835. C
  12836. C       COMPUTE PROPORTION OF DYING
  12837. C
  12838.     L2=L2+1
  12839.     L6=L6+1
  12840.     X(L6)=X(L2)/X(L5)
  12841. C
  12842. C       COMPUTE PROPORTION OF SURVIVING
  12843. C
  12844.     L7=L7+1
  12845.     X(L7)=1.0-X(L6)
  12846. C
  12847. C       COMPUTE SURVIVAL RATE
  12848. C
  12849.     L8=L8+1
  12850.     IF (I-1) 20, 20, 25
  12851. 20    X(L8)=X(L7)
  12852.     GO TO 30
  12853. 25    X(L8)=X(L8-1)*X(L7)
  12854. C
  12855. C       COMPUTE STANDARD ERROR OF SURVIVAL RATE
  12856. C
  12857. 30    L9=L9+1
  12858.     SUM=SUM+X(L6)/(X(L5)-X(L2))
  12859. 40    X(L9)=X(L8)*SQRT(SUM)
  12860. C
  12861. 45    RETURN
  12862.     END
  12863. C
  12864. C    ..................................................................
  12865. C
  12866. C       SUBROUTINE SRMA
  12867. C
  12868. C       PURPOSE
  12869. C          MULTIPLY ROW OF MATRIX BY A SCALAR AND ADD TO ANOTHER ROW
  12870. C          OF THE SAME MATRIX
  12871. C
  12872. C       USAGE
  12873. C          CALL SRMA(A,C,N,M,LA,LB)
  12874. C
  12875. C       DESCRIPTION OF PARAMETERS
  12876. C          A  - NAME OF MATRIX
  12877. C          C  - SCALAR
  12878. C          N  - NUMBER OF ROWS IN A
  12879. C          M  - NUMBER OF COLUMNS IN A
  12880. C          LA - ROW IN A TO BE MULTIPLIED BY SCALAR
  12881. C          LB - ROW IN A TO WHICH PRODUCT IS ADDED
  12882. C               IF 0 IS SPECIFIED, PRODUCT REPLACES ELEMENTS IN ROW LA
  12883. C
  12884. C       REMARKS
  12885. C          MATRIX A MUST BE A GENERAL MATRIX
  12886. C
  12887. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12888. C          NONE
  12889. C
  12890. C       METHOD
  12891. C          EACH ELEMENT OF ROW LA IS MULTIPLIED BY SCALAR C AND THE
  12892. C          PRODUCT IS ADDED TO THE CORRESPONDING ELEMENT OF ROW LB.
  12893. C          ROW LA REMAINS UNAFFECTED BY THE OPERATION.
  12894. C          IF PARAMETER LB CONTAINS ZERO, MULTIPLICATION BY THE SCALAR
  12895. C          IS PERFORMED AND THE PRODUCT REPLACES ELEMENTS IN ROW LA.
  12896. C
  12897. C    ..................................................................
  12898. C
  12899.     SUBROUTINE SRMA(A,C,N,M,LA,LB)
  12900.     DIMENSION A(1)
  12901. C
  12902.     LAJ=LA-N
  12903.     LBJ=LB-N
  12904.     DO 3 J=1,M
  12905. C
  12906. C       LOCATE ELEMENT IN BOTH ROWS
  12907. C
  12908.     LAJ=LAJ+N
  12909.     LBJ=LBJ+N
  12910. C
  12911. C       CHECK LB FOR ZERO
  12912. C
  12913.     IF(LB) 1,2,1
  12914. C
  12915. C       IF NOT, MULTIPLY BY CONSTANT AND ADD TO OTHER ROW
  12916. C
  12917. 1    A(LBJ)=A(LAJ)*C+A(LBJ)
  12918.     GO TO 3
  12919. C
  12920. C       OTHERWISE, MULTIPLY ROW BY CONSTANT
  12921. C
  12922. 2    A(LAJ)=A(LAJ)*C
  12923. 3    CONTINUE
  12924.     RETURN
  12925.     END
  12926. C
  12927. C    ..................................................................
  12928. C
  12929. C       SUBROUTINE SSUB
  12930. C
  12931. C       PURPOSE
  12932. C          SUBTRACT A SCALAR FROM EACH ELEMENT OF A MATRIX TO FORM A
  12933. C          RESULTANT MATRIX
  12934. C
  12935. C       USAGE
  12936. C          CALL SSUB(A,C,R,N,M,MS)
  12937. C
  12938. C       DESCRIPTION OF PARAMETERS
  12939. C          A - NAME OF INPUT MATRIX
  12940. C          C - SCALAR
  12941. C          R - NAME OF OUTPUT MATRIX
  12942. C          N - NUMBER OF ROWS IN MATRIX A AND R
  12943. C          M - NUMBER OF COLUMNS IN MATRIX A AND R
  12944. C          MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A (AND R)
  12945. C                 0 - GENERAL
  12946. C                 1 - SYMMETRIC
  12947. C                 2 - DIAGONAL
  12948. C
  12949. C       REMARKS
  12950. C          NONE
  12951. C
  12952. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12953. C          LOC
  12954. C
  12955. C       METHOD
  12956. C          SCALAR IS SUBTRACTED FROM EACH EACH ELEMENT OF MATRIX
  12957. C
  12958. C    ..................................................................
  12959. C
  12960.     SUBROUTINE SSUB(A,C,R,N,M,MS)
  12961.     DIMENSION A(1),R(1)
  12962. C
  12963. C       COMPUTE VECTOR LENGTH, IT
  12964. C
  12965.     CALL LOC(N,M,IT,N,M,MS)
  12966. C
  12967. C       SUBTRACT SCALAR
  12968. C
  12969.     DO 1 I=1,IT
  12970. 1    R(I)=A(I)-C
  12971.     RETURN
  12972.     END
  12973. C
  12974. C    ..................................................................
  12975. C
  12976. C       SAMPLE MAIN PROGRAM FOR STEP-WISE MULTIPLE REGRESSION - STEPR
  12977. C
  12978. C       PURPOSE
  12979. C          (1) READ THE PROBLEM PARAMETER CARD FOR A STEP-WISE MULTIPLE
  12980. C          REGRESSION, (2) READ SUBSET SELECTION CARDS, (3) CALL THE
  12981. C          SUBROUTINE TO CALCULATE MEANS, STANDARD DEVIATIONS, SIMPLE
  12982. C          CORRELATION COEFFICIENTS, AND (4) CALL THE SUBROUTINE TO
  12983. C          PERFORM EACH STEP OF REGRESSION ANALYSIS.
  12984. C
  12985. C       REMARKS
  12986. C           THE NUMBER OF OBSERVATIONS, N, MUST BE GREATER THAN M+2,
  12987. C          WHERE M IS THE NUMBER OF VARIABLES.  IF SELECTION CARDS ARE
  12988. C          NOT PRESENT, THIS PROGRAM CAN NOT PERFORM STEP-WISE MULTIPLE
  12989. C          REGRESSION.
  12990. C
  12991. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  12992. C          CORRE (WHICH, IN TURN, CALLS THE SUBROUTINE DATA)
  12993. C          MSTR  (WHICH, IN TURN, CALLS THE SUBROUTINE LOC)
  12994. C          STPRG (WHICH, IN TURN, CALLS THE SUBROUTINE STOUT)
  12995. C
  12996. C       METHOD
  12997. C          REFER TO C. A. BENNETT AND N. L. FRANKLIN, 'STATISTICAL
  12998. C          ANALYSIS IN CHEMISTRY AND THE CHEMICAL INDUSTRY', JOHN WILEY
  12999. C          AND SONS, 1954, APPENDIX 6A.
  13000. C
  13001. C    ..................................................................
  13002. C
  13003. C    THE FOLLOWING DIMENSIONS MUST BE GREATER THAN OR EQUAL TO THE
  13004. C    NUMBER OF VARIABLES, M..
  13005. cC
  13006. c       DIMENSION XBAR(35),STD(35),D(35),B(35),T(35),IDX(35),L(35)
  13007. cC
  13008. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  13009. cC    PRODUCT OF M*M..
  13010. cC
  13011. c       DIMENSION RX(1225)
  13012. cC
  13013. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO THE
  13014. cC    (M+1)*M/2..
  13015. cC
  13016. c       DIMENSION R(630)
  13017. cC
  13018. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO 5..
  13019. cC
  13020. c       DIMENSION NSTEP(5)
  13021. cC
  13022. cC    THE FOLLOWING DIMENSION MUST BE GREATER THAN OR EQUAL TO 11..
  13023. cC
  13024. c       DIMENSION ANS(11)
  13025. cC
  13026. cC    ..................................................................
  13027. cC
  13028. cC       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  13029. cC       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  13030. cC       STATEMENT WHICH FOLLOWS.
  13031. cC
  13032. cC    DOUBLE PRECISION XBAR,STD,RX,R,B,T,ANS,YEST
  13033. cC
  13034. cC       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  13035. cC       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  13036. cC       ROUTINE.
  13037. cC
  13038. cC    ..................................................................
  13039. cC
  13040. c1    FORMAT(A4,A2,I5,2I2,F6.0,I1)
  13041. c2    FORMAT(53H0NUMBER OF SELECTIONS NOT SPECIFIED.  JOB TERMINATED.)
  13042. c3    FORMAT(35H1STEP-WISE MULTIPLE REGRESSION.....A4,A2)
  13043. c4    FORMAT(31H0VARIABLE     MEAN     STANDARD/4X,3HN0.16X,9HDEVIATION)
  13044. c5    FORMAT(4X,I2,F14.5,F12.5)
  13045. c6    FORMAT(19H1CORRELATION MATRIX)
  13046. c7    FORMAT(4H0ROWI3/(10F12.5))
  13047. c8    FORMAT(72I1)
  13048. c9    FORMAT(23H0NUMBER OF OBSERVATIONSI5)
  13049. c10    FORMAT(20H NUMBER OF VARIABLES3X,I5)
  13050. c11    FORMAT(21H NUMBER OF SELECTIONS2X,I5)
  13051. c12    FORMAT(28H0CONSTANT TO LIMIT VARIABLESF9.5)
  13052. c13    FORMAT(/15H1SELECTION.....I2)
  13053. c14    FORMAT(16X,18HTABLE OF RESIDUALS//9H CASE NO.5X,7HY VALUE5X,10HY E
  13054. c     1STIMATE6X,8HRESIDUAL)
  13055. c15    FORMAT(I7,F15.5,2F14.5)
  13056. c16    FORMAT(1H )
  13057. c17    FORMAT(1H1)
  13058. c18    FORMAT(1H0,'****COLUMN',I4,' OF SELECTION CARD',I5,' IS IN ERROR.
  13059. c     1 IT IS POSSIBLE THAT COLUMNS SUCCEEDING THAT COLUMN ARE ALSO'
  13060. c     2/' INCORRECT.  THE SELECTION IS IGNORED.****')
  13061. c19    FORMAT(1H0,'****SELECTION CARD',I5,' DOES NOT NAME ONE AND ONLY ON
  13062. c     1E DEPENDENT VARIABLE.  SELECTION IGNORED.****')
  13063. c20    FORMAT(1H0,'****EITHER THE MATRIX IS SINGULAR, OR THE RESIDUAL SUM
  13064. c     1 OF SQUARES IS NEGATIVE IMPLYING EXTREME ILL CONDITION.',/,' SELEC
  13065. c     2TION IGNORED.****')
  13066. c21    FORMAT(1H0,'****',I6,' OBSERVATIONS ARE TOO FEW TO ALLOW PARAMETER'
  13067. c     1 'ESTIMATION FOR',I5,' VARIABLES.  JOB TERMINATED.****')
  13068. cC    DOUBLE PRECISION TMPFIL,FILE
  13069. cC    OPEN (UNIT=5, DEVICE='CDR', ACCESS='SEQIN')
  13070. cC    OPEN (UNIT=6, DEVICE='LPT', ACCESS='SEQOUT')
  13071. cC    FILE = TMPFIL('SSP')
  13072. cC    OPEN (UNIT=9, DEVICE='DSK', FILE=FILE, ACCESS='SEQINOUT',
  13073. cC    1    DISPOSE='DELETE')
  13074. cC
  13075. cC       READ PROBLEM PARAMETER CARD
  13076. cC
  13077. c    LOGICAL EOF
  13078. c    CALL CHKEOF (EOF)
  13079. c100    READ (5,1) PR1,PR2,N,M,NS,PCT,NR
  13080. c    IF (EOF) GOTO 999
  13081. cC       PR1.....PROBLEM CODE (MAY BE ALPHAMERIC)
  13082. cC       PR2.....PROBLEM CODE (CONTINUED)
  13083. cC       N ......NUMBER OF OBSERVATIONS
  13084. cC       M ......NUMBER OF VARIABLES
  13085. cC       NS......NUMBER OF SELECTIONS
  13086. cC       PCT.....A CONSTANT VALUE OF PROPORTION OF SUM OF SQUARES THAT
  13087. cC               WILL BE USED TO LIMIT VARIABLES ENTERING IN THE REGRES-
  13088. cC               SION
  13089. cC       NR......OPTION CODE FOR TABLE OF RESIDUALS
  13090. cC                 0 - IF IT IS NOT DESIRED
  13091. cC                 1 - IF IT IS DESIRED
  13092. cC
  13093. c    WRITE (6,3) PR1,PR2
  13094. c    WRITE (6,9) N
  13095. c    WRITE (6,10) M
  13096. c    IF(N-M-2) 101,101,102
  13097. c101    WRITE(6,21) N,M
  13098. c    STOP
  13099. c102    WRITE (6,11) NS
  13100. c    WRITE (6,12) PCT
  13101. cC
  13102. cC    LOGICAL TAPE 9 IS USED AS INTERMEDIATE STORAGE TO HOLD INPUT
  13103. cC    DATA.  THE INPUT DATA ARE WRITTEN ON LOGICAL TAPE 9 BY THE
  13104. cC    SPECIAL INPUT SUBROUTINE NAMED DATA.  THE STORED DATA MAY BE USED
  13105. cC    FOR RESIDUAL ANALYSIS.
  13106. cC
  13107. c    REWIND 9
  13108. cC
  13109. c    IO=0
  13110. c    X=0.0
  13111. cC
  13112. c    CALL CORRE (N,M,IO,X,XBAR,STD,RX,R,B,D,T)
  13113. cC
  13114. c    REWIND 9
  13115. cC
  13116. cC       PRINT MEANS AND STANDARD DEVIATION
  13117. cC
  13118. c    WRITE (6,4)
  13119. c    DO 105 I=1,M
  13120. c105    WRITE (6,5) I,XBAR(I),STD(I)
  13121. cC
  13122. cC       PRINT CORRELATION MATRIX
  13123. cC
  13124. c    WRITE (6,6)
  13125. c    DO 130 I=1,M
  13126. c    DO 125 J=1,M
  13127. c    IF(I-J) 110, 120, 120
  13128. c110    K=I+(J*J-J)/2
  13129. c    GO TO 125
  13130. c120    K=J+(I*I-I)/2
  13131. c125    T(J)=R(K)
  13132. c130    WRITE (6,7) I,(T(J),J=1,M)
  13133. cC
  13134. cC       TEST NUMBER OF SELECTIONS
  13135. cC
  13136. c    IF(NS) 135, 135, 140
  13137. c135    WRITE (6,2)
  13138. c    GO TO 200
  13139. cC
  13140. cC       SAVE THE MATRIX OF SUMS OF CROSS-PRODUCTS OF DEVIATIONS
  13141. cC
  13142. c140    CALL MSTR (RX,R,M,0,1)
  13143. cC
  13144. c    NSEL=1
  13145. c    GO TO 150
  13146. cC
  13147. cC       COPY THE MATRIX OF SUMS OF CROSS-PRODUCTS OF DEVIATIONS
  13148. cC
  13149. c145    CALL MSTR (R,RX,M,1,0)
  13150. cC
  13151. cC       READ A SELECTION CARD
  13152. cC
  13153. c150    WRITE (6,13) NSEL
  13154. c    READ (5,8) (IDX(J),J=1,M)
  13155. cC
  13156. cC       IN EACH POSITION OF IDX, ONE OF THE FOLLOWING CODES MUST BE
  13157. cC       SPECIFIED..
  13158. cC         0 OR BLANK - INDEPENDENT VARIABLE AVAILABLE FOR SELECTION
  13159. cC         1          - INDEPENDENT VARIABLE TO BE FORCED IN REGRESSION
  13160. cC         2          - VARIABLE TO BE DELETED
  13161. cC         3          - DEPENDENT VARIABLE
  13162. cC
  13163. c    N35=0
  13164. c    DO 155 K=1,M
  13165. c    IF (IDX(K)) 152,153,153
  13166. c152    WRITE (6,18) K,NSEL
  13167. c    GO TO 185
  13168. c153    IF (IDX(K)-3) 155,154,152
  13169. c154    N35=N35+1
  13170. c155    CONTINUE
  13171. c    IF (N35-1) 156,157,156
  13172. c156    WRITE (6,19) NSEL
  13173. c    GO TO 185
  13174. cC       CALL THE SUBROUTINE TO PERFORM A STEP-WISE REGRESSION ANALYSIS
  13175. cC
  13176. c157    CALL STPRG (M,N,RX,XBAR,IDX,PCT,NSTEP,ANS,L,B,STD,T,D,IER)
  13177. c    IF (IER) 158,159,158
  13178. c158    WRITE (6,20)
  13179. c    GO TO 185
  13180. cC
  13181. cC       FIND WHETHER TO PRINT THE TABLE OF RESIDUALS
  13182. cC
  13183. c159    IF(NR) 185, 185, 160
  13184. cC
  13185. cC       PRINT THE TABLE OF RESIDUALS
  13186. cC
  13187. cC
  13188. c160    WRITE (6,13) NSEL
  13189. c    WRITE (6,16)
  13190. c    WRITE (6,14)
  13191. c    MM=NSTEP(1)
  13192. c    DO 180 I=1,N
  13193. c    READ (9) (D(J),J=1,M)
  13194. c    YEST=ANS(9)
  13195. c    K=NSTEP(4)
  13196. c    DO 170 J=1,K
  13197. c    KK=L(J)
  13198. c170    YEST=YEST+B(J)*D(KK)
  13199. c    RESI=D(MM)-YEST
  13200. c180    WRITE (6,15) I,D(MM),YEST,RESI
  13201. c    REWIND 9
  13202. cC
  13203. cC       TEST TO SEE WHETHER ALL SELECTIONS ARE COMPLETED
  13204. cC
  13205. c185    IF(NSEL-NS) 190, 100, 100
  13206. c190    NSEL=NSEL+1
  13207. c    WRITE (6,17)
  13208. c    GO TO 145
  13209. cC
  13210. c200    CONTINUE
  13211. c999    STOP
  13212. c    END
  13213. C
  13214. C    ..................................................................
  13215. C
  13216. C       SAMPLE OUTPUT SUBROUTINE STOUT
  13217. C
  13218. C       PURPOSE
  13219. C          PRINT THE RESULT OF A STEP-WISE MULTIPLE REGRESSION.  THIS
  13220. C          SUBROUTINE IS CALLED BY THE SUBROUTINE STPRG.
  13221. C
  13222. C       USAGE
  13223. C          CALL STOUT (NSTEP,ANS,L,B,S,T,NSTOP)
  13224. C
  13225. C       DESCRIPTION OF PARAMETERS
  13226. C          NSTEP - INPUT VECTOR OF LENGTH 5 CONTAINING THE FOLLOWING
  13227. C                  INFORMATION..
  13228. C                    NSTEP(1)  DEPENDENT VARIABLE
  13229. C                    NSTEP(2)  NUMBER OF VARIABLES FORCED TO ENTER
  13230. C                              IN THE REGRESSION
  13231. C                    NSTEP(3)  NUMBER OF VARIABLES DELETED
  13232. C                    NSTEP(4)  THE LAST STEP NUMBER
  13233. C                    NSTEP(5)  THE LAST VARIABLE ENTERED
  13234. C          ANS   - INPUT VECTOR OF LENGTH 11 CONTAINING THE FOLLOWING
  13235. C                  INFORMATION FOR THE LAST STEP..
  13236. C                    ANS(1)  SUM OF SQUARES REDUCED
  13237. C                    ANS(2)  PROPORTION REDUCED
  13238. C                    ANS(3)  CUMULATIVE SUM OF SQUARES REDUCED
  13239. C                    ANS(4)  CUMULATIVE PROPORTION REDUCED
  13240. C                    ANS(5)  SUM OF SQUARES OF THE DEPENDENT VARIABLE
  13241. C                    ANS(6)  MULTIPLE CORRELATION COEFFICIENT
  13242. C                    ANS(7)  F-VALUE FOR ANALYSIS VARIANCE (FOR THE
  13243. C                            REGRESSION)
  13244. C                    ANS(8)  STANDARD ERROR OF ESTIMATE
  13245. C                    ANS(9)  INTERCEPT
  13246. C                    ANS(10) ADJUSTED MULTIPLE R
  13247. C                    ANS(11) ADJUSTED STANDARD ERROR OF ESTIMATE
  13248. C          L     - INPUT VECTOR OF LENGTH K (K=M-NSTEP(3)-1) CONTAIN-
  13249. C                  ING VARIABLES ENTERED IN THE REGRESSION.  L(1)=FIRST
  13250. C                  VARIABLE ENTERED, L(2)=SECOND VARIABLE ENTERED, ETC.
  13251. C          B     - INPUT VECTOR OF LENGTH K (K=M-NSTEP(3)-1) CONTAIN-
  13252. C                  ING REGRESSION COEFFICIENTS CORRESPONDING TO THE
  13253. C                  VARIABLES IN VECTOR L
  13254. C          S     - INPUT VECTOR OF LENGTH K (K=M-NSTEP(3)-1) CONTAIN-
  13255. C                  ING STANDARD ERRORS OF REGRESSION COEFFICIENTS
  13256. C                  CORRESPONDING TO THE VARIABLES IN VECTOR L
  13257. C          T     - INPUT VECTOR OF LENGTH K (K=M-NSTEP(3)-1) CONTAIN-
  13258. C                  ING COMPUTED T-VALUES CORRESPONDING TO THE VARIABLES
  13259. C                  IN VECTOR L
  13260. C          NSTOP - OUTPUT OPTION CODE TO STOP THE STEP-WISE REGRESSION
  13261. C                    1 - IF THE STEP-WISE REGRESSION IS TO BE TERMI-
  13262. C                        NATED BY SOME CRITERIA OTHER THAN PROPORTION
  13263. C                        OF SUM OF SQUARES, SUCH AS F-TEST AND SO ON,
  13264. C                        THIS SUBROUTINE MAY BE MODIFIED TO PERFORM
  13265. C                        DESIRED TESTS.  WHEN IT BECOMES NO LONGER
  13266. C                        NECESSARY TO CONTINUE THE STEP-WISE REGRES-
  13267. C                        SION, SET NSTOP EQUAL TO 1.
  13268. C                    0 - IF THE STEP-WISE REGRESSION IS TO BE CONTINUED
  13269. C
  13270. C       REMARKS
  13271. C          THE CONTENTS OF THE VECTORS NSTEP, ANS, L ARE REQUIRED IN
  13272. C          SUBSEQUENT STEPS AND MUST NOT BE DESTROYED.
  13273. C
  13274. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  13275. C          NONE
  13276. C
  13277. C
  13278. C    ..................................................................
  13279. C
  13280.     SUBROUTINE STOUT (NSTEP,ANS,L,B,S,T,NSTOP)
  13281. C
  13282.     DIMENSION NSTEP(1),ANS(1),L(1),B(1),S(1),T(1)
  13283. C
  13284. C    ..................................................................
  13285. C
  13286. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  13287. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  13288. C       STATEMENT WHICH FOLLOWS.
  13289. C
  13290. C    DOUBLE PRECISION ANS,B,S,T
  13291. C
  13292. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  13293. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  13294. C       ROUTINE.
  13295. C
  13296. C    ..................................................................
  13297. C
  13298. 1    FORMAT(/5H1STEPI3)
  13299. 2    FORMAT(22H0VARIABLE ENTERED.....I2)
  13300. 3    FORMAT(40H0SUM OF SQUARES REDUCED IN THIS STEP....F13.3)
  13301. 4    FORMAT(40H PROPORTION REDUCED IN THIS STEP........F13.3)
  13302. 5    FORMAT(40H0CUMULATIVE SUM OF SQUARES REDUCED......F13.3)
  13303. 6     FORMAT(40H CUMULATIVE PROPORTION REDUCED..........F13.3,4H  OFF13.
  13304.      13)
  13305. 7    FORMAT(4H0FORI3,18H VARIABLES ENTERED)
  13306. 8    FORMAT(38H   MULTIPLE CORRELATION COEFFICIENT...F9.3)
  13307. 9    FORMAT(38H   F-VALUE FOR ANALYSIS OF VARIANCE...F9.3)
  13308. 10    FORMAT(38H   STANDARD ERROR OF ESTIMATE.........F9.3)
  13309. 11    FORMAT(/57H   VARIABLE     REGRESSION     STD. ERROR OF     COMPUT
  13310.      1ED/56H    NUMBER      COEFFICIENT     REG. COEFF.      T-VALUE)
  13311. 12    FORMAT(5X,I3,F18.5,F16.5,F14.3)
  13312. 13    FORMAT(12H   INTERCEPTF14.5)
  13313. 14    FORMAT(31H0DEPENDENT VARIABLE............I2)
  13314. 15    FORMAT(31H NUMBER OF VARIABLES FORCED....I2)
  13315. 16    FORMAT(31H NUMBER OF VARIABLES DELETED...I2)
  13316. 17    FORMAT(20H   (FORCED VARIABLE))
  13317. 18    FORMAT(38H        (ADJUSTED FOR D.F.)...........F9.3)
  13318. C
  13319. C       TEST WHETHER THIS IS THE FIRST STEP
  13320. C
  13321.     IF(NSTEP(4)-1) 30, 30, 35
  13322. 30    WRITE (6,14) NSTEP(1)
  13323.     WRITE (6,15) NSTEP(2)
  13324.     WRITE (6,16) NSTEP(3)
  13325. C
  13326. C       PRINT THE RESULT OF A STEP
  13327. C
  13328. 35    WRITE (6,1) NSTEP(4)
  13329.     WRITE (6,2) NSTEP(5)
  13330.     IF(NSTEP(4)-NSTEP(2)) 37, 37, 38
  13331. 37    WRITE (6,17)
  13332. 38    WRITE (6,3) ANS(1)
  13333.     WRITE (6,4) ANS(2)
  13334.     WRITE (6,5) ANS(3)
  13335.     WRITE (6,6) ANS(4), ANS(5)
  13336.     WRITE (6,7) NSTEP(4)
  13337.     WRITE (6,8) ANS(6)
  13338.     WRITE(6,18)ANS(10)
  13339.     WRITE (6,9) ANS(7)
  13340.     WRITE (6,10) ANS(8)
  13341.     WRITE(6,18)ANS(11)
  13342.     WRITE (6,11)
  13343.     N=NSTEP(4)
  13344.     DO 40 I=1,N
  13345. 40    WRITE (6,12) L(I),B(I),S(I),T(I)
  13346.     WRITE (6,13) ANS(9)
  13347. C
  13348.     NSTOP=0
  13349.     RETURN
  13350.     END
  13351. C
  13352. C    ..................................................................
  13353. C
  13354. C       SUBROUTINE STPRG
  13355. C
  13356. C       PURPOSE
  13357. C          TO PERFORM A STEPWISE MULTIPLE REGRESSION ANALYSIS FOR A
  13358. C          DEPENDENT VARIABLE AND A SET OF INDEPENDENT VARIABLES.  AT
  13359. C          EACH STEP, THE VARIABLE ENTERED INTO THE REGRESSION EQUATION
  13360. C          IS THAT WHICH EXPLAINS THE GREATEST AMOUNT OF VARIANCE
  13361. C          BETWEEN IT AND THE DEPENDENT VARIABLE (I.E. THE VARIABLE
  13362. C          WITH THE HIGHEST PARTIAL CORRELATION WITH THE DEPENDENT
  13363. C          VARIABLE).  ANY VARIABLE CAN BE DESIGNATED AS THE DEPENDENT
  13364. C          VARIABLE.  ANY INDEPENDENT VARIABLE CAN BE FORCED INTO OR
  13365. C          DELETED FROM THE REGRESSION EQUATION, IRRESPECTIVE OF ITS
  13366. C          CONTRIBUTION TO THE EQUATION.
  13367. C
  13368. C       USAGE
  13369. C          CALL STPRG (M,N,D,XBAR,IDX,PCT,NSTEP,ANS,L,B,S,T,LL,IER)
  13370. C
  13371. C       DESCRIPTION OF PARAMETERS
  13372. C          M    - TOTAL NUMBER OF VARIABLES IN DATA MATRIX
  13373. C          N    - NUMBER OF OBSERVATIONS
  13374. C          D    - INPUT MATRIX (M X M) OF SUMS OF CROSS-PRODUCTS OF
  13375. C                 DEVIATIONS FROM MEAN.  THIS MATRIX WILL BE DESTROYED.
  13376. C          XBAR - INPUT VECTOR OF LENGTH M OF MEANS
  13377. C          IDX  - INPUT VECTOR OF LENGTH M HAVING ONE OF THE FOLLOWING
  13378. C                 CODES FOR EACH VARIABLE.
  13379. C                   0 - INDEPENDENT VARIABLE AVAILABLE FOR SELECTION
  13380. C                   1 - INDEPENDENT VARIABLE TO BE FORCED INTO THE
  13381. C                       REGRESSION EQUATION
  13382. C                   2 - VARIABLE NOT TO BE CONSIDERED IN THE EQUATION
  13383. C                   3 - DEPENDENT VARIABLE
  13384. C                 THIS VECTOR WILL BE DESTROYED
  13385. C          PCT  - A CONSTANT VALUE INDICATING THE PROPORTION OF THE
  13386. C                 TOTAL VARIANCE TO BE EXPLAINED BY ANY INDEPENDENT
  13387. C                 VARIABLE.  THOSE INDEPENDENT VARIABLES WHICH FALL
  13388. C                 BELOW THIS PROPORTION WILL NOT ENTER THE REGRESSION
  13389. C                 EQUATION.  TO ENSURE THAT ALL VARIABLES ENTER THE
  13390. C                 EQUATION, SET PCT = 0.0.
  13391. C          NSTEP- OUTPUT VECTOR OF LENGTH 5 CONTAINING THE FOLLOWING
  13392. C                 INFORMATION
  13393. C                    NSTEP(1)- THE NUMBER OF THE DEPENDENT VARIABLE
  13394. C                    NSTEP(2)- NUMBER OF VARIABLES FORCED INTO THE
  13395. C                              REGRESSION EQUATION
  13396. C                    NSTEP(3)- NUMBER OF VARIABLE DELETED FROM THE
  13397. C                              EQUATION
  13398. C                    NSTEP(4)- THE NUMBER OF THE LAST STEP
  13399. C                    NSTEP(5)- THE NUMBER OF THE LAST VARIABLE ENTERED
  13400. C          ANS  - OUTPUT VECTOR OF LENGTH 11 CONTAINING THE FOLLOWING
  13401. C                 INFORMATION FOR THE LAST STEP
  13402. C                    ANS(1)- SUM OF SQUARES REDUCED BY THIS STEP
  13403. C                    ANS(2)- PROPORTION OF TOTAL SUM OF SQUARES REDUCED
  13404. C                    ANS(3)- CUMULATIVE SUM OF SQUARES REDUCED UP TO
  13405. C                            THIS STEP
  13406. C                    ANS(4)- CUMULATIVE PROPORTION OF TOTAL SUM OF
  13407. C                            SQUARES REDUCED
  13408. C                    ANS(5)- SUM OF SQUARES OF THE DEPENDENT VARIABLE
  13409. C                    ANS(6)- MULTIPLE CORRELATION COEFFICIENT
  13410. C                    ANS(7)- F RATIO FOR SUM OF SQUARES DUE TO
  13411. C                            REGRESSION
  13412. C                    ANS(8)- STANDARD ERROR OF THE ESTIMATE (RESIDUAL
  13413. C                            MEAN SQUARE)
  13414. C                    ANS(9)- INTERCEPT CONSTANT
  13415. C                    ANS(10)-MULTIPLE CORRELATION COEFFICIENT ADJUSTED
  13416. C                            FOR DEGREES OF FREEDOM.
  13417. C                    ANS(11)-STANDARD ERROR OF THE ESTIMATE ADJUSTED
  13418. C                            FOR DEGREES OF FREEDOM.
  13419. C          L    - OUTPUT VECTOR OF LENGTH K, WHERE K IS THE NUMBER OF
  13420. C                 INDEPENDENT VARIABLES IN THE REGRESSION EQUATION.
  13421. C                 THIS VECTOR CONTAINS THE NUMBERS OF THE INDEPENDENT
  13422. C                 VARIABLES IN THE EQUATION.
  13423. C          B    - OUTPUT VECTOR OF LENGTH K, CONTAINING THE PARTIAL
  13424. C                 REGRESSION COEFFICIENTS CORRESPONDING TO THE
  13425. C                 VARIABLES IN VECTOR L.
  13426. C          S    - OUTPUT VECTOR OF LENGTH K, CONTAINING THE STANDARD
  13427. C                 ERRORS OF THE PARTIAL REGRESSION COEFFICIENTS,
  13428. C                 CORRESPONDING TO THE VARIABLES IN VECTOR L.
  13429. C          T    - OUTPUT VECTOR OF LENGTH K, CONTAINING THE COMPUTED
  13430. C                 T-VALUES CORRESPONDING TO THE VARIABLES IN VECTOR L.
  13431. C          LL   - WORKING VECTOR OF LENGTH M
  13432. C          IER  - 0, IF THERE IS NO ERROR.
  13433. C                 1, IF RESIDUAL SUM OF SQUARES IS NEGATIVE OR IF THE
  13434. C                 PIVOTAL ELEMENT IN THE STEPWISE INVERSION PROCESS IS
  13435. C                 ZERO.  IN THIS CASE, THE VARIABLE WHICH CAUSES THIS
  13436. C                 ERROR IS NOT ENTERED IN THE REGRESSION, THE RESULT
  13437. C                 PRIOR TO THIS STEP IS RETAINED, AND THE CURRENT
  13438. C                 SELECTION IS TERMINATED.
  13439. C
  13440. C       REMARKS
  13441. C          THE NUMBER OF DATA POINTS MUST BE AT LEAST GREATER THAN THE
  13442. C          NUMBER OF INDEPENDENT VARIABLES PLUS ONE.  FORCED VARIABLES
  13443. C          ARE ENTERED INTO THE REGRESSION EQUATION BEFORE ALL OTHER
  13444. C          INDEPENDENT VARIABLES.  WITHIN THE SET OF FORCED VARIABLES,
  13445. C          THE ONE TO BE CHOSEN FIRST WILL BE THAT ONE WHICH EXPLAINS
  13446. C          THE GREATEST AMOUNT OF VARIANCE.
  13447. C          INSTEAD OF USING, AS A STOPPING CRITERION, A PROPORTION OF
  13448. C          THE TOTAL VARIANCE, SOME OTHER CRITERION MAY BE ADDED TO
  13449. C          SUBROUTINE STOUT.
  13450. C
  13451. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  13452. C          STOUT(NSTEP,ANS,L,B,S,T,NSTOP)
  13453. C          THIS SUBROUTINE MUST BE PROVIDED BY THE USER.  IT IS AN
  13454. C          OUTPUT ROUTINE WHICH WILL PRINT THE RESULTS OF EACH STEP OF
  13455. C          THE REGRESSION ANALYSIS.  NSTOP IS AN OPTION CODE WHICH IS
  13456. C          ONE IF THE STEPWISE REGRESSION IS TO BE TERMINATED, AND IS
  13457. C          ZERO IF IT IS TO CONTINUE.  THE USER MUST CONSIDER THIS IF
  13458. C          SOME OTHER STOPPING CRITERION THAN VARIANCE PROPORTION IS TO
  13459. C          BE USED.
  13460. C
  13461. C       METHOD
  13462. C          THE ABBREVIATED DOOLITTLE METHOD IS USED TO (1) DECIDE VARI-
  13463. C          ABLES ENTERING IN THE REGRESSION AND (2) COMPUTE REGRESSION
  13464. C          COEFFICIENTS.  REFER TO C. A. BENNETT AND N. L. FRANKLIN,
  13465. C          'STATISTICAL ANALYSIS IN CHEMISTRY AND THE CHEMICAL INDUS-
  13466. C          TRY', JOHN WILEY AND SONS, 1954, APPENDIX 6A.
  13467. C
  13468. C    ..................................................................
  13469. C
  13470.     SUBROUTINE STPRG (M,N,D,XBAR,IDX,PCT,NSTEP,ANS,L,B,S,T,LL,IER)
  13471. C
  13472.       DIMENSION D(1),XBAR(1),IDX(1),NSTEP(1),ANS(1),L(1),B(1),S(1),T(1),
  13473.      1LL(1)
  13474. C
  13475. C    ..................................................................
  13476. C
  13477. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  13478. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  13479. C       STATEMENT WHICH FOLLOWS.
  13480. C
  13481. C    DOUBLE PRECISION D,XBAR,ANS,B,S,T,RD,RE
  13482. C
  13483. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  13484. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  13485. C       ROUTINE.
  13486. C
  13487. C       THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO
  13488. C       CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS.  SQRT IN STATEMENTS
  13489. C       85,90,114,132,AND 134, MUST BE CHANGED TO DSQRT.
  13490. C
  13491. C    ..................................................................
  13492. C
  13493. C       INITIALIZATION
  13494. C
  13495.     IER=0
  13496.     ONM=N-1
  13497.     NFO=0
  13498.     NSTEP(3)=0
  13499.     ANS(3)=0.0
  13500.     ANS(4)=0.0
  13501.     NSTOP=0
  13502. C
  13503. C       FIND DEPENDENT VARIABLE, NUMBER OF VARIABLES TO BE FORCED TO
  13504. C       ENTER IN THE REGRESSION, AND NUMBER OF VARIABLES TO BE DELETED
  13505. C
  13506.     DO 30 I=1,M
  13507.     LL(I)=1
  13508.     IF(IDX(I)) 30, 30, 10
  13509. 10    IF(IDX(I)-2) 15, 20, 25
  13510. 15    NFO=NFO+1
  13511.     IDX(NFO)=I
  13512.     GO TO 30
  13513. 20    NSTEP(3)=NSTEP(3)+1
  13514.     LL(I)=-1
  13515.     GO TO 30
  13516. 25    MY=I
  13517.     NSTEP(1)=MY
  13518.     LY=M*(MY-1)
  13519.     LYP=LY+MY
  13520.     ANS(5)=D(LYP)
  13521. 30    CONTINUE
  13522.     NSTEP(2)=NFO
  13523. C
  13524. C       FIND THE MAXIMUM NUMBER OF STEPS
  13525. C
  13526.     MX=M-NSTEP(3)-1
  13527. C
  13528. C       START SELECTION OF VARIABLES
  13529. C
  13530.     DO 140 NL=1,MX
  13531.     RD=0
  13532.     IF(NL-NFO) 35, 35, 55
  13533. C
  13534. C       SELECT NEXT VARIABLE TO ENTER AMONG FORCED VARIABLES
  13535. C
  13536. 35    DO 50 I=1,NFO
  13537.     K=IDX(I)
  13538.     IF(LL(K)) 50, 50, 40
  13539. 40    LYP=LY+K
  13540.     IP=M*(K-1)+K
  13541.     RE=D(LYP)*D(LYP)/D(IP)
  13542.     IF(RD-RE) 45, 50, 50
  13543. 45    RD=RE
  13544.     NEW=K
  13545. 50    CONTINUE
  13546.     GO TO 75
  13547. C
  13548. C       SELECT NEXT VARIABLE TO ENTER AMONG NON-FORCED VARIABLES
  13549. C
  13550. 55    DO 70 I=1,M
  13551.     IF(I-MY) 60, 70, 60
  13552. 60    IF(LL(I)) 70, 70, 62
  13553. 62    LYP=LY+I
  13554.     IP=M*(I-1)+I
  13555.     RE=D(LYP)*D(LYP)/D(IP)
  13556.     IF(RD-RE) 64, 70, 70
  13557. 64    RD=RE
  13558.     NEW=I
  13559. 70    CONTINUE
  13560. C
  13561. C       TEST WHETHER THE PROPORTION OF THE SUM OF SQUARES REDUCED BY
  13562. C       THE LAST VARIABLE ENTERED IS GREATER THAN OR EQUAL TO THE
  13563. C       SPECIFIED PROPORTION
  13564. C
  13565. 75    IF(RD) 77,77,76
  13566. 76    IF(ANS(5)-(ANS(3)+RD))77,77,78
  13567. 77    IER=1
  13568.     GO TO 150
  13569. 78    RE=RD/ANS(5)
  13570.     IF(RE-PCT) 150, 80, 80
  13571. C
  13572. C       IT IS GREATER THAN OR EQUAL
  13573. C
  13574. 80    LL(NEW)=0
  13575.     L(NL)=NEW
  13576.     ANS(1)=RD
  13577.     ANS(2)=RE
  13578.     ANS(3)=ANS(3)+RD
  13579.     ANS(4)=ANS(4)+RE
  13580.     NSTEP(4)=NL
  13581.     NSTEP(5)=NEW
  13582. C
  13583. C       COMPUTE MULTIPLE CORRELATION, F-VALUE FOR ANALYSIS OF
  13584. C       VARIANCE, AND STANDARD ERROR OF ESTIMATE
  13585. C
  13586. 85    ANS(6)= SQRT(ANS(4))
  13587.     RD=NL
  13588.     RE=ONM-RD
  13589.     RE=(ANS(5)-ANS(3))/RE
  13590.     ANS(7)=(ANS(3)/RD)/RE
  13591. 90    ANS(8)= SQRT(RE)
  13592. C
  13593. C       DIVIDE BY THE PIVOTAL ELEMENT
  13594. C
  13595.     IP=M*(NEW-1)+NEW
  13596.     RD=D(IP)
  13597.     LYP=NEW-M
  13598.     DO 100 J=1,M
  13599.     LYP=LYP+M
  13600.     IF(LL(J)) 100, 94, 97
  13601. 94    IF(J-NEW) 96, 98, 96
  13602. 96    IJ=M*(J-1)+J
  13603.     D(IJ)=D(IJ)+D(LYP)*D(LYP)/RD
  13604. 97    D(LYP)=D(LYP)/RD
  13605.     GO TO 100
  13606. 98    D(IP)=1.0/RD
  13607. 100    CONTINUE
  13608. C
  13609. C       COMPUTE REGRESSION COEFFICIENTS
  13610. C
  13611.     LYP=LY+NEW
  13612.     B(NL)=D(LYP)
  13613.     IF(NL-1) 112, 112, 105
  13614. 105    ID=NL-1
  13615.     DO 110 J=1,ID
  13616.     IJ=NL-J
  13617.     KK=L(IJ)
  13618.     LYP=LY+KK
  13619.     B(IJ)=D(LYP)
  13620.     DO 110 K=1,J
  13621.     IK=NL-K+1
  13622.     MK=L(IK)
  13623.     LYP=M*(MK-1)+KK
  13624. 110    B(IJ)=B(IJ)-D(LYP)*B(IK)
  13625. C
  13626. C       COMPUTE INTERCEPT
  13627. C
  13628. 112    ANS(9)=XBAR(MY)
  13629.     DO 115 I=1,NL
  13630.     KK=L(I)
  13631.     ANS(9)=ANS(9)-B(I)*XBAR(KK)
  13632.     IJ=M*(KK-1)+KK
  13633. 114    S(I)=ANS(8)* SQRT(D(IJ))
  13634. 115    T(I)=B(I)/S(I)
  13635. C
  13636. C       PERFORM A REDUCTION TO ELIMINATE THE LAST VARIABLE ENTERED
  13637. C
  13638.     IP=M*(NEW-1)
  13639.     DO 130 I=1,M
  13640.     IJ=I-M
  13641.     IK=NEW-M
  13642.     IP=IP+1
  13643.     IF(LL(I)) 130, 130, 120
  13644. 120    DO 126 J=1,M
  13645.     IJ=IJ+M
  13646.     IK=IK+M
  13647.     IF(LL(J)) 126, 122, 122
  13648. 122    IF(J-NEW) 124, 126, 124
  13649. 124    D(IJ)=D(IJ)-D(IP)*D(IK)
  13650. 126    CONTINUE
  13651.     D(IP)=D(IP)/(-RD)
  13652. 130    CONTINUE
  13653. C
  13654. C       ADJUST STANDARD ERROR OF THE ESTIMATE AND MULTIPLE CORRELATION
  13655. C       COEFFICIENT
  13656. C
  13657.     RD=N-NSTEP(4)
  13658.     RD=ONM/RD
  13659. 132    ANS(10)=SQRT(1.0-(1.0-ANS(6)*ANS(6))*RD)
  13660. 134    ANS(11)=ANS(8)*SQRT(RD)
  13661. C
  13662. C       CALL THE OUTPUT SUBROUTINE
  13663.     CALL STOUT (NSTEP,ANS,L,B,S,T,NSTOP)
  13664. C
  13665. C       TEST WHETHER THE STEP-WISE REGRESSION WAS TERMINATED IN
  13666. C       SUBROUTINE STOUT
  13667. C
  13668.     IF(NSTOP) 140, 140, 150
  13669. C
  13670. 140    CONTINUE
  13671. C
  13672. 150    RETURN
  13673.     END
  13674. C
  13675. C    ..................................................................
  13676. C
  13677. C       SUBROUTINE SUBMX
  13678. C
  13679. C       PURPOSE
  13680. C          BASED ON VECTOR S DERIVED FROM SUBROUTINE SUBST OR ABSNT,
  13681. C          THIS SUBROUTINE COPIES FROM A LARGER MATRIX OF OBSERVATION
  13682. C          DATA A SUBSET MATRIX OF THOSE OBSERVATIONS WHICH HAVE
  13683. C          SATISFIED CERTAIN CONDITION.  THIS SUBROUTINE IS NORMALLY
  13684. C          USED PRIOR TO STATISTICAL ANALYSES (E.G., MULTIPLE REGRES-
  13685. C          SION, FACTOR ANALYSIS).
  13686. C
  13687. C       USAGE
  13688. C          CALL SUBMX (A,D,S,NO,NV,N)
  13689. C
  13690. C       DESCRIPTION OF PARAMETERS
  13691. C          A  - INPUT MATRIX OF OBSERVATIONS, NO BY NV.
  13692. C          D  - OUTPUT MATRIX OF OBSERVATIONS, N BY NV.
  13693. C          S -  INPUT VECTOR OF LENGTH NO CONTAINING THE CODES DERIVED
  13694. C               FROM SUBROUTINE SUBST OR ABSNT.
  13695. C          NO - NUMBER OF OBSERVATIONS. NO MUST BE > OR = TO 1.
  13696. C          NV - NUMBER OF VARIABLES. NV MUST BE > OR = TO 1.
  13697. C          N  - OUTPUT VARIABLE CONTAINING THE NUMBER OF NON-ZERO CODES
  13698. C               IN VECTOR S.
  13699. C
  13700. C       REMARKS
  13701. C          MATRIX D CAN BE IN THE SAME LOCATION AS MATRIX A.
  13702. C
  13703. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  13704. C          NONE
  13705. C
  13706. C       METHOD
  13707. C          IF S(I) CONTAINS A NON-ZERO CODE, I-TH OBSERVATION IS
  13708. C          COPIED FROM THE INPUT MATRIX TO THE OUTPUT MATRIX.
  13709. C
  13710. C    ..................................................................
  13711. C
  13712.     SUBROUTINE SUBMX (A,D,S,NO,NV,N)
  13713.     DIMENSION A(1),D(1),S(1)
  13714. C
  13715.     L=0
  13716.     LL=0
  13717.     DO 20 J=1,NV
  13718.     DO 15 I=1,NO
  13719.     L=L+1
  13720.     IF(S(I)) 15, 15, 10
  13721. 10    LL=LL+1
  13722.     D(LL)=A(L)
  13723. 15    CONTINUE
  13724. 20    CONTINUE
  13725. C
  13726. C       COUNT NON-ZERO CODES IN VECTOR S
  13727. C
  13728.     N=0
  13729.     DO 30 I=1,NO
  13730.     IF(S(I)) 30, 30, 25
  13731. 25    N=N+1
  13732. 30    CONTINUE
  13733. C
  13734.     RETURN
  13735.     END
  13736. C
  13737. C    ..................................................................
  13738. C
  13739. C       SUBROUTINE SUBST
  13740. C
  13741. C       PURPOSE
  13742. C          DERIVE A SUBSET VECTOR INDICATING WHICH OBSERVATIONS IN A
  13743. C          SET HAVE SATISFIED CERTAIN CONDITIONS ON THE VARIABLES.
  13744. C
  13745. C       USAGE
  13746. C          CALL SUBST (A,C,R,B,S,NO,NV,NC)
  13747. C          PARAMETER B MUST BE DEFINED BY AN EXTERNAL STATEMENT IN THE
  13748. C          CALLING PROGRAM
  13749. C
  13750. C       DESCRIPTION OF PARAMETERS
  13751. C          A  - OBSERVATION MATRIX, NO BY NV
  13752. C          C  - INPUT MATRIX, 3 BY NC, OF CONDITIONS TO BE CONSIDERED.
  13753. C               THE FIRST ELEMENT OF EACH COLUMN OF C REPRESENTS THE
  13754. C               NUMBER OF THE VARIABLE (COLUMN OF THE MATRIX A) TO BE
  13755. C               TESTED, THE SECOND ELEMENT OF EACH COLUMN IS A
  13756. C               RELATIONAL CODE AS FOLLOWS
  13757. C                    1. FOR LT (LESS THAN)
  13758. C                    2. FOR LE (LESS THAN OR EQUAL TO)
  13759. C                    3. FOR EQ (EQUAL TO)
  13760. C                    4. FOR NE (NOT EQUAL TO)
  13761. C                    5. FOR GE (GREATER THAN OR EQUAL TO)
  13762. C                    6. FOR GT (GREATER THAN)
  13763. C               THE THIRD ELEMENT OF EACH COLUMN IS A QUANTITY TO BE
  13764. C               USED FOR COMPARISON WITH THE OBSERVATION VALUES. FOR
  13765. C               EXAMPLE, THE FOLLOWING COLUMN IN C
  13766. C                         2.
  13767. C                         5.
  13768. C                        92.5
  13769. C               CAUSES THE SECOND VARIABLE TO BE TESTED FOR GREATER
  13770. C               THAN OR EQUAL TO 92.5
  13771. C          R  - WORKING VECTOR USED TO STORE INTERMEDIATE RESULTS OF
  13772. C               ABOVE TESTS ON A SINGLE OBSERVATION. IF CONDITION IS
  13773. C               SATISFIED, R(I) IS SET TO 1. IF IT IS NOT, R(I) IS SET
  13774. C               TO 0. VECTOR LENGTH IS NC.
  13775. C          B  - NAME OF SUBROUTINE TO BE SUPPLIED BY THE USER. IT
  13776. C               CONSISTS OF A BOOLEAN EXPRESSION LINKING THE
  13777. C               INTERMEDIATE VALUES STORED IN VECTOR R. THE BOOLEAN
  13778. C               OPERATORS ARE '*' FOR'AND', '+' FOR 'OR'. EXAMPLE
  13779. C                    SUBROUTINE BOOL(R,T)
  13780. C                    DIMENSION R(3)
  13781. C                    T=R(1)*(R(2)+R(3))
  13782. C                    RETURN
  13783. C                    END
  13784. C               THE ABOVE EXPRESSION IS TESTED FOR
  13785. C                    R(1).AND.(R(2).OR.R(3))
  13786. C          S  - OUTPUT VECTOR INDICATING, FOR EACH OBSERVATION,
  13787. C               WHETHER OR NOT PROPOSITION B IS SATISFIED. IF IT IS,
  13788. C               S(I) IS NON-ZERO. IF IT IS NOT, S(I) IS ZERO. VECTOR
  13789. C               LENGTH IS NO.
  13790. C          NO - NUMBER OF OBSERVATIONS. NO MUST BE > OR = TO 1.
  13791. C          NV - NUMBER OF VARIABLES. NV MUST BE > OR = TO 1.
  13792. C          NC - NUMBER OF BASIC CONDITIONS TO BE SATISFIED. NC MUST BE
  13793. C               GREATER THAN OR EQUAL TO 1.
  13794. C
  13795. C       REMARKS
  13796. C          NONE
  13797. C
  13798. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  13799. C          B  THE NAME OF ACTUAL SUBROUTINE SUPPLIED BY THE USER MAY
  13800. C             BE DIFFERENT (E.G., BOOL), BUT SUBROUTINE SUBST ALWAYS
  13801. C             CALLS IT AS B.  IN ORDER FOR SUBROUTINE SUBST TO DO THIS,
  13802. C             THE NAME OF THE USER-SUPPLIED SUBROUTINE MUST BE
  13803. C             DEFINED BY AN EXTERNAL STATEMENT IN THE CALLING PROGRAM.
  13804. C             THE NAME MUST ALSO BE LISTED IN THE ''CALL SUBST''
  13805. C             STATEMENT.  (SEE USAGE ABOVE)
  13806. C
  13807. C       METHOD
  13808. C          THE FOLLOWING IS DONE FOR EACH OBSERVATION.
  13809. C          CONDITION MATRIX IS ANALYZED TO DETERMINE WHICH VARIABLES
  13810. C          ARE TO BE EXAMINED. INTERMEDIATE VECTOR R IS FORMED. THE
  13811. C          BOOLEAN EXPRESSION (IN SUBROUTINE B) IS THEN EVALUATED TO
  13812. C          DERIVE THE ELEMENT IN SUBSET VECTOR S CORRESPONDING TO THE
  13813. C          OBSERVATION.
  13814. C
  13815. C    ..................................................................
  13816. C
  13817.     SUBROUTINE SUBST(A,C,R,B,S,NO,NV,NC)
  13818.     DIMENSION A(1),C(1),R(1),S(1)
  13819. C
  13820.     DO 9 I=1,NO
  13821.     IQ=I-NO
  13822.     K=-2
  13823.     DO 8 J=1,NC
  13824. C
  13825. C       CLEAR R VECTOR
  13826. C
  13827.     R(J)=0.0
  13828. C
  13829. C        LOCATE ELEMENT IN OBSERVATION MATRIX AND RELATIONAL CODE
  13830. C
  13831.     K=K+3
  13832.     IZ=C(K)
  13833.     IA=IQ+IZ*NO
  13834.     IGO=C(K+1)
  13835. C
  13836. C        FORM R VECTOR
  13837. C
  13838.     Q=A(IA)-C(K+2)
  13839.     GO TO(1,2,3,4,5,6),IGO
  13840. 1    IF(Q) 7,8,8
  13841. 2    IF(Q) 7,7,8
  13842. 3    IF(Q) 8,7,8
  13843. 4    IF(Q) 7,8,7
  13844. 5    IF(Q) 8,7,7
  13845. 6    IF(Q) 8,8,7
  13846. 7    R(J)=1.0
  13847. 8    CONTINUE
  13848. C
  13849. C       CALCULATE S VECTOR
  13850. C
  13851. 9    CALL B(R,S(I))
  13852.     RETURN
  13853.     END
  13854. C
  13855. C    ..................................................................
  13856. C
  13857. C       SUBROUTINE TAB1
  13858. C
  13859. C       PURPOSE
  13860. C          TABULATE FOR ONE VARIABLE IN AN OBSERVATION MATRIX (OR A
  13861. C          MATRIX SUBSET), THE FREQUENCY AND PERCENT FREQUENCY OVER
  13862. C          GIVEN CLASS INTERVALS. IN ADDITION, CALCULATE FOR THE SAME
  13863. C          VARIABLE THE TOTAL, AVERAGE, STANDARD DEVIATION, MINIMUM,
  13864. C          AND MAXIMUM.
  13865. C
  13866. C       USAGE
  13867. C          CALL TAB1(A,S,NOVAR,UBO,FREQ,PCT,STATS,NO,NV)
  13868. C
  13869. C       DESCRIPTION OF PARAMETERS
  13870. C          A     - OBSERVATION MATRIX, NO BY NV
  13871. C          S     - INPUT VECTOR GIVING SUBSET OF A. ONLY THOSE
  13872. C                  OBSERVATIONS WITH A CORRESPONDING NON-ZERO S(J) ARE
  13873. C                  CONSIDERED. VECTOR LENGTH IS NO.
  13874. C          NOVAR - THE VARIABLE TO BE TABULATED. NOVAR MUST BE GREATER
  13875. C                  THAN OR EQUAL TO 1 AND LESS THAN OR EQUAL TO NV.
  13876. C                  AND UPPER LIMIT OF VARIABLE TO BE TABULATED
  13877. C                  IN UBO(1), UBO(2) AND UBO(3) RESPECTIVELY. IF
  13878. C                  LOWER LIMIT IS EQUAL TO UPPER LIMIT, THE PROGRAM
  13879. C                  USES THE MINIMUM AND MAXIMUM VALUES OF THE VARIABLE.
  13880. C                  NUMBER OF INTERVALS, UBO(2), MUST INCLUDE TWO CELLS
  13881. C                  FOR VALUES UNDER AND ABOVE LIMITS. VECTOR LENGTH
  13882. C                  IS 3.
  13883. C          FREQ  - OUTPUT VECTOR OF FREQUENCIES. VECTOR LENGTH IS
  13884. C                  UBO(2).
  13885. C          PCT   - OUTPUT VECTOR OF RELATIVE FREQUENCIES. VECTOR
  13886. C                  LENGTH IS UBO(2).
  13887. C          STATS - OUTPUT VECTOR OF SUMMARY STATISTICS, I.E., TOTAL,
  13888. C                  AVERAGE, STANDARD DEVIATION, MINIMUM AND MAXIMUM.
  13889. C                  VECTOR LENGTH IS 5. IF S IS NULL, THEN TOTAL,AVERAGE
  13890. C                  AND STANDARD DEVIATION = 0, MIN=1.E75 AND MAX=-1.E75
  13891. C          NO    - NUMBER OF OBSERVATIONS. NO MUST BE > OR = TO 1
  13892. C          NV    - NUMBER OF VARIABLES FOR EACH OBSERVATION. NV MUST
  13893. C                  BE GREATER THAN OR EQUAL TO 1.
  13894. C
  13895. C       REMARKS
  13896. C          NONE
  13897. C
  13898. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  13899. C          NONE
  13900. C
  13901. C       METHOD
  13902. C          THE INTERVAL SIZE IS CALCULATED FROM THE GIVEN INFORMATION
  13903. C          OR OPTIONALLY FROM THE MINIMUM AND MAXIMUM VALUES FOR
  13904. C          VARIABLE NOVAR. THE FREQUENCIES AND PERCENT FREQUENCIES ARE
  13905. C          THEN CALCULATED ALONG WITH SUMMARY STATISTICS.
  13906. C          THE DIVISOR FOR STANDARD DEVIATION IS ONE LESS THAN THE
  13907. C          NUMBER OF OBSERVATIONS USED.
  13908. C
  13909. C    ..................................................................
  13910. C
  13911.     SUBROUTINE TAB1(A,S,NOVAR,UBO,FREQ,PCT,STATS,NO,NV)
  13912.     DIMENSION A(1),S(1),UBO(1),FREQ(1),PCT(1),STATS(1)
  13913.     DIMENSION WBO(3)
  13914.     DO 5 I=1,3
  13915. 5    WBO(I)=UBO(I)
  13916. C
  13917. C       CALCULATE MIN AND MAX
  13918. C
  13919.     VMIN=1.7E38
  13920.     VMAX=-1.7E38
  13921.     IJ=NO*(NOVAR-1)
  13922.     DO 30 J=1,NO
  13923.     IJ=IJ+1
  13924.     IF(S(J)) 10,30,10
  13925. 10    IF(A(IJ)-VMIN) 15,20,20
  13926. 15    VMIN=A(IJ)
  13927. 20    IF(A(IJ)-VMAX) 30,30,25
  13928. 25    VMAX=A(IJ)
  13929. 30    CONTINUE
  13930.     STATS(4)=VMIN
  13931.     STATS(5)=VMAX
  13932. C
  13933. C       DETERMINE LIMITS
  13934. C
  13935.     IF(UBO(1)-UBO(3)) 40,35,40
  13936. 35    UBO(1)=VMIN
  13937.     UBO(3)=VMAX
  13938. 40    INN=UBO(2)
  13939. C
  13940. C       CLEAR OUTPUT AREAS
  13941. C
  13942.     DO 45 I=1,INN
  13943.     FREQ(I)=0.0
  13944. 45    PCT(I)=0.0
  13945.     DO 50 I=1,3
  13946. 50    STATS(I)=0.0
  13947. C
  13948. C       CALCULATE INTERVAL SIZE
  13949. C
  13950.     SINT=ABS((UBO(3)-UBO(1))/(UBO(2)-2.0))
  13951. C
  13952. C       TEST SUBSET VECTOR
  13953. C
  13954.     SCNT=0.0
  13955.     IJ=NO*(NOVAR-1)
  13956.     DO 75 J=1,NO
  13957.     IJ=IJ+1
  13958.     IF(S(J)) 55,75,55
  13959. 55    SCNT=SCNT+1.0
  13960. C
  13961. C       DEVELOP TOTAL AND FREQUENCIES
  13962. C
  13963.     STATS(1)=STATS(1)+A(IJ)
  13964.     STATS(3)=STATS(3)+A(IJ)*A(IJ)
  13965.     TEMP=UBO(1)-SINT
  13966.     INTX=INN-1
  13967.     DO 60 I=1,INTX
  13968.     TEMP=TEMP+SINT
  13969.     IF(A(IJ)-TEMP) 70,60,60
  13970. 60    CONTINUE
  13971.     IF(A(IJ)-TEMP) 75,65,65
  13972. 65    FREQ(INN)=FREQ(INN)+1.0
  13973.     GO TO 75
  13974. 70    FREQ(I)=FREQ(I)+1.0
  13975. 75    CONTINUE
  13976.     IF (SCNT)79,105,79
  13977. C
  13978. C       CALCULATE RELATIVE FREQUENCIES
  13979. C
  13980. 79    DO 80 I=1,INN
  13981. 80    PCT(I)=FREQ(I)*100.0/SCNT
  13982. C
  13983. C       CALCULATE MEAN AND STANDARD DEVIATION
  13984. C
  13985.     IF(SCNT-1.0) 85,85,90
  13986. 85    STATS(2)=STATS(1)
  13987.     STATS(3)=0.0
  13988.     GO TO 95
  13989. 90    STATS(2)=STATS(1)/SCNT
  13990.     STATS(3)=SQRT(ABS((STATS(3)-STATS(1)*STATS(1)/SCNT)/(SCNT-1.0)))
  13991. 95    DO 100 I=1,3
  13992. 100    UBO(I)=WBO(I)
  13993. 105    RETURN
  13994.     END
  13995. C
  13996. C    ..................................................................
  13997. C
  13998. C       SUBROUTINE TAB2
  13999. C
  14000. C       PURPOSE
  14001. C          PERFORM A TWO-WAY CLASSIFICATION FOR TWO VARIABLES IN AN
  14002. C          OBSERVATION MATRIX (OR A MATRIX SUBSET) OF THE FREQUENCY,
  14003. C          PERCENT FREQUENCY, AND OTHER STATISTICS OVER GIVEN CLASS
  14004. C          INTERVALS.
  14005. C
  14006. C       USAGE
  14007. C          CALL TAB2(A,S,NOV,UBO,FREQ,PCT,STAT1,STAT2,NO,NV)
  14008. C
  14009. C       DESCRIPTION OF PARAMETERS
  14010. C          A     - OBSERVATION MATRIX, NO BY NV
  14011. C          S     - INPUT VECTOR GIVING SUBSET OF A. ONLY THOSE
  14012. C                  OBSERVATIONS WITH A CORRESPONDING NON-ZERO S(J) ARE
  14013. C                  CONSIDERED. VECTOR LENGTH IS NO.
  14014. C          NOV   - VARIABLES TO BE CROSS-TABULATED. NOV(1) IS VARIABLE
  14015. C                      1, NOV(2) IS VARIABLE 2. VECTOR LENGTH IS 2. NOV
  14016. C                      MUST BE GREATER THAN OR EQUAL TO 1 AND LESS THAN
  14017. C                      OR EQUAL TO NV.
  14018. C          UBO   - 3 BY 2 MATRIX GIVING LOWER LIMIT, NUMBER OF
  14019. C                  INTERVALS, AND UPPER LIMIT OF BOTH VARIABLES TO BE
  14020. C                  TABULATED (FIRST COLUMN FOR VARIABLE 1, SECOND
  14021. C                  COLUMN FOR VARIABLE 2). IF LOWER LIMIT IS EQUAL TO
  14022. C                  UPPER LIMIT FOR VARIABLE 1, THE PROGRAM USES THE
  14023. C                  MINIMUM AND MAXIMUM VALUES ON EACH VARIABLE. NUMBER
  14024. C                  OF INTERVALS MUST INCLUDE TWO CELLS FOR UNDER AND
  14025. C                  ABOVE LIMITS.
  14026. C          FREQ  - OUTPUT MATRIX OF FREQUENCIES IN THE TWO-WAY
  14027. C                  CLASSIFICATION. ORDER OF MATRIX IS INT1 BY INT2,
  14028. C                  WHERE INT1 IS THE NUMBER OF INTERVALS OF VARIABLE 1
  14029. C                  AND INT2 IS THE NUMBER OF INTERVALS OF VARIABLE 2.
  14030. C                  INT1 AND INT2 MUST BE SPECIFIED IN THE SECOND
  14031. C                  POSITION OF RESPECTIVE COLUMN OF UBO MATRIX.
  14032. C          PCT   - OUTPUT MATRIX OF PERCENT FREQUENCIES, SAME ORDER
  14033. C                  AS FREQ.
  14034. C          STAT1 - OUTPUT MATRIX SUMMARIZING TOTALS, MEANS, AND
  14035. C                  STANDARD DEVIATIONS FOR EACH CLASS INTERVAL OF
  14036. C                  VARIABLE 1. ORDER OF MATRIX IS 3 BY INT1.
  14037. C          STAT2 - SAME AS STAT1 BUT OVER VARIABLE 2. ORDER OF MATRIX
  14038. C                  IS 3 BY INT2.
  14039. C          NO    - NUMBER OF OBSERVATIONS. NO MUST BE GREATER THAN
  14040. C                  OR EQUAL TO 1.
  14041. C          NV    - NUMBER OF VARIABLES FOR EACH OBSERVATION. NV
  14042. C                  MUST BE GREATER THAN OR EQUAL TO 1.
  14043. C
  14044. C       REMARKS
  14045. C          IF S IS NULL, OUTPUT AREAS ARE SET TO ZERO
  14046. C
  14047. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  14048. C          NONE
  14049. C
  14050. C       METHOD
  14051. C          INTERVAL SIZES FOR BOTH VARIABLES ARE CALCULATED FROM THE
  14052. C          GIVEN INFORMATION OR OPTIONALLY FROM THE MINIMUM AND MAXIMUM
  14053. C          VALUES. THE FREQUENCY AND PERCENT FREQUENCY MATRICES ARE
  14054. C          DEVELOPED. MATRICES STAT1 AND STAT2 SUMMARIZING TOTALS,
  14055. C          MEANS, AND STANDARD DEVIATIONS ARE THEN CALCULATED.
  14056. C          THE DIVISOR FOR STANDARD DEVIATION IS ONE LESS THAN THE
  14057. C          NUMBER OF OBSERVATIONS USED IN EACH CLASS INTERVAL.
  14058. C
  14059. C    ..................................................................
  14060. C
  14061.     SUBROUTINE TAB2(A,S,NOV,UBO,FREQ,PCT,STAT1,STAT2,NO,NV)
  14062.     DIMENSION A(1),S(1),NOV(2),UBO(3,2),FREQ(1),PCT(1),STAT1(1),
  14063.      1STAT2(2),SINT(2)
  14064.     DIMENSION WBO(3,2)
  14065.     DO 5 I=1,3
  14066.     DO 5 J=1,2
  14067. 5    WBO(I,J)=UBO(I,J)
  14068. C
  14069. C       DETERMINE LIMITS
  14070. C
  14071.     DO 40 I=1,2
  14072.     IF(UBO(1,I)-UBO(3,I)) 40, 10, 40
  14073. 10    VMIN=1.7E38
  14074.     VMAX=-1.7E38
  14075.     IJ=NO*(NOV(I)-1)
  14076.     DO 35 J=1,NO
  14077.     IJ=IJ+1
  14078.     IF(S(J)) 15,35,15
  14079. 15    IF(A(IJ)-VMIN) 20,25,25
  14080. 20    VMIN=A(IJ)
  14081. 25    IF(A(IJ)-VMAX) 35,35,30
  14082. 30    VMAX=A(IJ)
  14083. 35    CONTINUE
  14084.     UBO(1,I)=VMIN
  14085.     UBO(3,I)=VMAX
  14086. 40    CONTINUE
  14087. C
  14088. C       CALCULATE INTERVAL SIZE
  14089. C
  14090. 45    DO 50 I=1,2
  14091. 50    SINT(I)=ABS((UBO(3,I)-UBO(1,I))/(UBO(2,I)-2.0))
  14092. C
  14093. C       CLEAR OUTPUT AREAS
  14094. C
  14095.     INT1=UBO(2,1)
  14096.     INT2=UBO(2,2)
  14097.     INTT=INT1*INT2
  14098.     DO 55 I=1,INTT
  14099.     FREQ(I)=0.0
  14100. 55    PCT(I)=0.0
  14101.     INTY=3*INT1
  14102.     DO 60 I=1,INTY
  14103. 60    STAT1(I)=0.0
  14104.     INTZ=3*INT2
  14105.     DO 65 I=1,INTZ
  14106. 65    STAT2(I)=0.0
  14107. C
  14108. C       TEST SUBSET VECTOR
  14109. C
  14110.     SCNT=0.0
  14111.     INTY=INT1-1
  14112.     INTX=INT2-1
  14113.     IJ=NO*(NOV(1)-1)
  14114.     IJX=NO*(NOV(2)-1)
  14115.     DO 95 J=1,NO
  14116.     IJ=IJ+1
  14117.     IJX=IJX+1
  14118.     IF(S(J)) 70,95,70
  14119. 70    SCNT=SCNT+1.0
  14120. C
  14121. C       CALCULATE FREQUENCIES
  14122. C
  14123.     TEMP1=UBO(1,1)-SINT(1)
  14124.     DO 75 IY=1,INTY
  14125.     TEMP1=TEMP1+SINT(1)
  14126.     IF(A(IJ)-TEMP1) 80,75,75
  14127. 75    CONTINUE
  14128.     IY=INT1
  14129. 80    IYY=3*(IY-1)+1
  14130.     STAT1(IYY)=STAT1(IYY)+A(IJ)
  14131.     IYY=IYY+1
  14132.     STAT1(IYY)=STAT1(IYY)+1.0
  14133.     IYY=IYY+1
  14134.     STAT1(IYY)=STAT1(IYY)+A(IJ)*A(IJ)
  14135.     TEMP2=UBO(1,2)-SINT(2)
  14136.     DO 85 IX=1,INTX
  14137.     TEMP2=TEMP2+SINT(2)
  14138.     IF(A(IJX)-TEMP2) 90,85,85
  14139. 85    CONTINUE
  14140.     IX=INT2
  14141. 90    IJF=INT1*(IX-1)+IY
  14142.     FREQ(IJF)=FREQ(IJF)+1.0
  14143.     IX=3*(IX-1)+1
  14144.     STAT2(IX)=STAT2(IX)+A(IJX)
  14145.     IX=IX+1
  14146.     STAT2(IX)=STAT2(IX)+1.0
  14147.     IX=IX+1
  14148.     STAT2(IX)=STAT2(IX)+A(IJX)*A(IJX)
  14149. 95    CONTINUE
  14150.     IF (SCNT)98,151,98
  14151. C
  14152. C       CALCULATE PERCENT FREQUENCIES
  14153. C
  14154. 98    DO 100 I=1,INTT
  14155. 100    PCT(I)=FREQ(I)*100.0/SCNT
  14156. C
  14157. C       CALCULATE TOTALS, MEANS, STANDARD DEVIATIONS
  14158. C
  14159.     IXY=-1
  14160.     DO 120 I=1,INT1
  14161.     IXY=IXY+3
  14162.     ISD=IXY+1
  14163.     TEMP1=STAT1(IXY)
  14164.     SUM=STAT1(IXY-1)
  14165.     IF(TEMP1-1.0) 120,105,110
  14166. 105    STAT1(ISD)=0.0
  14167.     GO TO 115
  14168. 110    STAT1(ISD)=SQRT(ABS((STAT1(ISD)-SUM*SUM/TEMP1)/(TEMP1-1.0)))
  14169. 115    STAT1(IXY)=SUM/TEMP1
  14170. 120    CONTINUE
  14171.     IXX=-1
  14172.     DO 140 I=1,INT2
  14173.     IXX=IXX+3
  14174.     ISD=IXX+1
  14175.     TEMP2=STAT2(IXX)
  14176.     SUM=STAT2(IXX-1)
  14177.     IF(TEMP2-1.0) 140,125,130
  14178. 125    STAT2(ISD)=0.0
  14179.     GO TO 135
  14180. 130    STAT2(ISD)=SQRT(ABS((STAT2(ISD)-SUM*SUM/TEMP2)/(TEMP2-1.0)))
  14181. 135    STAT2(IXX)=SUM/TEMP2
  14182. 140    CONTINUE
  14183.     DO 150 I=1,3
  14184.     DO 150 J=1,2
  14185. 150    UBO(I,J)=WBO(I,J)
  14186. 151    RETURN
  14187.     END
  14188. C
  14189. C    ..................................................................
  14190. C
  14191. C       SUBROUTINE TALLY
  14192. C
  14193. C       PURPOSE
  14194. C          CALCULATE TOTAL, MEAN, STANDARD DEVIATION, MINIMUM, MAXIMUM
  14195. C          FOR EACH VARIABLE IN A SET (OR A SUBSET) OF OBSERVATIONS
  14196. C
  14197. C       USAGE
  14198. C          CALL TALLY(A,S,TOTAL,AVER,SD,VMIN,VMAX,NO,NV,IER)
  14199. C
  14200. C       DESCRIPTION OF PARAMETERS
  14201. C          A     - OBSERVATION MATRIX, NO BY NV
  14202. C          S     - INPUT VECTOR INDICATING SUBSET OF A. ONLY THOSE
  14203. C                  OBSERVATIONS WITH A NON-ZERO S(J) ARE CONSIDERED.
  14204. C                  VECTOR LENGTH IS NO.
  14205. C          TOTAL - OUTPUT VECTOR OF TOTALS OF EACH VARIABLE. VECTOR
  14206. C                  LENGTH IS NV.
  14207. C          AVER  - OUTPUT VECTOR OF AVERAGES OF EACH VARIABLE. VECTOR
  14208. C                  LENGTH IS NV.
  14209. C          SD    - OUTPUT VECTOR OF STANDARD DEVIATIONS OF EACH
  14210. C                  VARIABLE. VECTOR LENGTH IS NV.
  14211. C          VMIN  - OUTPUT VECTOR OF MINIMA OF EACH VARIABLE. VECTOR
  14212. C                  LENGTH IS NV.
  14213. C          VMAX  - OUTPUT VECTOR OF MAXIMA OF EACH VARIABLE. VECTOR
  14214. C                  LENGTH IS NV.
  14215. C          NO    - NUMBER OF OBSERVATIONS
  14216. C          NV    - NUMBER OF VARIABLES FOR EACH OBSERVATION
  14217. C          IER   - ZERO, IF NO ERROR.
  14218. C                - 1, IF S IS NULL.  VMIN=-1.E75, VMAX=SD=AVER=1.E75.
  14219. C                - 2, IF S HAS ONLY ONE NON-ZERO ELEMENT. VMIN=VMAX.
  14220. C                  SD=0.0
  14221. C
  14222. C       REMARKS
  14223. C          NONE
  14224. C
  14225. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  14226. C          NONE
  14227. C
  14228. C       METHOD
  14229. C          ALL OBSERVATIONS CORRESPONDING TO A NON-ZERO ELEMENT IN S
  14230. C          VECTOR ARE ANALYZED FOR EACH VARIABLE IN MATRIX A.
  14231. C          TOTALS ARE ACCUMULATED AND MINIMUM AND MAXIMUM VALUES ARE
  14232. C          FOUND. FOLLOWING THIS, MEANS AND STANDARD DEVIATIONS ARE
  14233. C          CALCULATED.  THE DIVISOR FOR STANDARD DEVIATION IS ONE LESS
  14234. C          THAN THE NUMBER OF OBSERVATIONS USED.
  14235. C
  14236. C    ..................................................................
  14237. C
  14238.     SUBROUTINE TALLY(A,S,TOTAL,AVER,SD,VMIN,VMAX,NO,NV)
  14239.     DIMENSION A(1),S(1),TOTAL(1),AVER(1),SD(1),VMIN(1),VMAX(1)
  14240. C
  14241. C       CLEAR OUTPUT VECTORS AND INITIALIZE VMIN,VMAX
  14242. C
  14243.     IER=0
  14244.     DO 1 K=1,NV
  14245.     TOTAL(K)=0.0
  14246.     AVER(K)=1.7E38
  14247.     SD(K)=1.7E38
  14248.     VMIN(K)=-1.7E38
  14249. 1    VMAX(K)=1.7E38
  14250. C
  14251. C       TEST SUBSET VECTOR
  14252. C
  14253.     SCNT=0.0
  14254.     DO 7 J=1,NO
  14255.     IJ=J-NO
  14256.     IF(S(J)) 2,7,2
  14257. 2    SCNT=SCNT+1.0
  14258. C
  14259. C       CALCULATE TOTAL, MINIMA, MAXIMA
  14260. C
  14261.     DO 6 I=1,NV
  14262.     IJ=IJ+NO
  14263.     TOTAL(I)=TOTAL(I)+A(IJ)
  14264.     IF(A(IJ)-VMIN(I)) 3,4,4
  14265. 3    VMIN(I)=A(IJ)
  14266. 4    IF(A(IJ)-VMAX(I)) 6,6,5
  14267. 5    VMAX(I)=A(IJ)
  14268. 6    SD(I)=SD(I)+A(IJ)*A(IJ)
  14269. 7    CONTINUE
  14270. C
  14271. C       CALCULATE MEANS AND STANDARD DEVIATIONS
  14272. C
  14273.     IF (SCNT)8,8,9
  14274. 8    IER=1
  14275.     GO TO 15
  14276. 9    DO 10 I=1,NV
  14277. 10    AVER(I)=TOTAL(I)/SCNT
  14278.     IF (SCNT-1.0) 13,11,13
  14279. 11    IER=2
  14280.     DO 12 I=1,NV
  14281. 12    SD(I)=0.0
  14282.     GO TO 15
  14283. 13    DO 14 I=1,NV
  14284. 14    SD(I)=SQRT(ABS((SD(I)-TOTAL(I)*TOTAL(I)/SCNT)/(SCNT-1.0)))
  14285. 15    RETURN
  14286.     END
  14287. C
  14288. C    ..................................................................
  14289. C
  14290. C       SUBROUTINE TCNP
  14291. C
  14292. C       PURPOSE
  14293. C          A SERIES EXPANSION IN CHEBYSHEV POLYNOMIALS WITH INDEPENDENT
  14294. C          VARIABLE X IS TRANSFORMED TO A POLYNOMIAL WITH INDEPENDENT
  14295. C          VARIABLE Z, WHERE X=A*Z+B.
  14296. C
  14297. C       USAGE
  14298. C          CALL TCNP(A,B,POL,N,C,WORK)
  14299. C
  14300. C       DESCRIPTION OF PARAMETERS
  14301. C          A     - FACTOR OF LINEAR TERM IN GIVEN LINEAR TRANSFORMATION
  14302. C          B     - CONSTANT TERM IN GIVEN LINEAR TRANSFORMATION
  14303. C          POL   - COEFFICIENT VECTOR OF POLYNOMIAL (RESULTANT VALUE)
  14304. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  14305. C          N     - DIMENSION OF COEFFICIENT VECTORS POL AND C
  14306. C          C     - GIVEN COEFFICIENT VECTOR OF EXPANSION
  14307. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  14308. C                  POL AND C MAY BE IDENTICALLY LOCATED
  14309. C          WORK  - WORKING STORAGE OF DIMENSION 2*N
  14310. C
  14311. C       REMARKS
  14312. C          COEFFICIENT VECTOR C REMAINS UNCHANGED IF NOT COINCIDING
  14313. C          WITH COEFFICIENT VECTOR POL.
  14314. C          OPERATION IS BYPASSED IN CASE N LESS THAN 1.
  14315. C          THE LINEAR TRANSFORMATION X=A*Z+B OR Z=(1/A)(X-B) TRANSFORMS
  14316. C          THE RANGE (-1,+1) IN X TO THE RANGE (ZL,ZR) IN Z, WHERE
  14317. C          ZL=-(1+B)/A AND ZR=(1-B)/A.
  14318. C          FOR GIVEN ZL, ZR WE HAVE A=2/(ZR-ZL) AND B=-(ZR+ZL)/(ZR-ZL)
  14319. C
  14320. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  14321. C          NONE
  14322. C
  14323. C       METHOD
  14324. C          THE TRANSFORMATION IS BASED ON THE RECURRENCE EQUATION
  14325. C          FOR CHEBYSHEV POLYNOMIALS T(N,X)
  14326. C          T(N+1,X)=2*X*T(N,X)-T(N-1,X),
  14327. C          WHERE THE FIRST TERM IN BRACKETS IS THE INDEX,
  14328. C          THE SECOND IS THE ARGUMENT.
  14329. C          STARTING VALUES ARE T(0,X)=1, T(1,X)=X.
  14330. C          THE TRANSFORMATION IS IMPLICITLY DEFINED BY MEANS OF
  14331. C          X = A*Z+B TOGETHER WITH
  14332. C          SUM(POL(I)*Z**(I-1), SUMMED OVER I FROM 1 TO N)
  14333. C          =SUM(C(I)*T(I-1,X), SUMMED OVER I FROM 1 TO N).
  14334. C
  14335. C    ..................................................................
  14336. C
  14337.     SUBROUTINE TCNP(A,B,POL,N,C,WORK)
  14338. C
  14339.     DIMENSION POL(1),C(1),WORK(1)
  14340. C
  14341. C       TEST OF DIMENSION
  14342.     IF(N-1)2,1,3
  14343. C
  14344. C       DIMENSION LESS THAN 2
  14345. 1    POL(1)=C(1)
  14346. 2    RETURN
  14347. C
  14348. 3    POL(1)=C(1)+C(2)*B
  14349.     POL(2)=C(2)*A
  14350.     IF(N-2)2,2,4
  14351. C
  14352. C       INITIALIZATION
  14353. 4    WORK(1)=1.
  14354.     WORK(2)=B
  14355.     WORK(3)=0.
  14356.     WORK(4)=A
  14357.     XD=A+A
  14358.     X0=B+B
  14359. C
  14360. C       CALCULATE COEFFICIENT VECTOR OF NEXT CHEBYSHEV POLYNOMIAL
  14361. C       AND ADD MULTIPLE OF THIS VECTOR TO POLYNOMIAL POL
  14362.     DO 6 J=3,N
  14363.     P=0.
  14364. C
  14365.     DO 5 K=2,J
  14366.     H=P-WORK(2*K-3)+X0*WORK(2*K-2)
  14367.     P=WORK(2*K-2)
  14368.     WORK(2*K-2)=H
  14369.     WORK(2*K-3)=P
  14370.     POL(K-1)=POL(K-1)+H*C(J)
  14371. 5    P=XD*P
  14372.     WORK(2*J-1)=0.
  14373.     WORK(2*J)=P
  14374. 6    POL(J)=C(J)*P
  14375.     RETURN
  14376.     END
  14377. C
  14378. C    ..................................................................
  14379. C
  14380. C       SUBROUTINE TCSP
  14381. C
  14382. C       PURPOSE
  14383. C          A SERIES EXPANSION IN SHIFTED CHEBYSHEV POLYNOMIALS WITH
  14384. C          INDEPENDENT VARIABLE X IS TRANSFORMED TO A POLYNOMIAL WITH
  14385. C          INDEPENDENT VARIABLE Z, WHERE X=A*Z+B.
  14386. C
  14387. C       USAGE
  14388. C          CALL TCSP(A,B,POL,N,C,WORK)
  14389. C
  14390. C       DESCRIPTION OF PARAMETERS
  14391. C          A     - FACTOR OF LINEAR TERM IN GIVEN LINEAR TRANSFORMATION
  14392. C          B     - CONSTANT TERM IN GIVEN LINEAR TRANSFORMATION
  14393. C          POL   - COEFFICIENT VECTOR OF POLYNOMIAL (RESULTANT VALUE)
  14394. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  14395. C          N     - DIMENSION OF COEFFICIENT VECTORS POL AND C
  14396. C          C     - GIVEN COEFFICIENT VECTOR OF EXPANSION
  14397. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  14398. C                  POL AND C MAY BE IDENTICALLY LOCATED
  14399. C          WORK  - WORKING STORAGE OF DIMENSION 2*N
  14400. C
  14401. C       REMARKS
  14402. C          COEFFICIENT VECTOR C REMAINS UNCHANGED IF NOT COINCIDING
  14403. C          WITH COEFFICIENT VECTOR POL.
  14404. C          OPERATION IS BYPASSED IN CASE N LESS THAN 1.
  14405. C          THE LINEAR TRANSFORMATION X=A*Z+B OR Z=(1/A)(X-B) TRANSFORMS
  14406. C          THE RANGE (0,1) IN X TO THE RANGE (ZL,ZR) IN Z, WHERE
  14407. C          ZL=-B/A AND ZR=(1-B)/A.
  14408. C          FOR GIVEN ZL, ZR WE HAVE A=1/(ZR-ZL) AND B=-ZL/(ZR-ZL).
  14409. C
  14410. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  14411. C          NONE
  14412. C
  14413. C       METHOD
  14414. C          THE TRANSFORMATION IS BASED ON THE RECURRENCE EQUATION FOR
  14415. C          SHIFTED CHEBYSHEV POLYNOMIALS TS(N,X)
  14416. C          TS(N+1,X)=(4*X-2)*TS(N,X)-TS(N-1,X),
  14417. C          WHERE THE FIRST TERM IN BRACKETS IS THE INDEX,
  14418. C          THE SECOND IS THE ARGUMENT.
  14419. C          STARTING VALUES ARE TS(0,X)=1, TS(1,X)=2*X-1.
  14420. C          THE TRANSFORMATION IS IMPLICITLY DEFINED BY MEANS OF
  14421. C          X=A*Z+B TOGETHER WITH
  14422. C          SUM(POL(I)*Z**(I-1), SUMMED OVER I FROM 1 TO N)
  14423. C          =SUM(C(I)*TS(I-1,X), SUMMED OVER I FROM 1 TO N).
  14424. C
  14425. C    ..................................................................
  14426. C
  14427.     SUBROUTINE TCSP(A,B,POL,N,C,WORK)
  14428. C
  14429.     DIMENSION POL(1),C(1),WORK(1)
  14430. C
  14431. C       TEST OF DIMENSION
  14432.     IF(N-1)2,1,3
  14433. C
  14434. C       DIMENSION LESS THAN 2
  14435. 1    POL(1)=C(1)
  14436. 2    RETURN
  14437. C
  14438. 3    XD=A+A
  14439.     X0=B+B-1.
  14440.     POL(1)=C(1)+C(2)*X0
  14441.     POL(2)=C(2)*XD
  14442.     IF(N-2)2,2,4
  14443. C
  14444. C       INITIALIZATION
  14445. 4    WORK(1)=1.
  14446.     WORK(2)=X0
  14447.     WORK(3)=0.
  14448.     WORK(4)=XD
  14449.     XD=XD+XD
  14450.     X0=X0+X0
  14451. C
  14452. C       CALCULATE COEFFICIENT VECTOR OF NEXT SHIFTED CHEBYSHEV
  14453. C       POLYNOMIAL AND ADD MULTIPLE OF THIS VECTOR TO POLYNOMIAL POL
  14454.     DO 6 J=3,N
  14455.     P=0.
  14456. C
  14457.     DO 5 K=2,J
  14458.     H=P-WORK(2*K-3)+X0*WORK(2*K-2)
  14459.     P=WORK(2*K-2)
  14460.     WORK(2*K-2)=H
  14461.     WORK(2*K-3)=P
  14462.     POL(K-1)=POL(K-1)+H*C(J)
  14463. 5    P=XD*P
  14464.     WORK(2*J-1)=0.
  14465.     WORK(2*J)=P
  14466. 6    POL(J)=C(J)*P
  14467.     RETURN
  14468.     END
  14469. C
  14470. C    ..................................................................
  14471. C
  14472. C       SUBROUTINE TEAS
  14473. C
  14474. C       PURPOSE
  14475. C          CALCULATE THE LIMIT OF A GIVEN SEQUENCE BY MEANS OF THE
  14476. C          EPSILON-ALGORITHM.
  14477. C
  14478. C       USAGE
  14479. C          CALL TEAS(X,N,FIN,EPS,IER)
  14480. C
  14481. C       DESCRIPTION OF PARAMETERS
  14482. C          X      - VECTOR WHOSE COMPONENTS ARE TERMS OF THE GIVEN
  14483. C                   SEQUENCE. ON RETURN THE COMPONENTS OF VECTOR X
  14484. C                   ARE DESTROYED.
  14485. C          N      - DIMENSION OF INPUT VECTOR X.
  14486. C          FIN    - RESULTANT SCALAR CONTAINING ON RETURN THE LIMIT
  14487. C                   OF THE GIVEN SEQUENCE.
  14488. C          EPS    - AN INPUT VALUE, WHICH SPECIFIES THE UPPER BOUND
  14489. C                   OF THE RELATIVE (ABSOLUTE) ERROR IF THE COMPONENTS
  14490. C                   OF X ARE ABSOLUTELY GREATER (LESS) THAN ONE.
  14491. C                   CALCULATION IS TERMINATED AS SOON AS THREE TIMES IN
  14492. C                   SUCCESSION THE RELATIVE (ABSOLUTE) DIFFERENCE
  14493. C                   BETWEEN NEIGHBOURING TERMS IS NOT GREATER THAN EPS.
  14494. C          IER    - RESULTANT ERROR PARAMETER CODED IN THE FOLLOWING
  14495. C                   FORM
  14496. C                    IER=0  - NO ERROR
  14497. C                    IER=1  - REQUIRED ACCURACY NOT REACHED WITH
  14498. C                             MAXIMAL NUMBER OF ITERATIONS
  14499. C                    IER=-1 - INTEGER N IS LESS THAN TEN.
  14500. C
  14501. C       REMARKS
  14502. C          NO ACTION BESIDES ERROR MESSAGE IN CASE N LESS THAN TEN.
  14503. C          THE CHARACTER OF THE GIVEN INFINITE SEQUENCE MUST BE
  14504. C          RECOGNIZABLE BY THOSE N COMPONENTS OF THE INPUT VECTOR X.
  14505. C
  14506. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  14507. C          NONE
  14508. C
  14509. C       METHOD
  14510. C          THE CONVERGENCE OF THE GIVEN SEQUENCE IS ACCELERATED BY
  14511. C          MEANS OF THE E(2)-TRANSFORMATION, USED IN AN ITERATIVE WAY.
  14512. C          FOR REFERENCE, SEE
  14513. C          ALGORITHM 215,SHANKS, CACM 1963, NO. 11, PP. 662. AND
  14514. C          P. WYNN, SINGULAR RULES FOR CERTAIN NON-LINEAR ALGORITHMS
  14515. C          BIT VOL. 3, 1963, PP. 175-195.
  14516. C
  14517. C    ..................................................................
  14518. C
  14519.     SUBROUTINE TEAS(X,N,FIN,EPS,IER)
  14520. C
  14521.     DIMENSION X(1)
  14522. C
  14523. C       TEST ON WRONG INPUT PARAMETER N
  14524. C
  14525.     NEW=N
  14526.     IF(NEW-10)1,2,2
  14527. 1    IER=-1
  14528.     RETURN
  14529. C
  14530. C       CALCULATE INITIAL VALUES FOR THE EPSILON ARRAY
  14531. C
  14532. 2    ISW1=0
  14533.     ISW2=0
  14534.     W1=1.E38
  14535.     W7=X(4)-X(3)
  14536.     IF(W7)3,4,3
  14537. 3    W1=1./W7
  14538. C
  14539. 4    W5=1.E38
  14540.     W7=X(2)-X(1)
  14541.     IF(W7)5,6,5
  14542. 5    W5=1./W7
  14543. C
  14544. 6    W4=X(3)-X(2)
  14545.     IF(W4)9,7,9
  14546. 7    W4=1.E38
  14547.     T=X(2)
  14548.     W2=X(3)
  14549. 8    W3=1.E38
  14550.     GO TO 17
  14551. C
  14552. 9    W4=1./W4
  14553. C
  14554.     T=1.E38
  14555.     W7=W4-W5
  14556.     IF(W7)10,11,10
  14557. 10    T=X(2)+1./W7
  14558. C
  14559. 11    W2=W1-W4
  14560.     IF(W2)15,12,15
  14561. 12    W2=1.E38
  14562.     IF(T-1.E38)13,14,14
  14563. 13    ISW2=1
  14564. 14    W3=W4
  14565.     GO TO 17
  14566. C
  14567. 15    W2=X(3)+1./W2
  14568.     W7=W2-T
  14569.     IF(W7)16,8,16
  14570. 16    W3=W4+1./W7
  14571. C
  14572. 17    ISW1=ISW2
  14573.     ISW2=0
  14574.     IMIN=4
  14575. C
  14576. C       CALCULATE DIAGONALS OF THE EPSILON ARRAY IN A DO-LOOP
  14577. C
  14578.     DO 40 I=5,NEW
  14579.     IAUS=I-IMIN
  14580.     W4=1.E38
  14581.     W5=X(I-1)
  14582.     W7=X(I)-X(I-1)
  14583.     IF(W7)18,24,18
  14584. 18    W4=1./W7
  14585. C
  14586.     IF(W1-1.E38)19,25,25
  14587. 19    W6=W4-W1
  14588. C
  14589. C       TEST FOR NECESSITY OF A SINGULAR RULE
  14590. C
  14591.     IF(ABS(W6)-ABS(W4)*1.E-4)20,20,22
  14592. 20    ISW2=1
  14593.     IF(W6)22,21,22
  14594. 21    W5=1.E38
  14595.     W6=W1
  14596.     IF(W2-1.E38)28,26,26
  14597. 22    W5=X(I-1)+1./W6
  14598. C
  14599. C       FIRST TEST FOR LOSS OF SIGNIFICANCE
  14600. C
  14601.     IF(ABS(W5)-ABS(X(I-1))*1.E-5)23,24,24
  14602. 23    IF(W5)36,24,36
  14603. C
  14604. 24    W7=W5-W2
  14605.     IF(W7)27,25,27
  14606. 25    W6=1.E38
  14607. 26    ISW2=0
  14608.     X(IAUS)=W2
  14609.     GO TO 37
  14610. 27    W6=W1+1./W7
  14611. 28    IF(ISW1-1)33,29,29
  14612. C
  14613. C       CALCULATE X(IAUS) WITH HELP OF SINGULAR RULE
  14614. C
  14615. 29    IF(W2-1.E38)30,32,32
  14616. 30    W7=W5/(W2-W5)+T/(W2-T)+X(I-2)/(X(I-2)-W2)
  14617.     IF(1.+W7)31,38,31
  14618. 31    X(IAUS)=W7*W2/(1.+W7)
  14619.     GO TO 39
  14620. C
  14621. 32    X(IAUS)=W5+T-X(I-2)
  14622.     GO TO 39
  14623. C
  14624. 33    W7=W6-W3
  14625.     IF(W7)34,38,34
  14626. 34    X(IAUS)=W2+1./W7
  14627. C
  14628. C       SECOND TEST FOR LOSS OF SIGNIFICANCE
  14629. C
  14630.     IF(ABS(X(IAUS))-ABS(W2)*1.E-5)35,37,37
  14631. 35    IF(X(IAUS))36,37,36
  14632. C
  14633. 36    NEW=IAUS-1
  14634.     ISW2=0
  14635.     GO TO 41
  14636. C
  14637. 37    IF(W2-1.E38)39,38,38
  14638. 38    X(IAUS)=1.E38
  14639.     IMIN=I
  14640. C
  14641. 39    W1=W4
  14642.     T=W2
  14643.     W2=W5
  14644.     W3=W6
  14645.     ISW1=ISW2
  14646. 40    ISW2=0
  14647. C
  14648.     NEW=NEW-IMIN
  14649. C
  14650. C       TEST FOR ACCURACY
  14651. C
  14652. 41    IEND=NEW-1
  14653.     DO 47 I=1,IEND
  14654.     W1=ABS(X(I)-X(I+1))
  14655.     W2=ABS(X(I+1))
  14656.     IF(W1-EPS)44,44,42
  14657. 42    IF(W2-1.)46,46,43
  14658. 43    IF(W1-EPS*W2)44,44,46
  14659. 44    ISW2=ISW2+1
  14660.     IF(3-ISW2)45,45,47
  14661. 45    FIN=X(I)
  14662.     IER=0
  14663.     RETURN
  14664. C
  14665. 46    ISW2=0
  14666. 47    CONTINUE
  14667. C
  14668.     IF(NEW-6)48,2,2
  14669. 48    FIN=X(NEW)
  14670.     IER=1
  14671.     RETURN
  14672.     END
  14673. C
  14674. C    ..................................................................
  14675. C
  14676. C       SUBROUTINE TETRA
  14677. C
  14678. C       PURPOSE
  14679. C          COMPUTE A TETRACHORIC CORRELATION COEFFICIENT BETWEEN TWO
  14680. C          VARIABLES WHERE DATA IN BOTH VARIABLES HAVE BEEN REDUCED
  14681. C          ARTIFICIALLY TO TWO CATEGORIES.
  14682. C
  14683. C       USAGE
  14684. C          CALL TETRA (N,U,V,HU,HV,R,RS,IE)
  14685. C
  14686. C       DESCRIPTION OF PARAMETERS
  14687. C          N  - NUMBER OF OBSERVATIONS
  14688. C          U  - INPUT VECTOR OF LENGTH N CONTAINING THE FIRST VARIABLE
  14689. C               REDUCED TO TWO CATEGORIES
  14690. C          V  - INPUT VECTOR OF LENGTH N CONTAINING THE SECOND VARIABLE
  14691. C               REDUCED TO TWO CATEGORIES
  14692. C          HU - INPUT NUMERICAL CODE INDICATING THE HIGHER CATEGORY OF
  14693. C               THE FIRST VARIABLE.  IF ANY VALUE OF VARIABLE U IS
  14694. C               EQUAL TO OR GREATER THAN HU, IT WILL BE CLASSIFIED AS
  14695. C               THE HIGHER CATEGORY, OTHERWISE AS THE LOWER CATEGORY.
  14696. C          HV - SAME AS HU EXCEPT THAT HV IS FOR THE SECOND VARIABLE.
  14697. C          R  - TETRACHORIC CORRELATION COMPUTED
  14698. C          RS - STANDARD ERROR OF TETRACHORIC CORRELATION COMPUTED
  14699. C          IE - ERROR CODE
  14700. C               0 - NO ERROR
  14701. C               1 - UNABLE TO COMPUTE A TETRACHORIC CORRELATION DUE TO
  14702. C                   THE FACT THAT AT LEAST ONE CELL SHOWS ZERO FRE-
  14703. C                   QUENCY IN THE 2X2 CONTINGENCY TABLE CONSTRUCTED
  14704. C                   FROM INPUT DATA.  IN THIS CASE, R AND RS ARE SET
  14705. C                   TO 10**75.  (SEE GUILFORD, 1956)
  14706. C               2 - THE ROOT SOLVER GIVES MULTIPLE ROOTS, OR NO ROOTS,
  14707. C                   R, IN THE INTERVAL (-1,1) INCLUSIVE. R AND RS ARE
  14708. C                   SET TO 10**75.
  14709. C               3 - UNABLE TO COMPUTE A SATISFACTORY VALUE OF TETRA-
  14710. C                   CHORIC CORRELATION USING NEWTON-RAPHSON METHOD OF
  14711. C                   APPROXIMATION TO THE ROOT OF THE EQUATION.  R AND
  14712. C                   RS ARE SET TO 10**75.  SEE SUBROUTINE POLRT ERROR
  14713. C                   INDICATORS.
  14714. C               4 - HIGH ORDER COEFFICIENT OF THE POLYNOMIAL IS ZERO.
  14715. C                   SEE SUBROUTINE POLRT ERROR INDICATORS.
  14716. C
  14717. C       REMARKS
  14718. C          VALUES OF VARIABLES U AND V MUST BE NUMERICAL, AND
  14719. C          ALPHABETIC AND SPECIAL CHARACTERS MUST NOT BE USED.
  14720. C          FOR A DEPENDABLE RESULT FOR TETRACHORIC CORRELATION,
  14721. C          IT IS RECOMMENDED THAT N BE AT LEAST 200 OR GREATER.
  14722. C
  14723. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  14724. C          NDTRI
  14725. C          POLRT--THIS POLYNOMIAL ROOT ROUTINE WAS SELECTED BECAUSE OF
  14726. C                 ITS SMALL STORAGE REQUIREMENT.  OTHER SSP ROUTINES
  14727. C                 WHICH COULD REPLACE POLRT ARE PRQD AND PRBM.  THEIR
  14728. C                 USE WOULD REQUIRE MODIFICATION OF TETRA.
  14729. C
  14730. C       METHOD
  14731. C          REFER TO J. P. GUILFORD, 'FUNDAMENTAL STATISTICS IN PSYCHO-
  14732. C          LOGY AND EDUCATION', MCGRAW-HILL, NEW YORK, 1956, CHAPTER 13
  14733. C          AND W. P. ELDERTON, 'FREQUENCY CURVES AND CORRELATION' 4-TH
  14734. C          ED., CAMBRIDGE UNIVERSITY PRESS, 1953, CHAPTER 9.
  14735. C
  14736. C    ..................................................................
  14737. C
  14738.     SUBROUTINE TETRA (N,U,V,HU,HV,R,RS,IE)
  14739. C
  14740.     DIMENSION XCOF(8),COF(8),ROOTR(7),ROOTI(7)
  14741.     DIMENSION U(1),V(1)
  14742.     DOUBLE PRECISION X31,X32,X312,X322
  14743. C
  14744. C       CONSTRUCT A 2X2 CONTINGENCY TABLE
  14745. C
  14746.     A=0.0
  14747.     B=0.0
  14748.     C=0.0
  14749.     D=0.0
  14750.     DO 40 I=1,N
  14751.     IF(U(I)-HU) 10, 25, 25
  14752. 10    IF(V(I)-HV) 15, 20, 20
  14753. 15    D=D+1.0
  14754.     GO TO 40
  14755. 20    B=B+1.0
  14756.     GO TO 40
  14757. 25    IF(V(I)-HV) 30, 35, 35
  14758. 30    C=C+1.0
  14759.     GO TO 40
  14760. 35    A=A+1.0
  14761. 40    CONTINUE
  14762. C
  14763. C       TEST WHETHER ANY CELL IN THE CONTINGENCY TABLE IS ZERO.
  14764. C       IF SO, RETURN TO THE CALLING ROUTINE WITH R=0.0 AND IE=1.
  14765. C
  14766.     IE=0
  14767.     IF(A) 60, 60, 45
  14768. 45    IF(B) 60, 60, 50
  14769. 50    IF(C) 60, 60, 55
  14770. 55    IF(D) 60, 60, 70
  14771. 60    IE=1
  14772.     GO TO 86
  14773. C
  14774. C       COMPUTE P1, Q1, P2, AND Q2
  14775. C
  14776. 70    FN=N
  14777.     P1=(A+C)/FN
  14778.     Q1=(B+D)/FN
  14779.     P2=(A+B)/FN
  14780.     Q2=(C+D)/FN
  14781. C
  14782. C       FIND THE STANDARD NORMAL DEVIATES AT Q1 AND Q2, AND THE
  14783. C       ORDINATES AT THOSE POINTS
  14784. C
  14785.     CALL NDTRI (Q1,X1,Y1,ER)
  14786.     CALL NDTRI (Q2,X2,Y2,ER)
  14787. C
  14788. C       COMPUTE THE TETRACHORIC CORRELATION COEFFICIENT
  14789. C
  14790.     IF(X1) 76, 72, 76
  14791. 72    IF(X2) 76, 74, 76
  14792. 74    R=0.0
  14793.     GO TO 90
  14794. 76    XCOF(1)=-((A*D-B*C)/(Y1*Y2*FN*FN))
  14795.     XCOF(2)=1.0
  14796.     XCOF(3)=X1*X2/2.0
  14797.     XCOF(4)=(X1*X1-1.0)*(X2*X2-1.0)/6.0
  14798.     X31=DBLE(X1)
  14799.     X32=DBLE(X2)
  14800.     X312=X31**2
  14801.     X322=X32**2
  14802.     XCOF(5)=SNGL(X31*(X312-3.0D0)*X32*(X322-3.0D0)/24.0D0)
  14803.     XCOF(6)=SNGL((X312*(X312-6.0D0)+3.0D0)*(X322*(X322-6.0D0)+3.0D0)
  14804.      1        /120.0D0)
  14805.     XCOF(7)=SNGL(X31*(X312*(X312-10.0D0)+15.0D0)*X32*(X322*(X322-10.0
  14806.      1        D0)+15.0D0)/720.0D0)
  14807.     XCOF(8)=SNGL((((X312-15.0D0)*X312+45.0D0)*X312-15.0D0)*(((X322-
  14808.      1        15.0D0)*X322+45.0D0)*X322-15.0D0)/5040.0D0)
  14809. C
  14810.     CALL POLRT (XCOF,COF,7,ROOTR,ROOTI,IER)
  14811. C
  14812.     J=0
  14813.     IF(IER) 78, 78, 84
  14814. 78    DO 82 I=1,7
  14815.     IF(ABS(ROOTI(I))-.5*ABS(ROOTR(I))*1.0E-6)79,79,82
  14816. 79    R=ROOTR(I)
  14817.     IF(ABS(R)-1.0)81,81,80
  14818. 80    R=1.7E38                                                                  0
  14819.     GO TO 82
  14820. 81    J=J+1
  14821. 82    CONTINUE
  14822.     IF(J-1)83,88,83
  14823. 83    IE=2
  14824.     GO TO 86
  14825. C
  14826. C       UNABLE TO COMPUTE R
  14827. C
  14828. 84    IE=IER
  14829. 86    R=1.7E38
  14830.     RS=R
  14831.     GO TO 100
  14832. 88    IF(R-1.7E38)90,83,83
  14833. C
  14834. C       STANDARD ERROR OF R=0.0
  14835. C
  14836. 90    RS= SQRT(P1*P2*Q1*Q2)/(Y1*Y2* SQRT(FN))
  14837. C
  14838. 100    RETURN
  14839.     END
  14840. C
  14841. C    ..................................................................
  14842. C
  14843. C       SUBROUTINE TEUL
  14844. C
  14845. C       PURPOSE
  14846. C          COMPUTE THE SUM OF FCT(K) FOR K FROM ONE UP TO INFINITY.
  14847. C
  14848. C       USAGE
  14849. C          CALL TEUL(FCT,SUM,MAX,EPS,IER)
  14850. C          PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT.
  14851. C
  14852. C       DESCRIPTION OF PARAMETERS
  14853. C          FCT    - NAME OF AN EXTERNAL FUNCTION SUBPROGRAM USED.
  14854. C                   IT COMPUTES THE K-TH TERM OF THE SERIES TO ANY
  14855. C                   GIVEN INDEX K.
  14856. C          SUM    - RESULTANT VALUE CONTAINING ON RETURN THE SUM OF
  14857. C                   THE GIVEN SERIES.
  14858. C          MAX    - INPUT VALUE, WHICH SPECIFIES THE MAXIMAL NUMBER
  14859. C                   OF TERMS OF THE SERIES THAT ARE RESPECTED.
  14860. C          EPS    - INPUT VALUE, WHICH SPECIFIES THE UPPER BOUND OF
  14861. C                   THE RELATIVE ERROR.
  14862. C                   SUMMATION IS STOPPED AS SOON AS FIVE TIMES IN
  14863. C                   SUCCESSION THE ABSOLUTE VALUE OF THE TERMS OF THE
  14864. C                   TRANSFORMED SERIES ARE FOUND TO BE LESS THAN
  14865. C                   EPS*(ABSOLUTE VALUE OF CURRENT SUM).
  14866. C          IER    - RESULTANT ERROR PARAMETER CODED IN THE FOLLOWING
  14867. C                   FORM
  14868. C                    IER=0  - NO ERROR
  14869. C                    IER=1  - REQUIRED ACCURACY NOT REACHED WITH
  14870. C                             MAXIMAL NUMBER OF TERMS
  14871. C                    IER=-1 - THE INTEGER MAX IS LESS THAN ONE.
  14872. C
  14873. C       REMARKS
  14874. C          NO ACTION BESIDES ERROR MESSAGE IN CASE MAX LESS THAN ONE.
  14875. C
  14876. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  14877. C          THE EXTERNAL FUNCTION SUBPROGRAM FCT(K) MUST BE FURNISHED
  14878. C          BY THE USER.
  14879. C
  14880. C       METHOD
  14881. C          EVALUATION IS DONE BY MEANS OF A SUITABLY REFINED EULER
  14882. C          TRANSFORMATION. FOR REFERENCE, SEE
  14883. C          F.B.HILDEBRAND, INTRODUCTION TO NUMERICAL ANALYSIS,
  14884. C          MCGRAW/HILL, NEW YORK/TORONTO/LONDON, 1956, PP.155-160, AND
  14885. C          P. NAUR, REPORT ON THE ALGORITHMIC LANGUAGE ALGOL 60,
  14886. C          CACM, VOL.3, ISS.5 (1960), PP.311.
  14887. C
  14888. C    ..................................................................
  14889. C
  14890.     SUBROUTINE TEUL (FCT,SUM,MAX,EPS,IER)
  14891. C
  14892.     DIMENSION Y(15)
  14893. C
  14894. C       TEST ON WRONG INPUT PARAMETER MAX
  14895. C
  14896.     IF(MAX)1,1,2
  14897. 1    IER=-1
  14898.     GOTO 12
  14899. C
  14900. C       INITIALIZE EULER TRANSFORMATION
  14901. C
  14902. 2    IER=1
  14903.     I=1
  14904.     M=1
  14905.     N=1
  14906.     Y(1)=FCT(N)
  14907.     SUM=Y(1)*.5
  14908. C
  14909. C       START EULER-LOOP
  14910. C
  14911. 3    J=0
  14912. 4    I=I+1
  14913.     IF(I-MAX)5,5,12
  14914. 5    N=I
  14915.     AMN=FCT(N)
  14916.     DO 6 K=1,M
  14917.     AMP=(AMN+Y(K))*.5
  14918.     Y(K)=AMN
  14919. 6    AMN=AMP
  14920. C
  14921. C       CHECK EULER TRANSFORMATION
  14922. C
  14923.     IF(ABS(AMN)-ABS(Y(M)))7,9,9
  14924. 7    IF(M-15)8,9,9
  14925. 8    M=M+1
  14926.     Y(M)=AMN
  14927.     AMN=.5*AMN
  14928. C
  14929. C       UPDATE SUM
  14930. C
  14931. 9    SUM=SUM+AMN
  14932.     IF(ABS(AMN)-EPS*ABS(SUM))10,10,3
  14933. C
  14934. C       TEST END OF PROCEDURE
  14935. C
  14936. 10    J=J+1
  14937.     IF(J-5)4,11,11
  14938. 11    IER=0
  14939. 12    RETURN
  14940.     END
  14941. C
  14942. C    ..................................................................
  14943. C
  14944. C       SUBROUTINE THEP
  14945. C
  14946. C       PURPOSE
  14947. C          A SERIES EXPANSION IN HERMITE POLYNOMIALS WITH INDEPENDENT
  14948. C          VARIABLE X IS TRANSFORMED TO A POLYNOMIAL WITH INDEPENDENT
  14949. C          VARIABLE Z, WHERE X=A*Z+B
  14950. C
  14951. C       USAGE
  14952. C          CALL THEP(A,B,POL,N,C,WORK)
  14953. C
  14954. C       DESCRIPTION OF PARAMETERS
  14955. C          A     - FACTOR OF LINEAR TERM IN GIVEN LINEAR TRANSFORMATION
  14956. C          B     - CONSTANT TERM IN GIVEN LINEAR TRANSFORMATION
  14957. C          POL   - COEFFICIENT VECTOR OF POLYNOMIAL (RESULTANT VALUE)
  14958. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  14959. C          N     - DIMENSION OF COEFFICIENT VECTOR POL AND C
  14960. C          C     - COEFFICIENT VECTOR OF GIVEN EXPANSION
  14961. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  14962. C                  POL AND C MAY BE IDENTICALLY LOCATED
  14963. C          WORK  - WORKING STORAGE OF DIMENSION 2*N
  14964. C
  14965. C       REMARKS
  14966. C          COEFFICIENT VECTOR C REMAINS UNCHANGED IF NOT COINCIDING
  14967. C          WITH COEFFICIENT VECTOR POL.
  14968. C          OPERATION IS BYPASSED IN CASE N LESS THAN 1.
  14969. C          THE LINEAR TRANSFORMATION X=A*Z+B OR Z=(1/A)(X-B) TRANSFORMS
  14970. C          THE RANGE (-C,C) IN X TO THE RANGE (ZL,ZR) IN Z WHERE
  14971. C          ZL=-(C+B)/A AND ZR=(C-B)/A.
  14972. C          FOR GIVEN ZL, ZR AND C WE HAVE A=2C/(ZR-ZL) AND
  14973. C          B=-C(ZR+ZL)/(ZR-ZL)
  14974. C
  14975. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  14976. C          NONE
  14977. C
  14978. C       METHOD
  14979. C          THE TRANSFORMATION IS BASED ON THE RECURRENCE EQUATION
  14980. C          FOR HERMITE POLYNOMIALS H(N,X)
  14981. C          H(N+1,X)=2*(X*H(N,X)-N*H(N-1,X)),
  14982. C          WHERE THE FIRST TERM IN BRACKETS IS THE INDEX
  14983. C          THE SECOND IS THE ARGUMENT.
  14984. C          STARTING VALUES ARE H(0,X)=1,H(1,X)=2*X.
  14985. C          THE TRANSFORMATION IS IMPLICITLY DEFINED BY MEANS OF
  14986. C          X=A*Z+B TOGETHER WITH
  14987. C          SUM(POL(I)*Z**(I-1), SUMMED OVER I FROM 1 TO N)
  14988. C          =SUM(C(I)*H(I-1,X), SUMMED OVER I FROM 1 TO N).
  14989. C
  14990. C    ..................................................................
  14991. C
  14992.     SUBROUTINE THEP(A,B,POL,N,C,WORK)
  14993. C
  14994.     DIMENSION POL(1),C(1),WORK(1)
  14995. C
  14996. C       TEST OF DIMENSION
  14997.     IF(N-1)2,1,3
  14998. C
  14999. C       DIMENSION LESS THAN 2
  15000. 1    POL(1)=C(1)
  15001. 2    RETURN
  15002. C
  15003. 3    XD=A+A
  15004.     X0=B+B
  15005.     POL(1)=C(1)+C(2)*X0
  15006.     POL(2)=C(2)*XD
  15007.     IF(N-2)2,2,4
  15008. C
  15009. C       INITIALIZATION
  15010. 4    WORK(1)=1.
  15011.     WORK(2)=X0
  15012.     WORK(3)=0.
  15013.     WORK(4)=XD
  15014.     FI=2.
  15015. C
  15016. C       CALCULATE COEFFICIENT VECTOR OF NEXT HERMITE POLYNOMIAL
  15017. C       AND ADD MULTIPLE OF THIS VECTOR TO POLYNOMIAL POL
  15018.     DO 6 J=3,N
  15019.     P=0.
  15020. C
  15021.     DO 5 K=2,J
  15022.     H=P*XD+WORK(2*K-2)*X0-FI*WORK(2*K-3)
  15023.     P=WORK(2*K-2)
  15024.     WORK(2*K-2)=H
  15025.     WORK(2*K-3)=P
  15026. 5    POL(K-1)=POL(K-1)+H*C(J)
  15027.     WORK(2*J-1)=0.
  15028.     WORK(2*J)=P*XD
  15029.     FI=FI+2.
  15030. 6    POL(J)=C(J)*WORK(2*J)
  15031.     RETURN
  15032.     END
  15033. C
  15034. C    ..................................................................
  15035. C
  15036. C       SUBROUTINE TIE
  15037. C
  15038. C       PURPOSE
  15039. C          CALCULATE CORRECTION FACTOR DUE TO TIES
  15040. C
  15041. C       USAGE
  15042. C          CALL TIE(R,N,KT,T)
  15043. C
  15044. C       DESCRIPTION OF PARAMETERS
  15045. C          R  - INPUT VECTOR OF RANKS OF LENGTH N CONTAINING VALUES
  15046. C               1 TO N
  15047. C          N  - NUMBER OF RANKED VALUES
  15048. C          KT - INPUT CODE FOR CALCULATION OF CORRECTION FACTOR
  15049. C                     1   SOLVE EQUATION 1
  15050. C                     2   SOLVE EQUATION 2
  15051. C          T  - CORRECTION FACTOR (OUTPUT)
  15052. C                   EQUATION 1   T=SUM(CT**3-CT)/12
  15053. C                   EQUATION 2   T=SUM(CT*(CT-1)/2)
  15054. C                 WHERE CT IS THE NUMBER OF OBSERVATIONS TIED FOR A
  15055. C                       GIVEN RANK
  15056. C
  15057. C       REMARKS
  15058. C          NONE
  15059. C
  15060. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  15061. C          NONE
  15062. C
  15063. C       METHOD
  15064. C          VECTOR IS SEARCHED FOR SUCCESSIVELY LARGER RANKS. TIES ARE
  15065. C          COUNTED AND CORRECTION FACTOR 1 OR 2 SUMMED.
  15066. C
  15067. C    ..................................................................
  15068. C
  15069.     SUBROUTINE TIE(R,N,KT,T)
  15070.     DIMENSION R(1)
  15071. C
  15072. C       INITIALIZATION
  15073. C
  15074.     T=0.0
  15075.     Y=0.0
  15076. 5    X=1.0E38
  15077.     IND=0
  15078. C
  15079. C       FIND NEXT LARGEST RANK
  15080. C
  15081.     DO 30 I=1,N
  15082.     IF(R(I)-Y) 30,30,10
  15083. 10    IF(R(I)-X) 20,30,30
  15084. 20    X=R(I)
  15085.     IND=IND+1
  15086. 30    CONTINUE
  15087. C
  15088. C       IF ALL RANKS HAVE BEEN TESTED, RETURN
  15089. C
  15090.     IF(IND) 90,90,40
  15091. 40    Y=X
  15092.     CT=0.0
  15093. C
  15094. C       COUNT TIES
  15095. C
  15096.     DO 60 I=1,N
  15097.     IF(R(I)-X) 60,50,60
  15098. 50    CT=CT+1.0
  15099. 60    CONTINUE
  15100. C
  15101. C       CALCULATE CORRECTION FACTOR
  15102. C
  15103.     IF(CT) 70,5,70
  15104. 70    IF(KT-1) 75,80,75
  15105. 75    T=T+CT*(CT-1.)/2.0
  15106.     GO TO 5
  15107. 80    T=T+(CT*CT*CT-CT)/12.0
  15108.     GO TO 5
  15109. 90    RETURN
  15110.     END
  15111. C    RETURNS T VALUE CORRESPONDING TO GIVEN P
  15112. C    USES ZINV
  15113. C    ABRAMOWITZ 26.7.5
  15114.     FUNCTION TINV(P,N)
  15115.     REAL N4
  15116.     X=ZINV(P)
  15117.     N4=N*4
  15118.     X2=X*X
  15119.     TINV=X+((X2+1)+((3+X2*(16+5*X2))+(-15+X2*(17+
  15120.      A X2*(19+3*X2)))/N4)/N4/6.)/N4*X
  15121.     RETURN
  15122.     END
  15123. C
  15124. C
  15125. C    ..................................................................
  15126. C
  15127. C       SUBROUTINE TLAP
  15128. C
  15129. C       PURPOSE
  15130. C          A SERIES EXPANSION IN LAGUERRE POLYNOMIALS WITH INDEPENDENT
  15131. C          VARIABLE X IS TRANSFORMED TO A POLYNOMIAL WITH INDEPENDENT
  15132. C          VARIABLE Z, WHERE X=A*Z+B
  15133. C
  15134. C       USAGE
  15135. C          CALL TLAP(A,B,POL,N,C,WORK)
  15136. C
  15137. C       DESCRIPTION OF PARAMETERS
  15138. C          A     - FACTOR OF LINEAR TERM IN GIVEN LINEAR TRANSFORMATION
  15139. C          B     - CONSTANT TERM IN GIVEN LINEAR TRANSFORMATION
  15140. C          POL   - COEFFICIENT VECTOR OF POLYNOMIAL (RESULTANT VALUE)
  15141. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  15142. C          N     - DIMENSION OF COEFFICIENT VECTORS POL AND C
  15143. C          C     - GIVEN COEFFICIENT VECTOR OF EXPANSION
  15144. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  15145. C                  POL AND C MAY BE IDENTICALLY LOCATED
  15146. C          WORK  - WORKING STORAGE OF DIMENSION 2*N
  15147. C
  15148. C       REMARKS
  15149. C          COEFFICIENT VECTOR C REMAINS UNCHANGED IF NOT COINCIDING
  15150. C          WITH COEFFICIENT VECTOR POL.
  15151. C          OPERATION IS BYPASSED IN CASE N LESS THAN 1.
  15152. C          THE LINEAR TRANSFORMATION X=A*Z+B OR Z=(1/A)(X-B) TRANSFORMS
  15153. C          THE RANGE (0,C) IN X TO THE RANGE (ZL,ZR) IN Z, WHERE
  15154. C          ZL=-B/A AND ZR=(C-B)/A.
  15155. C          FOR GIVEN ZL, ZR AND C WE HAVE A=C/(ZR-ZL) AND
  15156. C          B=-C*ZL/(ZR-ZL)
  15157. C
  15158. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  15159. C          NONE
  15160. C
  15161. C       METHOD
  15162. C          THE TRANSFORMATION IS BASED ON THE RECURRENCE EQUATION
  15163. C          FOR LAGUERRE POLYNOMIALS L(N,X)
  15164. C          L(N+1,X)=2*L(N,X)-L(N-1,X)-((1+X)*L(N,X)-L(N-1,X))/(N+1),
  15165. C          WHERE THE FIRST TERM IN BRACKETS IS THE INDEX,
  15166. C          THE SECOND IS THE ARGUMENT.
  15167. C          STARTING VALUES ARE L(0,X)=1, L(1,X)=1-X.
  15168. C          THE TRANSFORMATION IS IMPLICITLY DEFINED BY MEANS OF
  15169. C          X=A*Z+B TOGETHER WITH
  15170. C          SUM(POL(I)*Z**(I-1), SUMMED OVER I FROM 1 TO N)
  15171. C          =SUM(C(I)*L(I-1,X), SUMMED OVER I FROM 1 TO N).
  15172. C
  15173. C    ..................................................................
  15174. C
  15175.     SUBROUTINE TLAP(A,B,POL,N,C,WORK)
  15176. C
  15177.     DIMENSION POL(1),C(1),WORK(1)
  15178. C
  15179. C       TEST OF DIMENSION
  15180.     IF(N-1)2,1,3
  15181. C
  15182. C       DIMENSION LESS THAN 2
  15183. 1    POL(1)=C(1)
  15184. 2    RETURN
  15185. C
  15186. 3    POL(1)=C(1)+C(2)-B*C(2)
  15187.     POL(2)=-C(2)*A
  15188.     IF(N-2)2,2,4
  15189. C
  15190. C       INITIALIZATION
  15191. 4    WORK(1)=1.
  15192.     WORK(2)=1.D0-B
  15193.     WORK(3)=0.
  15194.     WORK(4)=-A
  15195.     FI=1.
  15196. C
  15197. C       CALCULATE COEFFICIENT VECTOR OF NEXT LAGUERRE POLYNOMIAL
  15198. C       AND ADD MULTIPLE OF THIS VECTOR TO POLYNOMIAL POL
  15199.     DO 6 J=3,N
  15200.     FI=FI+1.
  15201.     Q=1./FI
  15202.     Q1=Q-1.
  15203.     Q2=1.-Q1-B*Q
  15204.     Q=Q*A
  15205.     P=0.
  15206. C
  15207.     DO 5 K=2,J
  15208.     H=-P*Q+WORK(2*K-2)*Q2+WORK(2*K-3)*Q1
  15209.     P=WORK(2*K-2)
  15210.     WORK(2*K-2)=H
  15211.     WORK(2*K-3)=P
  15212. 5    POL(K-1)=POL(K-1)+H*C(J)
  15213.     WORK(2*J-1)=0.
  15214.     WORK(2*J)=-Q*P
  15215. 6    POL(J)=C(J)*WORK(2*J)
  15216.     RETURN
  15217.     END
  15218. C
  15219. C    ..................................................................
  15220. C
  15221. C       SUBROUTINE TLEP
  15222. C
  15223. C       PURPOSE
  15224. C          A SERIES EXPANSION IN LEGENDRE POLYNOMIALS WITH INDEPENDENT
  15225. C          VARIABLE X IS TRANSFORMED TO A POLYNOMIAL WITH INDEPENDENT
  15226. C          VARIABLE Z, WHERE X=A*Z+B
  15227. C
  15228. C       USAGE
  15229. C          CALL TLEP(A,B,POL,N,C,WORK)
  15230. C
  15231. C       DESCRIPTION OF PARAMETERS
  15232. C          A     - FACTOR OF LINEAR TERM IN GIVEN LINEAR TRANSFORMATION
  15233. C          B     - CONSTANT TERM IN GIVEN LINEAR TRANSFORMATION
  15234. C          POL   - COEFFICIENT VECTOR OF POLYNOMIAL (RESULTANT VALUE)
  15235. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  15236. C          N     - DIMENSION OF COEFFICIENT VECTORS POL AND C
  15237. C          C     - GIVEN COEFFICIENT VECTOR OF EXPANSION
  15238. C                  COEFFICIENTS ARE ORDERED FROM LOW TO HIGH
  15239. C                  POL AND C MAY BE IDENTICALLY LOCATED
  15240. C          WORK  - WORKING STORAGE OF DIMENSION 2*N
  15241. C
  15242. C       REMARKS
  15243. C          COEFFICIENT VECTOR C REMAINS UNCHANGED IF NOT COINCIDING
  15244. C          WITH COEFFICIENT VECTOR POL.
  15245. C          OPERATION IS BYPASSED IN CASE N LESS THAN 1.
  15246. C          THE LINEAR TRANSFORMATION X=A*Z+B OR Z=(1/A)(X-B) TRANSFORMS
  15247. C          THE RANGE (-1,+1) IN X TO THE RANGE (ZL,ZR) IN Z, WHERE
  15248. C          ZL=-(1+B)/A AND ZR=(1-B)/A.
  15249. C          FOR GIVEN ZL, ZR WE HAVE A=2/(ZR-ZL) AND B=-(ZR+ZL)/(ZR-ZL)
  15250. C
  15251. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  15252. C          NONE
  15253. C
  15254. C       METHOD
  15255. C          THE TRANSFORMATION IS BASED ON THE RECURRENCE EQUATION
  15256. C          FOR LEGENDRE POLYNOMIALS P(N,X)
  15257. C          P(N+1,X)=2*X*P(N,X)-P(N-1,X)-(X*P(N,X)-P(N-1,X))/(N+1),
  15258. C          WHERE THE FIRST TERM IN BRACKETS IS THE INDEX,
  15259. C          THE SECOND IS THE ARGUMENT.
  15260. C          STARTING VALUES ARE P(0,X)=1, P(1,X)=X.
  15261. C          THE TRANSFORMATION IS IMPLICITLY DEFINED BY MEANS OF
  15262. C          X=A*Z+B TOGETHER WITH
  15263. C          SUM(POL(I)*Z**(I-1), SUMMED OVER I FROM 1 TO N)
  15264. C          =SUM(C(I)*P(I-1,X), SUMMED OVER I FROM 1 TO N).
  15265. C
  15266. C    ..................................................................
  15267. C
  15268.     SUBROUTINE TLEP(A,B,POL,N,C,WORK)
  15269. C
  15270.     DIMENSION POL(1),C(1),WORK(1)
  15271. C
  15272. C       TEST OF DIMENSION
  15273.     IF(N-1)2,1,3
  15274. C
  15275. C       DIMENSION LESS THAN 2
  15276. 1    POL(1)=C(1)
  15277. 2    RETURN
  15278. C
  15279. 3    POL(1)=C(1)+B*C(2)
  15280.     POL(2)=A*C(2)
  15281.     IF(N-2)2,2,4
  15282. C
  15283. C       INITIALIZATION
  15284. 4    WORK(1)=1.
  15285.     WORK(2)=B
  15286.     WORK(3)=0.
  15287.     WORK(4)=A
  15288.     FI=1.
  15289. C
  15290. C       CALCULATE COEFFICIENT VECTOR OF NEXT LEGENDRE POLYNOMIAL
  15291. C       AND ADD MULTIPLE OF THIS VECTOR TO POLYNOMIAL POL
  15292.     DO 6 J=3,N
  15293.     FI=FI+1.
  15294.     Q=1./FI-1.
  15295.     Q1=1.-Q
  15296.     P=0.
  15297. C
  15298.     DO 5 K=2,J
  15299.     H=(A*P+B*WORK(2*K-2))*Q1+Q*WORK(2*K-3)
  15300.     P=WORK(2*K-2)
  15301.     WORK(2*K-2)=H
  15302.     WORK(2*K-3)=P
  15303. 5    POL(K-1)=POL(K-1)+H*C(J)
  15304.     WORK(2*J-1)=0.
  15305.     WORK(2*J)=A*P*Q1
  15306. 6    POL(J)=C(J)*WORK(2*J)
  15307.     RETURN
  15308.     END
  15309. C
  15310. C    ..................................................................
  15311. C
  15312. C       SUBROUTINE TPRD
  15313. C
  15314. C       PURPOSE
  15315. C          TRANSPOSE A MATRIX AND POSTMULTIPLY BY ANOTHER TO FORM
  15316. C          A RESULTANT MATRIX
  15317. C
  15318. C       USAGE
  15319. C          CALL TPRD(A,B,R,N,M,MSA,MSB,L)
  15320. C
  15321. C       DESCRIPTION OF PARAMETERS
  15322. C          A - NAME OF FIRST INPUT MATRIX
  15323. C          B - NAME OF SECOND INPUT MATRIX
  15324. C          R - NAME OF OUTPUT MATRIX
  15325. C          N - NUMBER OF ROWS IN A AND B
  15326. C          M - NUMBER OF COLUMNS IN A AND ROWS IN R
  15327. C          MSA - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  15328. C                 0 - GENERAL
  15329. C                 1 - SYMMETRIC
  15330. C                 2 - DIAGONAL
  15331. C          MSB - SAME AS MSA EXCEPT FOR MATRIX B
  15332. C          L - NUMBER OF COLUMNS IN B AND R
  15333. C
  15334. C       REMARKS
  15335. C          MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRICES A OR B
  15336. C
  15337. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  15338. C          LOC
  15339. C
  15340. C       METHOD
  15341. C          MATRIX TRANSPOSE OF A IS NOT ACTUALLY CALCULATED. INSTEAD,
  15342. C          ELEMENTS IN MATRIX A ARE TAKEN COLUMNWISE RATHER THAN
  15343. C          ROWWISE FOR MULTIPLICATION BY MATRIX B.
  15344. C          THE FOLLOWING TABLE SHOWS THE STORAGE MODE OF THE OUTPUT
  15345. C          MATRIX FOR ALL COMBINATIONS OF INPUT MATRICES
  15346. C                        A                B                R
  15347. C                     GENERAL          GENERAL          GENERAL
  15348. C                     GENERAL          SYMMETRIC        GENERAL
  15349. C                     GENERAL          DIAGONAL         GENERAL
  15350. C                     SYMMETRIC        GENERAL          GENERAL
  15351. C                     SYMMETRIC        SYMMETRIC        GENERAL
  15352. C                     SYMMETRIC        DIAGONAL         GENERAL
  15353. C                     DIAGONAL         GENERAL          GENERAL
  15354. C                     DIAGONAL         SYMMETRIC        GENERAL
  15355. C                     DIAGONAL         DIAGONAL         DIAGONAL
  15356. C
  15357. C    ..................................................................
  15358. C
  15359.     SUBROUTINE TPRD(A,B,R,N,M,MSA,MSB,L)
  15360.     DIMENSION A(1),B(1),R(1)
  15361. C
  15362. C       SPECIAL CASE FOR DIAGONAL BY DIAGONAL
  15363. C
  15364.     MS=MSA*10+MSB
  15365.     IF(MS-22) 30,10,30
  15366. 10    DO 20 I=1,N
  15367. 20    R(I)=A(I)*B(I)
  15368.     RETURN
  15369. C
  15370. C       MULTIPLY TRANSPOSE OF A BY B
  15371. C
  15372. 30    IR=1
  15373.     DO 90 K=1,L
  15374.     DO 90 J=1,M
  15375.     R(IR)=0.0
  15376.     DO 80 I=1,N
  15377.     IF(MS) 40,60,40
  15378. 40    CALL LOC(I,J,IA,N,M,MSA)
  15379.     CALL LOC(I,K,IB,N,L,MSB)
  15380.     IF(IA) 50,80,50
  15381. 50    IF(IB) 70,80,70
  15382. 60    IA=N*(J-1)+I
  15383.     IB=N*(K-1)+I
  15384. 70    R(IR)=R(IR)+A(IA)*B(IB)
  15385. 80    CONTINUE
  15386. 90    IR=IR+1
  15387.     RETURN
  15388.     END
  15389. C
  15390. C    ..................................................................
  15391. C
  15392. C       SUBROUTINE TRACE
  15393. C
  15394. C       PURPOSE
  15395. C          COMPUTE CUMULATIVE PERCENTAGE OF EIGENVALUES GREATER THAN
  15396. C          OR EQUAL TO A CONSTANT SPECIFIED BY THE USER.  THIS SUB-
  15397. C          ROUTINE NORMALLY OCCURS IN A SEQUENCE OF CALLS TO SUB-
  15398. C          ROUTINES CORRE, EIGEN, TRACE, LOAD, AND VARMX IN THE PER-
  15399. C          FORMANCE OF A FACTOR ANALYSIS.
  15400. C
  15401. C       USAGE
  15402. C          CALL TRACE (M,R,CON,K,D)
  15403. C
  15404. C       DESCRIPTION OF PARAMETERS
  15405. C          M     - NUMBER OF VARIABLES. M MUST BE > OR = TO 1
  15406. C          R     - INPUT MATRIX (SYMMETRIC AND STORED IN COMPRESSED
  15407. C                  FORM WITH ONLY UPPER TRIANGLE BY COLUMN IN CORE)
  15408. C                  CONTAINING EIGENVALUES IN DIAGONAL.  EIGENVALUES ARE
  15409. C                  ARRANGED IN DESCENDING ORDER.  THE ORDER OF MATRIX R
  15410. C                  IS M BY M.  ONLY M*(M+1)/2 ELEMENTS ARE IN STORAGE.
  15411. C                  (STORAGE MODE OF 1)
  15412. C          CON   - A CONSTANT USED TO DECIDE HOW MANY EIGENVALUES TO
  15413. C                  RETAIN.  CUMULATIVE PERCENTAGE OF EIGENVALUES
  15414. C                  WHICH ARE GREATER THAN OR EQUAL TO THIS VALUE IS
  15415. C                  CALCULATED.
  15416. C          K     - OUTPUT VARIABLE CONTAINING THE NUMBER OF EIGENVALUES
  15417. C                  GREATER THAN OR EQUAL TO CON.  (K IS THE NUMBER OF
  15418. C                  FACTORS.)
  15419. C          D     - OUTPUT VECTOR OF LENGTH M CONTAINING CUMULATIVE
  15420. C                  PERCENTAGE OF EIGENVALUES WHICH ARE GREATER THAN
  15421. C                  OR EQUAL TO CON.
  15422. C       REMARKS
  15423. C          NONE
  15424. C
  15425. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  15426. C          NONE
  15427. C
  15428. C       METHOD
  15429. C          EACH EIGENVALUE GREATER THAN OR EQUAL TO CON IS DIVIDED BY M
  15430. C          AND THE RESULT IS ADDED TO THE PREVIOUS TOTAL TO OBTAIN
  15431. C          THE CUMULATIVE PERCENTAGE FOR EACH EIGENVALUE.
  15432. C
  15433. C    ..................................................................
  15434. C
  15435.     SUBROUTINE TRACE (M,R,CON,K,D)
  15436.     DIMENSION R(1),D(1)
  15437. C
  15438. C       ...............................................................
  15439. C
  15440. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  15441. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  15442. C       STATEMENT WHICH FOLLOWS.
  15443. C
  15444. C    DOUBLE PRECISION R,D
  15445. C
  15446. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  15447. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  15448. C       ROUTINE.
  15449. C
  15450. C       ...............................................................
  15451. C
  15452.     FM=M
  15453.     L=0
  15454.     DO 100 I=1,M
  15455.     L=L+I
  15456. 100    D(I)=R(L)
  15457.     K=0
  15458. C
  15459. C    TEST WHETHER I-TH EIGENVALUE IS GREATER
  15460. C    THAN OR EQUAL TO THE CONSTANT
  15461. C
  15462.     DO 110 I=1,M
  15463.     IF(D(I)-CON) 120, 105, 105
  15464. 105    K=K+1
  15465. 110    D(I)=D(I)/FM
  15466. C
  15467. C    COMPUTE CUMULATIVE PERCENTAGE OF EIGENVALUES
  15468. C
  15469. 120    DO 130 I=2,K
  15470. 130    D(I)=D(I)+D(I-1)
  15471.     RETURN
  15472.     END
  15473. C
  15474. C    ..................................................................
  15475. C
  15476. C       SUBROUTINE TTEST
  15477. C
  15478. C       PURPOSE
  15479. C          TO FIND CERTAIN T-STATISTICS ON THE MEANS OF POPULATIONS.
  15480. C
  15481. C       USAGE
  15482. C          CALL TTEST (A,NA,B,NB,NOP,NDF,ANS)
  15483. C
  15484. C       DESCRIPTION OF PARAMETERS
  15485. C          A   - INPUT VECTOR OF LENGTH NA CONTAINING DATA.
  15486. C          NA  - NUMBER OF OBSERVATIONS IN A.
  15487. C          B   - INPUT VECTOR OF LENGTH NB CONTAINING DATA.
  15488. C          NB  - NUMBER OF OBSERVATIONS IN B.
  15489. C          NOP - OPTIONS FOR VARIOUS HYPOTHESES..
  15490. C                NOP=1--- THAT POPULATION MEAN OF B = GIVEN VALUE A.
  15491. C                         (SET NA=1)
  15492. C                NOP=2--- THAT POPULATION MEAN OF B = POPULATION MEAN
  15493. C                         OF A, GIVEN THAT THE VARIANCE OF B = THE
  15494. C                         VARIANCE OF A.
  15495. C                NOP=3--- THAT POPULATION MEAN OF B = POPULATION MEAN
  15496. C                         OF A, GIVEN THAT THE VARIANCE OF B IS NOT
  15497. C                         EQUAL TO THE VARIANCE OF A.
  15498. C                NOP=4--- THAT POPULATION MEAN OF B = POPULATION MEAN
  15499. C                         OF A, GIVEN NO INFORMATION ABOUT VARIANCES OF
  15500. C                         A AND B.  (SET NA=NB)
  15501. C          NDF - OUTPUT VARIABLE CONTAINING DEGREES OF FREEDOM ASSOCI-
  15502. C                ATED WITH T-STATISTIC CALCULATED.
  15503. C          ANS - T-STATISTIC FOR GIVEN HYPOTHESIS.
  15504. C
  15505. C       REMARKS
  15506. C          NA AND NB MUST BE GREATER THAN 1, EXCEPT THAT NA=1 IN
  15507. C          OPTION 1. NA AND NB MUST BE THE SAME IN OPTION 4.
  15508. C          IF NOP IS OTHER THAN 1, 2, 3 OR 4, DEGREES OF FREEDOM AND
  15509. C          T-STATISTIC WILL NOT BE CALCULATED.  NDF AND ANS WILL BE
  15510. C          SET TO ZERO.
  15511. C
  15512. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  15513. C          NONE
  15514. C
  15515. C       METHOD
  15516. C          REFER TO OSTLE, BERNARD, 'STATISTICS IN RESEARCH', IOWA
  15517. C          STATE COLLEGE PRESS, 1954, CHAPTER 5.
  15518. C
  15519. C    ..................................................................
  15520. C
  15521.     SUBROUTINE TTEST (A,NA,B,NB,NOP,NDF,ANS)
  15522.     DIMENSION A(1),B(1)
  15523. C
  15524. C    INITIALIZATION
  15525. C
  15526.     NDF=0
  15527.     ANS=0.0
  15528. C
  15529. C    CALCULATE THE MEAN OF A
  15530. C
  15531.     AMEAN=0.0
  15532.     DO 110 I=1,NA
  15533. 110    AMEAN=AMEAN+A(I)
  15534.     FNA=NA
  15535.     AMEAN=AMEAN/FNA
  15536. C
  15537. C    CALCULATE THE MEAN OF B
  15538. C
  15539. 115    BMEAN=0.0
  15540.     DO 120 I=1,NB
  15541. 120    BMEAN=BMEAN+B(I)
  15542.     FNB=NB
  15543.     BMEAN=BMEAN/FNB
  15544. C
  15545.     IF(NOP-4) 122, 180, 200
  15546. 122    IF(NOP-1) 200, 135, 125
  15547. C
  15548. C    CALCULATE THE VARIANCE OF A
  15549. C
  15550. 125    SA2=0.0
  15551.     DO 130 I=1,NA
  15552. 130    SA2=SA2+(A(I)-AMEAN)**2
  15553.     SA2=SA2/(FNA-1.0)
  15554. C
  15555. C    CALCULATE THE VARIANCE OF B
  15556. C
  15557. 135    SB2=0.0
  15558.     DO 140 I=1,NB
  15559. 140    SB2=SB2+(B(I)-BMEAN)**2
  15560.     SB2=SB2/(FNB-1.0)
  15561. C
  15562.     GO TO (150,160,170), NOP
  15563. C
  15564. C       OPTION 1
  15565. C
  15566. 150    ANS=((BMEAN-AMEAN)/SQRT(SB2))*SQRT(FNB)
  15567.     NDF=NB-1
  15568.     GO TO 200
  15569. C
  15570. C       OPTION 2
  15571. C
  15572. 160    NDF=NA+NB-2
  15573.     FNDF=NDF
  15574.     S=SQRT(((FNA-1.0)*SA2+(FNB-1.0)*SB2)/FNDF)
  15575.     ANS=((BMEAN-AMEAN)/S)*(1.0/SQRT(1.0/FNA+1.0/FNB))
  15576.     GO TO 200
  15577. C
  15578. C       OPTION 3
  15579. C
  15580. 170    ANS=(BMEAN-AMEAN)/SQRT(SA2/FNA+SB2/FNB)
  15581.     A1=(SA2/FNA+SB2/FNB)**2
  15582.     A2=(SA2/FNA)**2/(FNA+1.0)+(SB2/FNB)**2/(FNB+1.0)
  15583.     NDF=A1/A2-2.0+0.5
  15584.     GO TO 200
  15585. C
  15586. C       OPTION 4
  15587. C
  15588. 180    SD=0.0
  15589.     D=BMEAN-AMEAN
  15590.     DO 190 I=1,NB
  15591. 190    SD=SD+(B(I)-A(I)-D)**2
  15592.     SD=SQRT(SD/(FNB-1.0))
  15593.     ANS=(D/SD)*SQRT(FNB)
  15594.     NDF=NB-1
  15595. C
  15596. 200    RETURN
  15597.     END
  15598. C
  15599. C    ..................................................................
  15600. C
  15601. C       SUBROUTINE TWOAV
  15602. C
  15603. C       PURPOSE
  15604. C          TEST WHETHER A NUMBER OF SAMPLES ARE FROM THE SAME
  15605. C          POPULATION BY THE FRIEDMAN TWO-WAY ANALYSIS OF VARIANCE TEST
  15606. C
  15607. C       USAGE
  15608. C          CALL TWOAV(A,R,N,M,W,XR,NDF,NR)
  15609. C
  15610. C       DESCRIPTION OF PARAMETERS
  15611. C          A   - INPUT MATRIX, N BY M, OF ORIGINAL DATA
  15612. C          R   - OUTPUT MATRIX, N BY M, OF RANKED DATA
  15613. C          N   - NUMBER OF GROUPS
  15614. C          M   - NUMBER OF CASES IN EACH GROUP
  15615. C          W   - WORK AREA OF LENGTH 2*M
  15616. C          XR  - FRIEDMAN STATISTIC (OUTPUT)
  15617. C          NDF - NUMBER OF DEGREES OF FREEDOM (OUTPUT)
  15618. C          NR  - CODE, 0 FOR UNRANKED DATA IN A, 1 FOR RANKED DATA
  15619. C                IN A (INPUT)
  15620. C
  15621. C       REMARKS
  15622. C          NONE
  15623. C
  15624. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  15625. C          RANK
  15626. C
  15627. C       METHOD
  15628. C          DESCRIBED IN S. SIEGEL, 'NONPARAMETRIC STATISTICS FOR THE
  15629. C          BEHAVIORAL SCIENCES', MCGRAW-HILL, NEW YORK, 1956,
  15630. C          CHAPTER 7
  15631. C
  15632. C    ..................................................................
  15633. C
  15634.     SUBROUTINE TWOAV (A,R,N,M,W,XR,NDF,NR)
  15635.     DIMENSION A(1),R(1),W(1)
  15636. C
  15637. C       DETERMINE WHETHER DATA IS RANKED
  15638. C
  15639.     IF(NR-1) 10, 30, 10
  15640. C
  15641. C       RANK DATA IN EACH GROUP AND ASSIGN TIED OBSERVATIONS AVERAGE
  15642. C       OF TIED RANK
  15643. C
  15644. 10    DO 20 I=1,N
  15645.     IJ=I-N
  15646.     IK=IJ
  15647.     DO 15 J=1,M
  15648.     IJ=IJ+N
  15649. 15    W(J)=A(IJ)
  15650.     CALL RANK (W,W(M+1),M)
  15651.     DO 20 J=1,M
  15652.     IK=IK+N
  15653.     IW=M+J
  15654. 20    R(IK)=W(IW)
  15655.     GO TO 35
  15656. 30    NM=N*M
  15657.     DO 32 I=1,NM
  15658. 32    R(I)=A(I)
  15659. C
  15660. C       CALCULATE SUM OF SQUARES OF SUMS OF RANKS
  15661. C
  15662. 35    RTSQ=0.0
  15663.     IR=0
  15664.     DO 50 J=1,M
  15665.     RT=0.0
  15666.     DO 40 I=1,N
  15667.     IR=IR+1
  15668. 40    RT=RT+R(IR)
  15669. 50    RTSQ=RTSQ+RT*RT
  15670. C
  15671. C       CALCULATE FRIEDMAN TEST VALUE, XR
  15672. C
  15673.     FNM=N*(M+1)
  15674.     FM=M
  15675.     XR=(12.0/(FM*FNM))*RTSQ-3.0*FNM
  15676. C
  15677. C       FIND DEGREES OF FREEDOM
  15678. C
  15679.     NDF=M-1
  15680.     RETURN
  15681.     END
  15682. C
  15683. C    ..................................................................
  15684. C
  15685. C       SUBROUTINE UTEST
  15686. C
  15687. C       PURPOSE
  15688. C          TEST WHETHER TWO INDEPENDENT GROUPS ARE FROM THE SAME
  15689. C          POPULATION BY MEANS OF MANN-WHITNEY U-TEST
  15690. C
  15691. C       USAGE
  15692. C          CALL UTEST(A,R,N1,N2,U,Z,IER)
  15693. C
  15694. C       DESCRIPTION OF PARAMETERS
  15695. C          A  - INPUT VECTOR OF CASES CONSISTING OF TWO INDEPENDENT
  15696. C               GROUPS . SMALLER GROUP PRECEDES LARGER GROUP. LENGTH
  15697. C               IS N1+N2.
  15698. C          R  - OUTPUT VECTOR OF RANKS. SMALLEST VALUE IS RANKED 1,
  15699. C               LARGEST IS RANKED N. TIES ARE ASSIGNED AVERAGE OF TIED
  15700. C               RANKS. LENGTH IS N1+N2.
  15701. C          N1 - NUMBER OF CASES IN SMALLER GROUP
  15702. C          N2 - NUMBER OF CASES IN LARGER GROUP
  15703. C          U  - STATISTIC USED TO TEST HOMOGENEITY OF THE TWO
  15704. C               GROUPS (OUTPUT)
  15705. C          Z  - MEASURE OF SIGNIFICANCE OF U IN TERMS OF NORMAL
  15706. C               DISTRIBUTION (OUTPUT)
  15707. C          IER- 0, IF NO ERROR.
  15708. C             - 1, IF ALL VALUES OF ONE GROUP ARE TIED.
  15709. C
  15710. C       REMARKS
  15711. C          Z IS SET TO ZERO IF N2 IS LESS THAN 20
  15712. C
  15713. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  15714. C          RANK
  15715. C          TIE
  15716. C
  15717. C       METHOD
  15718. C          DESCRIBED IN S. SIEGEL, 'NONPARAMETRIC STATISTICS FOR THE
  15719. C          BEHAVIORAL SCIENCES', MCGRAW-HILL, NEW YORK, 1956,
  15720. C          CHAPTER 6
  15721. C
  15722. C    ..................................................................
  15723. C
  15724.     SUBROUTINE UTEST(A,R,N1,N2,U,Z,IER)
  15725.     DIMENSION A(1),R(1)
  15726.     IER=0
  15727. C
  15728. C       RANK SCORES FROM BOTH GROUP TOGETHER IN ASCENDING ORDER, AND
  15729. C       ASSIGN TIED OBSERVATIONS AVERAGE OF TIED RANKS
  15730. C
  15731.     N=N1+N2
  15732.     CALL RANK(A,R,N)
  15733.     Z=0.0
  15734. C
  15735. C       SUM RANKS IN LARGER GROUP
  15736. C
  15737.     R2=0.0
  15738.     NP=N1+1
  15739.     DO 10 I=NP,N
  15740. 10    R2=R2+R(I)
  15741. C
  15742. C       CALCULATE U
  15743. C
  15744.     FNX=N1*N2
  15745.     FN=N
  15746.     FN2=N2
  15747.     UP=FNX+FN2*((FN2+1.0)/2.0)-R2
  15748.     U=FNX-UP
  15749.     IF(UP-U) 20,30,30
  15750. 20    U=UP
  15751. C
  15752. C       TEST FOR N2 LESS THAN 20
  15753. C
  15754. 30    IF(N2-20) 80,40,40
  15755. C
  15756. C       COMPUTE STANDARD DEVIATION
  15757. C
  15758. 40    KT=1
  15759.     CALL TIE(R,N,KT,TS)
  15760.     IF(TS) 50,60,50
  15761. 50    IF (TS-(FN*FN*FN-FN)/12)52,51,52
  15762. 51    IER=1
  15763.     GO TO 80
  15764. 52    S=SQRT((FNX/(FN*(FN-1.0)))*(((FN*FN*FN-FN)/12.0)-TS))
  15765.     GO TO 70
  15766. 60    S=SQRT(FNX*(FN+1.0)/12.0)
  15767. C
  15768. C       COMPUTE Z
  15769. C
  15770. 70    Z=(U-FNX*0.5)/S
  15771. 80    RETURN
  15772.     END
  15773. C
  15774. C    ..................................................................
  15775. C
  15776. C       SUBROUTINE VARMX
  15777. C
  15778. C       PURPOSE
  15779. C          PERFORM ORTHOGONAL ROTATIONS OF A FACTOR MATRIX.  THIS
  15780. C          SUBROUTINE NORMALLY OCCURS IN A SEQUENCE OF CALLS TO SUB-
  15781. C          ROUTINES CORRE, EIGEN, TRACE, LOAD, VARMX IN THE PERFORMANCE
  15782. C          OF A FACTOR ANALYSIS.
  15783. C
  15784. C       USAGE
  15785. C          CALL VARMX (M,K,A,NC,TV,H,F,D,IER)
  15786. C
  15787. C       DESCRIPTION OF PARAMETERS
  15788. C          M     - NUMBER OF VARIABLES AND NUMBER OF ROWS OF MATRIX A.
  15789. C          K     - NUMBER OF FACTORS.
  15790. C          A     - INPUT IS THE ORIGINAL FACTOR MATRIX, AND OUTPUT IS
  15791. C                  THE ROTATED FACTOR MATRIX.  THE ORDER OF MATRIX A
  15792. C                  IS M X K.
  15793. C          NC    - OUTPUT VARIABLE CONTAINING THE NUMBER OF ITERATION
  15794. C                  CYCLES PERFORMED.
  15795. C          TV    - OUTPUT VECTOR CONTAINING THE VARIANCE OF THE FACTOR
  15796. C                  MATRIX FOR EACH ITERATION CYCLE.  THE VARIANCE PRIOR
  15797. C                  TO THE FIRST ITERATION CYCLE IS ALSO CALCULATED.
  15798. C                  THIS MEANS THAT NC+1 VARIANCES ARE STORED IN VECTOR
  15799. C                  TV.  MAXIMUM NUMBER OF ITERATION CYCLES ALLOWED IN
  15800. C                  THIS SUBROUTINE IS 50.  THEREFORE, THE LENGTH OF
  15801. C                  VECTOR TV IS 51.
  15802. C          H     - OUTPUT VECTOR OF LENGTH M CONTAINING THE ORIGINAL
  15803. C                  COMMUNALITIES.
  15804. C          F     - OUTPUT VECTOR OF LENGTH M CONTAINING THE FINAL
  15805. C                  COMMUNALITIES.
  15806. C          D     - OUTPUT VECTOR OF LENGTH M CONTAINING THE DIFFERENCES
  15807. C                  BETWEEN THE ORIGINAL AND FINAL COMMUNALITIES.
  15808. C          IER   - ERROR INDICATOR
  15809. C                  IER=0 - NO ERROR
  15810. C                  IER=1 - CONVERGENCE WAS NOT ACHIEVED IN 50 CYCLES
  15811. C                          OF ROTATION
  15812. C
  15813. C       REMARKS
  15814. C          IF VARIANCE COMPUTED AFTER EACH ITERATION CYCLE DOES NOT
  15815. C          INCREASE FOR FOUR SUCCESSIVE TIMES, THE SUBROUTINE STOPS
  15816. C          ROTATION.
  15817. C
  15818. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  15819. C          NONE
  15820. C
  15821. C       METHOD
  15822. C          KAISER'S VARIMAX ROTATION AS DESCRIBED IN 'COMPUTER PROGRAM
  15823. C          FOR VARIMAX ROTATION IN FACTOR ANALYSIS' BY THE SAME AUTHOR,
  15824. C          EDUCATIONAL AND PSYCHOLOGICAL MEASUREMENT, VOL XIX, NO. 3,
  15825. C          1959.
  15826. C
  15827. C    ..................................................................
  15828. C
  15829.     SUBROUTINE VARMX (M,K,A,NC,TV,H,F,D,IER)
  15830.     DIMENSION A(1),TV(1),H(1),F(1),D(1)
  15831. C
  15832. C       ...............................................................
  15833. C
  15834. C       IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  15835. C       C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  15836. C
  15837. C    DOUBLE PRECISION A,TV,H,F,D,TVLT,CONS,AA,BB,CC,DD,U,T,B,COS4T,
  15838. C    1                 SIN4T,TAN4T,SINP,COSP,CTN4T,COS2T,SIN2T,COST,SINT
  15839. C
  15840. C       THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  15841. C       APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  15842. C       ROUTINE.
  15843. C
  15844. C       THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO
  15845. C       CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS.  SQRT IN STATEMENTS
  15846. C       115, 290, 330, 350, AND 355 MUST BE CHANGED TO DSQRT.  ABS IN
  15847. C       STATEMENTS 280, 320, AND 375 MUST BE CHANGED TO DABS.
  15848. C
  15849. C       ...............................................................
  15850. C
  15851. C    INITIALIZATION
  15852. C
  15853.     IER=0
  15854.     EPS=0.00116
  15855.     TVLT=0.0
  15856.     LL=K-1
  15857.     NV=1
  15858.     NC=0
  15859.     FN=M
  15860.     FFN=FN*FN
  15861.     CONS=0.7071066
  15862. C
  15863. C    CALCULATE ORIGINAL COMMUNALITIES
  15864. C
  15865.     DO 110 I=1,M
  15866.     H(I)=0.0
  15867.     DO 110 J=1,K
  15868.     L=M*(J-1)+I
  15869. 110    H(I)=H(I)+A(L)*A(L)
  15870. C
  15871. C    CALCULATE NORMALIZED FACTOR MATRIX
  15872. C
  15873.     DO 120 I=1,M
  15874. 115    H(I)= SQRT(H(I))
  15875.     DO 120 J=1,K
  15876.     L=M*(J-1)+I
  15877. 120    A(L)=A(L)/H(I)
  15878.     GO TO 132
  15879. C
  15880. C    CALCULATE VARIANCE FOR FACTOR MATRIX
  15881. C
  15882. 130    NV=NV+1
  15883.     TVLT=TV(NV-1)
  15884. 132    TV(NV)=0.0
  15885.     DO 150 J=1,K
  15886.     AA=0.0
  15887.     BB=0.0
  15888.     LB=M*(J-1)
  15889.     DO 140 I=1,M
  15890.     L=LB+I
  15891.     CC=A(L)*A(L)
  15892.     AA=AA+CC
  15893. 140    BB=BB+CC*CC
  15894. 150    TV(NV)=TV(NV)+(FN*BB-AA*AA)/FFN
  15895.     IF(NV-51)160,155,155
  15896. 155    IER=1
  15897.     GO TO 430
  15898. C
  15899. C    PERFORM CONVERGENCE TEST
  15900. C
  15901. 160    IF((TV(NV)-TVLT)-(1.E-7)) 170, 170, 190
  15902. 170    NC=NC+1
  15903.     IF(NC-3) 190, 190, 430
  15904. C
  15905. C    ROTATION OF TWO FACTORS CONTINUES UP TO
  15906. C    THE STATEMENT 120.
  15907. C
  15908. 190    DO 420 J=1,LL
  15909.     L1=M*(J-1)
  15910.     II=J+1
  15911. C
  15912. C       CALCULATE NUM AND DEN
  15913. C
  15914.     DO 420 K1=II,K
  15915.     L2=M*(K1-1)
  15916.     AA=0.0
  15917.     BB=0.0
  15918.     CC=0.0
  15919.     DD=0.0
  15920.     DO 230 I=1,M
  15921.     L3=L1+I
  15922.     L4=L2+I
  15923.     U=(A(L3)+A(L4))*(A(L3)-A(L4))
  15924.     T=A(L3)*A(L4)
  15925.     T=T+T
  15926.     CC=CC+(U+T)*(U-T)
  15927.     DD=DD+2.0*U*T
  15928.     AA=AA+U
  15929. 230    BB=BB+T
  15930.     T=DD-2.0*AA*BB/FN
  15931.     B=CC-(AA*AA-BB*BB)/FN
  15932. C
  15933. C       COMPARISON OF NUM AND DEN
  15934. C
  15935.     IF(T-B) 280, 240, 320
  15936. 240    IF((T+B)-EPS) 420, 250, 250
  15937. C
  15938. C       NUM + DEN IS GREATER THAN OR EQUAL TO THE
  15939. C       TOLERANCE FACTOR
  15940. C
  15941. 250    COS4T=CONS
  15942.     SIN4T=CONS
  15943.     GO TO 350
  15944. C
  15945. C       NUM IS LESS THAN DEN
  15946. C
  15947. 280    TAN4T= ABS(T)/ ABS(B)
  15948.     IF(TAN4T-EPS) 300, 290, 290
  15949. 290    COS4T=1.0/ SQRT(1.0+TAN4T*TAN4T)
  15950.     SIN4T=TAN4T*COS4T
  15951.     GO TO 350
  15952. 300    IF(B) 310, 420, 420
  15953. 310    SINP=CONS
  15954.     COSP=CONS
  15955.     GO TO 400
  15956. C
  15957. C       NUM IS GREATER THAN DEN
  15958. C
  15959. 320    CTN4T= ABS(T/B)
  15960.     IF(CTN4T-EPS) 340, 330, 330
  15961. 330    SIN4T=1.0/ SQRT(1.0+CTN4T*CTN4T)
  15962.     COS4T=CTN4T*SIN4T
  15963.     GO TO 350
  15964. 340    COS4T=0.0
  15965.     SIN4T=1.0
  15966. C
  15967. C       DETERMINE COS THETA AND SIN THETA
  15968. C
  15969. 350    COS2T= SQRT((1.0+COS4T)/2.0)
  15970.     SIN2T=SIN4T/(2.0*COS2T)
  15971. 355    COST= SQRT((1.0+COS2T)/2.0)
  15972.     SINT=SIN2T/(2.0*COST)
  15973. C
  15974. C       DETERMINE COS PHI AND SIN PHI
  15975. C
  15976.     IF(B) 370, 370, 360
  15977. 360    COSP=COST
  15978.     SINP=SINT
  15979.     GO TO 380
  15980. 370    COSP=CONS*COST+CONS*SINT
  15981. 375    SINP= ABS(CONS*COST-CONS*SINT)
  15982. 380    IF(T) 390, 390, 400
  15983. 390    SINP=-SINP
  15984. C
  15985. C       PERFORM ROTATION
  15986. C
  15987. 400    DO 410 I=1,M
  15988.     L3=L1+I
  15989.     L4=L2+I
  15990.     AA=A(L3)*COSP+A(L4)*SINP
  15991.     A(L4)=-A(L3)*SINP+A(L4)*COSP
  15992. 410    A(L3)=AA
  15993. 420    CONTINUE
  15994.     GO TO 130
  15995. C
  15996. C    DENORMALIZE VARIMAX LOADINGS
  15997. C
  15998. 430    DO 440 I=1,M
  15999.     DO 440 J=1,K
  16000.     L=M*(J-1)+I
  16001. 440    A(L)=A(L)*H(I)
  16002. C
  16003. C    CHECK ON COMMUNALITIES
  16004. C
  16005.     NC=NV-1
  16006.     DO 450 I=1,M
  16007. 450    H(I)=H(I)*H(I)
  16008.     DO 470 I=1,M
  16009.     F(I)=0.0
  16010.     DO 460 J=1,K
  16011.     L=M*(J-1)+I
  16012. 460    F(I)=F(I)+A(L)*A(L)
  16013. 470    D(I)=H(I)-F(I)
  16014.     RETURN
  16015.     END
  16016. C
  16017. C    ..................................................................
  16018. C
  16019. C       SUBROUTINE WTEST
  16020. C
  16021. C       PURPOSE
  16022. C          TEST DEGREE OF ASSOCIATION AMONG A NUMBER OF VARIABLES BY
  16023. C          THE KENDALL COEFFICIENT OF CONCORDANCE
  16024. C
  16025. C       USAGE
  16026. C          CALL WTEST(A,R,N,M,WA,W,CS,NDF,NR)
  16027. C
  16028. C       DESCRIPTION OF PARAMETERS
  16029. C          A   - INPUT MATRIX, N BY M, OF ORIGINAL DATA
  16030. C          R   - OUTPUT MATRIX, N BY M, OF RANKED DATA.SMALLEST VALUE
  16031. C                IS RANKED 1, LARGEST IS RANKED N. TIES ARE ASSIGNED
  16032. C                AVERAGE OF TIED RANKS
  16033. C          N   - NUMBER OF VARIABLES
  16034. C          M   - NUMBER OF CASES
  16035. C          WA  - WORK AREA VECTOR OF LENGTH 2*M
  16036. C          W   - KENDALL COEFFICIENT OF CONCORDANCE(OUTPUT)
  16037. C          CS  - CHI-SQUARE (OUTPUT)
  16038. C          NDF - NUMBER OF DEGREES OF FREEDOM (OUTPUT)
  16039. C          NR  - CODE, 0 FOR UNRANKED DATA IN A, 1 FOR RANKED DATA
  16040. C                IN A (INPUT)
  16041. C
  16042. C       REMARKS
  16043. C          CHI-SQUARE IS SET TO ZERO IF M IS 7 OR SMALLER
  16044. C
  16045. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  16046. C          RANK
  16047. C          TIE
  16048. C
  16049. C       METHOD
  16050. C          DESCRIBED IN S. SIEGEL, 'NONPARAMETRIC STATISTICS FOR THE
  16051. C          BEHAVIORAL SCIENCES', MCGRAW-HILL, NEW YORK, 1956,
  16052. C          CHAPTER 9
  16053. C    ..................................................................
  16054. C
  16055. C
  16056.     SUBROUTINE WTEST (A,R,N,M,WA,W,CS,NDF,NR)
  16057.     DIMENSION A(1),R(1),WA(1)
  16058. C
  16059.     FM=M
  16060.     FN=N
  16061. C
  16062. C       DETERMINE WHETHER DATA IS RANKED
  16063. C       RANK DATA FOR ALL VARIABLES ASSIGNING TIED OBSERVATIONS AVERAGE
  16064. C       OF TIED RANKS AND COMPUTE CORRECTION FOR TIED SCORES
  16065. C
  16066.     T=0.0
  16067.     KT=1
  16068.     DO 20 I=1,N
  16069.     IJ=I-N
  16070.     IK=IJ
  16071.     IF(NR-1) 5,2,5
  16072. 2    DO 3 J=1,M
  16073.     IJ=IJ+N
  16074.     K=M+J
  16075. 3    WA(K)=A(IJ)
  16076.     GO TO 15
  16077. 5    DO 10 J=1,M
  16078.     IJ=IJ+N
  16079. 10    WA(J)=A(IJ)
  16080.     CALL RANK(WA,WA(M+1),M)
  16081. 15    CALL TIE(WA(M+1),M,KT,TI)
  16082.     T=T+TI
  16083.     DO 20 J=1,M
  16084.     IK=IK+N
  16085.     IW=M+J
  16086. 20    R(IK)=WA(IW)
  16087. C
  16088. C       CALCULATE VECTOR OF SUMS OF RANKS
  16089. C
  16090.     IR=0
  16091.     DO 40 J=1,M
  16092.     WA(J)=0.0
  16093.     DO 40 I=1,N
  16094.     IR=IR+1
  16095. 40    WA(J)=WA(J)+R(IR)
  16096. C
  16097. C       COMPUTE MEAN OF SUMS OF RANKS
  16098. C
  16099.     SM=0.0
  16100.     DO 50 J=1,M
  16101. 50    SM=SM+WA(J)
  16102.     SM=SM/FM
  16103. C
  16104. C       COMPUTE SUM OF SQUARES OF DEVIATIONS
  16105. C
  16106.     S=0.0
  16107.     DO 60 J=1,M
  16108. 60    S=S+(WA(J)-SM)*(WA(J)-SM)
  16109. C
  16110. C       COMPUTE W
  16111. C
  16112.     W=S/(((FN*FN)*(FM*FM*FM-FM)/12.0)-FN*T)
  16113. C
  16114. C       COMPUTE DEGREES OF FREEDOM AND CHI-SQUARE IF M IS OVER 7
  16115. C
  16116.     CS=0.0
  16117.     NDF=0
  16118.     IF(M-7) 70,70,65
  16119. 65    CS=FN*(FM-1.0)*W
  16120.     NDF=M-1
  16121. 70    RETURN
  16122.     END
  16123. C
  16124. C    ..................................................................
  16125. C
  16126. C       SUBROUTINE XCPY
  16127. C
  16128. C       PURPOSE
  16129. C          COPY A PORTION OF A MATRIX
  16130. C
  16131. C       USAGE
  16132. C          CALL XCPY(A,R,L,K,NR,MR,NA,MA,MS)
  16133. C
  16134. C       DESCRIPTION OF PARAMETERS
  16135. C          A  - NAME OF INPUT MATRIX
  16136. C          R  - NAME OF OUTPUT MATRIX
  16137. C          L  - ROW OF A WHERE FIRST ELEMENT OF R CAN BE FOUND
  16138. C          K  - COLUMN OF A WHERE FIRST ELEMENT OF R CAN BE FOUND
  16139. C          NR - NUMBER OF ROWS TO BE COPIED INTO R
  16140. C          MR - NUMBER OF COLUMNS TO BE COPIED INTO R
  16141. C          NA - NUMBER OF ROWS IN A
  16142. C          MA - NUMBER OF COLUMNS IN A
  16143. C          MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
  16144. C                 0 - GENERAL
  16145. C                 1 - SYMMETRIC
  16146. C                 2 - DIAGONAL
  16147. C
  16148. C       REMARKS
  16149. C          MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRIX A
  16150. C          MATRIX R IS ALWAYS A GENERAL MATRIX
  16151. C
  16152. C       SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  16153. C          LOC
  16154. C
  16155. C       METHOD
  16156. C          MATRIX R IS FORMED BY COPYING A PORTION OF MATRIX A. THIS
  16157. C          IS DONE BY EXTRACTING NR ROWS AND MR COLUMNS OF MATRIX A,
  16158. C          STARTING WITH ELEMENT AT ROW L, COLUMN K
  16159. C
  16160. C    ..................................................................
  16161. C
  16162.     SUBROUTINE XCPY(A,R,L,K,NR,MR,NA,MA,MS)
  16163.     DIMENSION A(1),R(1)
  16164. C
  16165. C       INITIALIZE
  16166. C
  16167.     IR=0
  16168.     L2=L+NR-1
  16169.     K2=K+MR-1
  16170. C
  16171.     DO 5 J=K,K2
  16172.     DO 5 I=L,L2
  16173.     IR=IR+1
  16174.     R(IR)=0.0
  16175. C
  16176. C       LOCATE ELEMENT FOR ANY MATRIX STORAGE MODE
  16177. C
  16178.     CALL LOC(I,J,IA,NA,MA,MS)
  16179. C
  16180. C       TEST FOR ZERO ELEMENT IN DIAGONAL MATRIX
  16181. C
  16182.     IF(IA) 4,5,4
  16183. 4    R(IR)=A(IA)
  16184. 5    CONTINUE
  16185.     RETURN
  16186.     END
  16187. C  DECEMBER   09    1974
  16188. C    GIVES AREA UNDER NORMAL DISTRIBUTION CURVE
  16189. C    FOR PROBABILITY P
  16190. C    ABRANOWITZ  26.2.23
  16191.     FUNCTION ZINV(P)
  16192.     T=SQRT(ALOG(1./(P*P)))
  16193.     ZINV=T-(2.515517+T*(0.802853+T*0.010328))/(1.+T
  16194.      * *(1.432788+T*(0.189269+T*0.001308)))
  16195.     RETURN
  16196.     END
  16197.