CLS REM == PREDICTOR/CORRECTOR == REM INPUT DATA GOSUB [FIFOZE] REM == INITIALIZE VARIABLES AND STARTING VALUES== [THZE] GOSUB [ONZENIZE] REM == PREDICTOR == [FOZE] GOSUB [ONFOZEZE] N = 0 REM == CORRECTOR == [SIZE] GOSUB [ONFOTHZE] REM == CHECK FOR TOLERANCE == D = Z(2) -Z(1) D = ABS(D)/H4 IF D < E2 THEN [ONFOZE] REM ==DIFFERENCE TOO LARGE, APPLY CORRECTOR AGAIN == REM APPLY CORRECTOR AGAIN N = N + 1 IF N >= N0 THEN [TWEIZE] Z(1) = Z(2) GOTO [SIZE] REM == CONVERGENCE ATTAINED == [ONFOZE] X0 = X0 + H Y0 = Z(2) PRINT" X = ";X0;" Y = ";Y0 Z0 = X0 W0 = Y0 IF X0 >= B THEN [FITHZE] FOR I =1 TO 3 F(I)= F(I + 1) NEXT I X = X0 Y = Y0 F(4) = FNF(X,Y) IF C$= "Y" THEN [FOZEZE] GOTO [FOZE] [TWEIZE] IF C$ = "N" THEN [FOSEZE] PRINT PRINT "N0 CONVERGENCE: STEP HALVED" PRINT H = H / 2 PRINT"H = ";H PRINT PRINT "RE- START AT X = ";Z0 PRINT X0 = Z0 Y0 = W0 GOTO [THZE] [FOZEZE] IF D > El THEN [FOZE] PRINT PRINT "TOO MUCH PRECISION: STEP DOUBLED" PRINT H = 2 * H PRINT "H = ";H GOTO [THZE] [FOSEZE] PRINT PRINT "*** ERROR ***" PRINT PRINT "NO CONVERGENCE ATTAINED" PRINT PRINT "WITHIN SPECIFIED TOLERANCE" [FITHZE] END REM ==PRINT TITLE PAGE== [FIFOZE] PRINT PRINT "PREDICTOR-CORRECTOR METH0D" PRINT "FOR A FIRST ORDER EQUATION" PRINT PRINT PRINT "ENTER INTERVAL OF INTEGRATION" PRINT REM ==INPUT DATA== INPUT "A = ";A INPUT "B = ";B PRINT PRINT "INITIAL CONDITION" PRINT INPUT "YA = ";Y0 PRINT PRINT "WANT STEPSIZE CONTROL (Y/N) "; INPUT C$ PRINT PRINT "INITIAL STEPSIZE" PRINT INPUT "H = ";H0 PRINT INPUT "TOLERANCE OF LOCAL ERROR X AS IN 1e-X = ";E2 E2=1/10^E2 PRINT PRINT "MAXIMUM NUMBER OF " PRINT PRINT "CORRECTION CYCLES "; INPUT N0 PRINT PRINT PRINT "SOLUTION" PRINT "********" PRINT REM ==INITIALIZE VARIABLES== H = H0 X0 = A Z0 = X0 W0 = Y0 REM == El IS LOWER BOUND FOR LOCAL ERROR== E1 = E2 / 1000 RETURN REM ==INITIALIZE VALUES FOR STARTING PROCEDURE== [ONZENIZE] PRINT X = X0 Y = Y0 Z0 = X0 W0 = Y0 H2 = H / 24 H4 = H * 14 F(1)=FNF(X,Y) REM ==4TH ORDER RUNGE-KUTTA METH0D TO COMPUTE STARTING VALUES== U = X0 W = Y0 FOR I = 1 TO 3 X = U Y = W K1 = H * FNF(X,Y) X = U + 0.5 * H Y = W + 0.5 * K1 K2 = H * FNF(X,Y) Y = W + 0.5 * K2 K3 = H * FNF(X,Y) X = U + H Y = W + K3 K4 = H * FNF(X,Y) U = U + H W = W + (K1 + 2 * K2 + 2 * K3 + K4) / 6 PRINT "X = ";U;" Y =";W Y = W F(I+ 1) = FNF(X,Y) NEXT I X0 = U Y0 = W RETURN REM == 4TH ORDER ADAMS -BASHFORT== REM == METH0D (EXPLICIT) == [ONFOZEZE] Q = 55 * F(4) -59 * F(3) + 37 * F(2) -9 * F(1) Z(1) = Y0 + H2 * Q RETURN REM == CORRECTED VALUE == REM == 4TH ORDER ADAMS -MOULTON == [ONFOTHZE] X = X0 + H Y = Z(1) F(5) = FNF(X,Y) Q = 9*F(5)+19*F(4)-5*F(3)+F(2) Z(2)= Y0+H2*Q REM ************ ENTER FN HERE **************** FUNCTION FNF(X,Y) FNF=X+Y END FUNCTION REM *******************************************