BASIC Code

1     REM  Copyright  1987
2     REM  John H. Mathews
3     REM  Dept. of Mathematics
4     REM  California State University, Fullerton
5     REM  Secant Method

10    DEF FNF (X) = X*X*X - 3*X + 2
25    GOTO 100
30    REM SUBROUTINE PRINT FUNCTION
40    PRINT"F(X)  =  X*X*X - 3*X + 2"
50    RETURN


100   REM PROGRAM SECANT METHOD
110   DELTA=5E-6
120   EPSILON=1E-7
130   MAX=100
140   GOSUB 300: REM SUBROUTINE INPUTS
150   Q0=P0
155   Q1=P1
160   GOSUB 500 : REM SUBROUTINE SECANT METHOD
170   GOSUB 1000: REM SUBROUTINE RESULTS
180   PRINT
190   PRINT "WANT TO USE A DIFFERENT STARTING VALUE? <Y/N> ";
200   INPUT ANS$
210   IF ANS$ = "Y" OR ANS$ = "y" GOTO 140
220   GOTO 5000


300   REM SUBROUTINE INPUTS
310   CLS
320   PRINT"THE SECANT METHOD IS USED"
330   PRINT
340   PRINT"TO FIND A ZERO OF THE FUNCTION: "
350   PRINT
360   GOSUB 30: REM PRINT FUNCTION
370   PRINT
380   PRINT"TWO INITIAL APPROXIMATION P0, P1 ARE NEEDED."
390   PRINT
400   PRINT"ENTER P0 = ";
410   INPUT P0
420   PRINT
430   PRINT"ENTER P1 = ";
440   INPUT P1
450   PRINT
460   RETURN


500   REM SUBROUTINE SECANT METHOD
510   SMALL=1E-10
520   K=0
530   COND=0
540   Y0=FNF(P0)
550   Y1=FNF(P1)
560   WHILE  K < MAX AND COND = 0
570   DF=(Y1-Y0)/(P1-P0)
580   IF  DF = 0  THEN 590 ELSE 630
590       COND=1
600       DP=P1-P0
610       P2=P1
620       GOTO 660
630   REM ELSE
640       DP=Y1/DF
650       P2=P1-DP
660   REM ENDIF
670   Y2=FNF(P2)
680   RELERR=ABS(DP)/(ABS(P2)+SMALL)
690   IF  RELERR  < DELTA    THEN  COND=2
700   IF  ABS(Y2) < EPSILON  THEN  COND=3
710   IF  RELERR<DELTA AND ABS(Y2)<EPSILON  THEN  COND=4
720   P0=P1
730   P1=P2
740   Y0=Y1
750   Y1=Y2
760   K=K+1
770   WEND
780   RETURN



1000  REM SUBROUTINE RESULTS
1010  CLS
1020  Y2=FNF(P2)
1030  PRINT"THE SECANT METHOD WAS USED TO FIND A ZERO OF THE FUNCTION"
1040  PRINT
1050  GOSUB 30: REM PRINT FUNCTION
1060  PRINT
1070  PRINT"STARTING WITH THE TWO APPROXIMATIONS:"
1080  PRINT
1090  PRINT"P0  =",P0,"     AND     P1  =",P1
1100  PRINT
1110  PRINT"AFTER ",K," ITERATIONS AN APPROXIMATE VALUE FOR THE ZERO IS:"
1120  PRINT
1130  PRINT"  P  =",P2
1140  PRINT
1150  PRINT" DP  =",ABS(DP),"  IS THE ESTIMATED ACCURACY FOR P."
1160  PRINT
1170  PRINT"    F(",P2,"  )  = ",Y2
1180  PRINT
1190  IF  Y2 = 0  THEN PRINT"THE COMPUTED FUNCTION VALUE IS EXACTLY ZERO!"

1200  IF  COND = 0  THEN 1210 ELSE 1240
1210      PRINT"CONVERGENCE IS DOUBTFUL BECAUSE"
1220      PRINT
1230      PRINT"THE MAXIMUM NUMBER OF ITERATIONS WAS EXCEEDED."
1240  REM ELSEIF
1250  IF  COND = 1 THEN 1260 ELSE 1290
1260      PRINT"CONVERGENCE IS DOUBTFUL BECAUSE "
1270      PRINT
1280      PRINT"DIVISION BY ZERO WAS ENCOUNTERED."
1290  REM ELSEIF
1300  IF  COND = 2 THEN 1310 ELSE 1340
1310      PRINT"THE APPROXIMATION P IS"
1320      PRINT
1330      PRINT"WITHIN THE DESIRED TOLERANCE."
1340  REM ELSEIF
1350  IF  COND = 3 THEN 1360 ELSE 1390
1360      PRINT"THE COMPUTED FUNCTION VALUE F(P)"
1370      PRINT
1380      PRINT"IS WITHIN THE DESIRED TOLERANCE."
1390  REM ELSEIF
1400  IF  COND = 4 THEN 1410 ELSE 1440
1410      PRINT"THE APPROXIMATION P AND THE FUNCTION VALUE "
1420      PRINT
1430      PRINT"F(P) ARE BOTH WITHIN THE DESIRED TOLERANCES."
1440  REM ENDIF
1450  RETURN

5000     END

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(c) John H. Mathews 2004