home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol269 / regrs2.for < prev    next >
Encoding:
Text File  |  1986-05-22  |  10.4 KB  |  214 lines

  1. C [REGRS2.FOR]
  2. C
  3.       PROGRAM    REGRS2
  4. C                            85-03-21
  5. C    ** Scatter Diagram for Residuals **
  6. C
  7. C    Written by Yoshio MONMA (JUG-CP/M N.43)
  8. C
  9. C        This program must be executed immediately after REGRS1 (REG1.COM).
  10. C     Before you adopt the results of REGRS1, you should examine carefully
  11. C     the output from this program.
  12. C
  13. C     This program is good for EPSON's RP-80 Printer.  To apply other
  14. C     types of printer, you should modify BIGCHR and GRAPH1.
  15.  
  16.       REAL*4       CMNT(18),X(100,16),S(16,16)
  17.       REAL*4       YEST(100),RES(100)
  18.       REAL*4       YL1(100),YL2(100),YU1(100),YU2(100)
  19.       REAL*8       SAMP
  20. C
  21. C                * Restore the saved data
  22.       REWIND 10
  23.       READ(10) IN,JPY,IRES,JGRH
  24.       READ(10) CMNT,SAMP
  25.       DO 90 J=1,JPY
  26.         READ(10) (X(I,J),I=1,IN)
  27.    90 CONTINUE
  28.       JP = JPY-1
  29.       JPY1 = JPY+1
  30.       READ(10) S(JPY1,JPY),(S(J,JPY),J=1,JP)
  31.       IF (IRES.NE.1) GOTO 92
  32.       WRITE(1,1199)
  33.  1199   FORMAT(1H ,'*** Error: IRES = 1')
  34.       STOP
  35.    92 DO 94 I=1,IN
  36.     READ(10) YEST(I),RES(I),YL2(I),YL1(I),YU1(I),YU2(I)
  37.    94 CONTINUE
  38. C
  39.       WRITE(1,1200) SAMP
  40.  1200   FORMAT(1H ,'* REGRS2: Sample = ',A8)
  41.       CALL BIGCHR(80,SAMP,2)
  42.       WRITE(2,1040) CMNT
  43.  1040   FORMAT(1H ,5X,18A4)
  44.       WRITE(2,2090)
  45.  2090   FORMAT(1H0,10X,'* Scatter Diagram: X-Axis = Y(est),',
  46.      1       ' Y-Axis = Residuals *'/)                                  
  47.       CALL MINMAX(YEST,IN,YMIN,YMAX)                                    
  48.       CALL MINMAX(RES,IN,RMIN,RMAX)                                     
  49.       CALL GRAPH1(YEST,1,'Estimate',YMIN,YMAX,RES,1,'Residual',         
  50.      1           RMIN,RMAX,IN)                                     
  51.       IF (JGRH.NE.1)                    GOTO 100
  52. C                                                                       
  53.       DO 100 J=1,JP                                                     
  54.          WRITE(2,1100)
  55.  1100      FORMAT(1H1)
  56.          CALL BIGCHR(80,SAMP,2)
  57.          WRITE(2,1040) CMNT
  58.          WRITE(2,2100) J                                                 
  59.  2100      FORMAT(1H0,10X,'* Scatter Diagram: X-Axis = X(',I2,'), ',       
  60.      1          'Y-axis = Residual *'/)                                  
  61.          DO 95 I=1,IN                                                   
  62.             YEST(I) = X(I,J)                                            
  63.    95   CONTINUE                                                        
  64.          CALL MINMAX(YEST,IN,YMIN,YMAX)                                 
  65.          CALL GRAPH1(YEST,1,'  X(J)  ',YMIN,YMAX,RES,1,'Residual', 
  66.      1               RMIN,RMAX,IN)                                 
  67.   100 CONTINUE                                                          
  68.       WRITE(2,1100)
  69.       STOP
  70.       E N D                                                             
  71.       SUBROUTINE   BIGCHR(VPOS,STRING,MODE)
  72. C
  73. C    * Print STRING in Enlarged Mode at VPOS *
  74. C
  75. C    Written by Yoshio MONMA on 85-03-20
  76. C
  77. C     Arguments:
  78. C        VPOS      Vertical position
  79. C        STRING    Character string (A8), must be given in exact length
  80. C        MODE       Mode to be set after the printing STRING
  81. C             = 0  Standard (Pica, 10char/inch)
  82. C             = 1  Elite (Elite, 12char/inch) 
  83. C             = 2  Condensed (15char/inch)
  84. C
  85. C    This routine is for EPSON RP-80 Printer.
  86. C
  87.       INTEGER*1    BIGM,ESC,LETF,NUL,SI,SO
  88.       INTEGER*1    VPOS
  89.       REAL*8       STRING
  90. C
  91.       DATA         ESC/Z'1B'/,  NUL/'00'/, SI/Z'0F'/, SO/Z'0E'/
  92.       DATA         BIGM/Z'4D'/, LETF/Z'66'/
  93. C
  94.       WRITE(2,200) ESC,LETF,NUL,VPOS,SO,STRING
  95.   200   FORMAT(1H ,5A1,A8)
  96.       IF (MODE.EQ.1) WRITE(2,210) ESC,BIGM
  97.   210   FORMAT(1H ,2A1)
  98.       IF (MODE.EQ.2) WRITE(2,210) SI
  99.       RETURN
  100.       END
  101.       SUBROUTINE   MINMAX(A,N,AMIN,AMAX)
  102. C
  103. C     * Minimum and Maximum value of Vector *
  104. C
  105. C     * Reference, T.Haga & S.Hashinoto: ó╢▓╖╠▐▌╛╖ ─ ╝¡╛▓╠▐▌╠▐▌╛╖ú, P.20
  106. C
  107.       REAL*4       A(1)
  108. C
  109.       AMIN = A(1)
  110.       AMAX = A(1)
  111. C
  112.       DO 10 I=1,N
  113.          IF (A(I).LT.AMIN) AMIN = A(I)
  114.          IF (A(I).GT.AMAX) AMAX = A(I)
  115.    10 CONTINUE
  116. C
  117.       RETURN
  118.       END
  119.       SUBROUTINE   GRAPH1(X,LX,XAXIS,XMIN,XMAX,                         
  120.      1                    Y,LY,YAXIS,YMIN,YMAX,N)                  
  121. C                                                                       
  122. C     ** Scatter Diagram with Marks **                                  
  123. C                                                                       
  124. C     * Arguments                                                       
  125. C     X,Y          The data
  126. C     LX,LY        Every LX,LY of X,Y are plotted
  127. C     XAXIS,YAXIS  Heading for X-Axis and Y-Axis (A8)                   
  128. C     XMIN,XMAX    Min. and max. of X
  129. C     YMIN,YMAX    Min. and max. of Y
  130. C     N            No. of data points to be plotted (N <= 100)
  131. C                                                                       
  132. C     * Reference, T.Haga & S.Hashimoto: ó╢▓╖╠▐▌╛╖ ─ ╝¡╛▓╠▐▌╠▐▌╛╖ú, P.56  
  133. C                                                                       
  134.       INTEGER*1    HSP,HX,HY,HP(37,101),HMARK(100),HM(100)
  135.       REAL*4       SCALE(11),X(LX,1),Y(LY,1)
  136.       REAL*8       XAXIS,YAXIS
  137. C
  138.       DATA       IY,IX,LL,MM /37,101,11,100/
  139.       DATA         MM,HSP,HX,HY /100,' ','-','+'/                        
  140.       DATA   HMARK/'1','2','3','4','5','6','7','8','9','0','A','B','C', 
  141.      1             'D','E','F','G','H','I','J','K','L','M','N','O','P', 
  142.      2             'Q','R','S','T','U','V','W','X','Y','Z','a','b','c',
  143.      3           'd','e','f','g','h','i','j','k','l','m','n','o','p',
  144.      4           'q','r','s','t','u','v','w','x','y','z','#','$','%',
  145.      5           '&','?','@','\','▒','▓','│','┤','╡','╢','╖','╕','╣',
  146.      6           '║','╗','╝','╜','╛','┐','└','┴','┬','├','─','┼','╞',
  147.      7           '╟','╚','╔','╩','╦','╠','═','╬','╧'/
  148. C
  149. C                * Get the unit scale
  150.       DX = (XMAX-XMIN)/FLOAT(IX-1)                                      
  151.       DY = (YMAX-YMIN)/FLOAT(IY-1)                                      
  152. C                                                                       
  153. C                * Fill spaces
  154.       DO 20 I=1,IY                                                      
  155.          DO 10 J=1,IX                                                   
  156.             HP(I,J) = HSP                                               
  157.    10    CONTINUE                                                       
  158.    20 CONTINUE                                                          
  159. C                                                                       
  160.       DO 30 K=1,N                                                       
  161.          I = (YMAX-Y(1,K))/DY+1.5                                       
  162.          J = (X(1,K)-XMIN)/DX+1.5                                       
  163.          IF (I.LT.1) I = 1                                              
  164.          IF (I.GT.IY) I = IY                                            
  165.          IF (J.LT.1) J = 1                                              
  166.          IF (J.GT.IX) J = IX                                            
  167.          M = MOD(K-1,MM)+1                                              
  168.          IF (HP(I,J).EQ.HSP) HP(I,J) = HMARK(M)                         
  169.          HM(K) = HP(I,J)                                                
  170.    30 CONTINUE                                                          
  171. C            * Coordinates
  172.       IF (XMIN*XMAX.GT.0)               GOTO 50                         
  173.       J = -XMIN/DX+1.5                                                  
  174.       DO 40 I=1,IY                                                      
  175.          IF (HP(I,J).EQ.HSP) HP(I,J) = HY                               
  176.    40 CONTINUE                                                          
  177.    50 IF (YMIN*YMAX.GT.0.0)             GOTO 70                         
  178.       I = YMAX/DY+1.5                                                   
  179.       DO 60 J=1,IX                                                      
  180.          IF (HP(I,J).EQ.HSP) HP(I,J) = HX                               
  181.    60 CONTINUE                                                          
  182. C                                                                       
  183.    70 DX = 10.0*DX                                                      
  184.       SCALE(1) = XMIN                                                   
  185.       DO 80 J=2,LL                                                      
  186.          SCALE(J) = SCALE(J-1)+DX                                       
  187.    80 CONTINUE                                                          
  188.       WRITE(2,200) (SCALE(J),J=1,LL)                                    
  189.       YW = YMAX                                                         
  190.       WRITE(2,220) YAXIS                                              
  191.       DO 90 I=1,IY                                                      
  192.          WRITE(2,250) YW,(HP(I,J),J=1,IX),YW                          
  193.          YW = YW-DY                                                     
  194.    90 CONTINUE                                                          
  195.       WRITE(2,220) YAXIS                                              
  196.       WRITE(2,200) (SCALE(J),J=1,LL)                                    
  197.       WRITE(2,265) XAXIS                                                
  198. C                                                                       
  199.       K2 = 0                                                            
  200.   100 K1 = K2+1                                                         
  201.       K2 = K2+40                                                        
  202.       IF (K2.GT.N) K2 = N                                               
  203.       WRITE(2,270) (K,K=K1,K2)                                          
  204.       WRITE(2,280) (HM(K),K=K1,K2)                                      
  205.       IF (K2.LT.N)                      GOTO 100                        
  206.       RETURN                                                            
  207.   200 FORMAT(1H ,9X,11F10.3)                                            
  208.   220 FORMAT(1H ,7X,A8,1H+,10(10H.........+))                            
  209.   250 FORMAT(1H ,F13.3,2H -,101A1,1H-,F10.3)                             
  210.   265 FORMAT(1H0,60X,A8)
  211.   270 FORMAT(1H0,6X,'No. ',40I3)                                        
  212.   280 FORMAT(1H0,6X,'Mark',40(2X,A1))
  213.       E N D                                                             
  214.