7990  REM ***  HP TIME-SHARED BASIC PROGRAM LIBRARY  **********************
7991  REM
7992  REM         DIFFEQ:  CAI IN SOLUTION OF LINEAR FIRST-ORDER
7993  REM                  DIFFERENTIAL EQUATIONS
7994  REM         36159 (A801) REV A -- 7/71
7995  REM
7996  REM ***  CONTRIBUTED PROGRAM  ***************************************
7997  REM
8000  GOTO 9000
8900  REM EQUATIONS GO HERE
8999  RETURN 
9000  REM ************ RUNGE ************ MATHEMATICAL PROGRAM *********
9001  REM ************ FOURTH ORDER RUNGE-KUTTA-GILL *******************
9002  REM ************ 28 MARCH 1970 ***********************************
9003  REM
9004  REM READ INTERNAL CONSTANTS
9005  REM
9006  DIM R[16]
9007  MAT  READ R
9008  DATA 0,.5,0,.5,.5,.292893,1.70711,.166667
9009  DATA 2,1,1,2,.5,.292893,1.70711,.5
9010  REM
9011  REM READ LIMITS ETC.
9012  REM
9013  PRINT "FOURTH ORDER RUNGE-KUTTA-GILL INTEGRATION ALGORITHM"
9014  READ T1,T2,N1,E,N2
9015  IF T1=T2 AND N1=N2 AND T2=N1 AND E=N2 AND E=999.999 THEN 9023
9016  PRINT 
9017  PRINT "SOLUTION ON THE INTERVAL:"T1;T2,"STEP SIZE:"E
9018  PRINT "SOLUTION TO BE PRINTED EVERY"E*N2"UNITS"
9019  GOTO 9060
9020  REM
9021  REM INSTRUCTIONS
9022  REM
9023  PRINT "  THE FOLLOWING INFORMATION MUST BE SPECIFIED:"
9024  PRINT "9900 DATA T1,T2,N,H,NP"
9025  PRINT TAB(14);"WHERE T1=INITIAL TIME"
9026  PRINT TAB(20);"T2=FINAL TIME"
9027  PRINT TAB(20);"N =NUMBER OF DIFFERENTIAL EQUATIONS"
9028  PRINT TAB(20);"H =INTEGRATION STEP SIZE"
9029  PRINT TAB(20);"NP=NUMBER OF CALCULATIONS BETWEEN PRINTINGS"
9030  PRINT TAB(23);"(PRINTING AT:T1,T1+NP*H,T1+2*NP*H,...,T2)"
9031  PRINT "9901 DATA <INITIAL CONDITIONS>"
9032  PRINT TAB(14);"(IE. X(T1) FOR 1ST. EQUATION,"
9033  PRINT TAB(19);"X(T1) FOR THE 2ND. EQUATION,"
9034  PRINT TAB(19);"ETC.)"
9035  PRINT "  THE EQUATIONS WILL BE ENTERED AS FOLLOWS:"
9036  PRINT "8900 LET D(1)=FUNCTION OF (X(1),X(2),...,X(N-1),X(N),T)"
9037  PRINT "8901 LET D(2)=FUNCTION OF (X(1),X(2),...,X(N-1),X(N),T)"
9038  PRINT "89-- ... .... ........ ..  ..........................."
9039  PRINT "89-- LET D(N)=FUNCTION OF (X(1),X(2),...,X(N-1),X(N),T)"
9040  PRINT TAB(10);"WHERE X(1)=SOLUTION TO D(1) AT TIME T,"
9041  PRINT TAB(16);"X(2)=SOLUTION TO D(2) AT TIME T,"
9042  PRINT TAB(21);"ETC."
9043  PRINT 
9044  PRINT "FOR EXAMPLE TO SOLVE: X'=2/Y"
9045  PRINT TAB(22);"Y'=-1/X"
9046  PRINT TAB(22);"X(1)=Y(1)=1"
9047  PRINT TAB(22);"     ON THE INTERVAL [1,3] WITH STEP SIZE .0625"
9048  PRINT "WE NEED ONLY SPECIFY THE FOLLOWING:"
9049  PRINT "1. SPECIFY THE EQUATIONS"
9050  PRINT TAB(5);"8900 LET D(1)=2/X(2)"
9051  PRINT TAB(5);"8901 LET D(2)=-1/X(1)"
9052  PRINT "2. INTERVAL, # EQUATIONS, STEP SIZE, AND PRINTING INSTRUCTIONS"
9053  PRINT TAB(5);"9900 DATA 1,3,  2,  .0625,  8"
9054  PRINT "3. INITIAL CONDITIONS"
9055  PRINT TAB(5);"9901 DATA 1, 1"
9056  STOP 
9057  REM
9058  REM READ INITIAL CONDITIONS
9059  REM
9060  FOR I=1 TO N1
9061  READ X[I]
9062  LET Q[I]=0
9063  LET D[I]=0
9064  NEXT I
9065  REM
9066  REM PRINT HEADINGS
9067  REM
9068  PRINT 
9069  PRINT "TIME";
9070  FOR I=1 TO N1 STEP 4
9071  LET I2=4
9072  IF N1-I>3 THEN 9074
9073  LET I2=N1-I+1
9074  FOR I1=1 TO I2
9075  PRINT TAB(15*I1-3);"EQUATION:"I+I1-1;
9076  NEXT I1
9077  PRINT 
9078  NEXT I
9079  REM
9080  REM START CALCULATIONS
9081  REM
9082  LET T=T1
9083  LET N3=N2
9084  GOTO 9094
9085  FOR J=1 TO 4
9086  LET T=T+R[J]*E
9087  GOSUB 8900
9088  FOR I=1 TO N1
9089  LET S=R[4+J]*(D[I]-R[8+J]*Q[I])
9090  LET X[I]=X[I]+E*S
9091  LET Q[I]=Q[I]+3*S-R[12+J]*D[I]
9092  NEXT I
9093  NEXT J
9094  IF N3-N2<0 THEN 9109
9095  REM
9096  REM PRINT THE OUTPUT
9097  REM
9098  PRINT T;
9099  FOR I=1 TO N1 STEP 4
9100  LET I2=4
9101  IF N1-I>3 THEN 9103
9102  LET I2=N1-I+1
9103  FOR I1=1 TO I2
9104  PRINT TAB(15*I1-3);X[I+I1-1];
9105  NEXT I1
9106  PRINT 
9107  NEXT I
9108  LET N3=0
9109  LET N3=N3+1
9110  IF T-T2<0 THEN 9085
9111  STOP 
9112  RETURN 
9900  DATA 999.999,999.999,999.999,999.999,999.999,999.999
9999  END 
