home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / gaf / gaf.bas next >
BASIC Source File  |  1987-11-24  |  3KB  |  85 lines

  1. 10   DIM X(174),W(12),E(150),X$(151)
  2. 20   REM  N=NUMBER OF DATA POINTS IN THE TIME SERIES (MAXIMUM 150)
  3. 30   REM  P=ORDER OF AUTOREGRESSIVE PROCESS, I.E. AR(P), (MAXIMUM 12)
  4. 40   REM  K=LEARNING CONSTANT SET IT IN ANY OTHER VALUE THAN 1/P IF SO DESIRED
  5. 50   CLS
  6. 60   C = 0: PRINT "INPUT UP TO 150 DATA POINTS"
  7. 70   PRINT "TYPE IN 'X' TO DELETE LAST ENTRY"
  8. 80   PRINT "AND 'F' WHEN FINISHED INPUTTING DATA"
  9. 90   PRINT 
  10. 100  PRINT "INPUT DATA POINT #";C + 1;: INPUT " ";X$(C + 1)
  11. 110  IF X$(C + 1) = "F" THEN  GOTO 155
  12. 120  IF X$(C + 1) = "X" THEN C = C - 1: GOTO 100
  13. 130  X(C + 1) =  VAL (X$(C + 1))
  14. 140  C = C + 1
  15. 150  GOTO 100
  16. 155  C$ = MID$(STR$(C),2): IF C > 12 THEN C$ = "12"
  17. 160  PRINT: PRINT: PRINT "ENTER THE NUMBER OF PARAMETERS (1-";C$;"):";: INPUT P
  18. 170  IF P < 1 OR P > VAL(C$) THEN  GOTO 160
  19. 180  N = C
  20. 190  K = 1 / P
  21. 200  FOR I = 1 TO P
  22. 210  W(I) = 1 / P
  23. 220  NEXT I
  24. 230  REM  L1 = MAX NUMBER OF ITERATIONS (CYCLES)
  25. 240  L1 = 100
  26. 250  CLS
  27. 260  PRINT "ITERATION     MSE            PARAMETERS"
  28. 270  PRINT "                            OF ADAPTIVE"
  29. 280  PRINT "                             FILTERING"
  30. 290  PRINT "                               MODEL"
  31. 300  S1 = 1E+37
  32. 310  FOR L = 1 TO L1
  33. 320  S = 0
  34. 330  H1 = 0
  35. 340  FOR I = P + 1 TO N
  36. 350  F = 0
  37. 360  FOR J = 1 TO P
  38. 370  F = F + W(J) * X(I - J)
  39. 380  H1 = H1 + X(I - J) * X(I - J)
  40. 390  NEXT J
  41. 400  H1 =  SQR (H1)
  42. 410  REM  E(I)=ERROR,X(I)=ACTUAL VALUE,F=FORECAST,I=P+1 TO N
  43. 420  E(I) = X(I) - F
  44. 430  FOR J = 1 TO P
  45. 440  REM  UPDATING THE PARAMETERS OF AR(P),H1=STANDARDIZATION
  46. 450  REM  CONSTANT STANDARDIZING E(I) AND X(I-J) BEFORE USE
  47. 460  W(J) = W(J) + 2 * K * E(I) / H1 * X(I - J) / H1
  48. 470  NEXT J
  49. 480  S = S + E(I) ^ 2
  50. 490  NEXT I
  51. 500  PRINT  TAB( 4);L; TAB( 14) INT ((S / (N - P + 1)) * 10000 + .5) / 10000;
  52. 510  PRINT  TAB( 25);
  53. 520  FOR J = 1 TO P
  54. 530  PRINT  INT (W(J) * 1000 + .5) / 1000;"   ";
  55. 540  NEXT J
  56. 550  REM  IF THE MSE DOES NOT DECREASE BY AT LEAST 1/1000 STOP PROGRAM
  57. 560  IF S + .0001 > S1 THEN 600
  58. 570  S1 = S
  59. 580  PRINT 
  60. 590  NEXT L
  61. 600  REM  M=NUMBER OF FORECASTS DESIRED, MAXIMUM 24
  62. 610  M = 6
  63. 620  PRINT : PRINT "PERIOD      FORECAST"
  64. 630  FOR I = N + 1 TO N + M
  65. 640  F = 0
  66. 650  FOR J = 1 TO P
  67. 660  F = F + W(J) * X(I - J)
  68. 670  NEXT J
  69. 680  X(I) = F
  70. 690  PRINT I, INT (F * 10000 + .5) / 10000
  71. 700  NEXT I
  72. 710  PRINT 
  73. 720  PRINT "THE PARAMETERS ARE :"
  74. 730  FOR X = 1 TO P
  75. 740  PRINT  INT (W(X) * 1000 + .5) / 1000;"   ";
  76. 750  NEXT X
  77. 760  PRINT 
  78. 770  PRINT "THE MSE = "; INT (S / (N - P + 1) * 10000 + .5) / 10000
  79. 780  PRINT : PRINT 
  80. 790  PRINT "DO YOU WANT TO RUN WITH SAME DATA (Y/N)": INPUT AN$
  81. 800  IF AN$ = "Y" THEN  GOTO 160
  82. 810  PRINT : INPUT "DO YOU WANT TO RUN THIS PROGRAM AGAIN (Y/N) ";AN$
  83. 820  IF AN$ = "Y" THEN  GOTO 50
  84. 830  END 
  85.