BASIC Code

1     REM  John H. Mathews
2     REM  Dept. of Mathematics
3     REM  California State University, Fullerton
4     REM  Bisection Method (c) 1987

10    DEF FNF(X) = X*SIN(X) - 1
15    GOTO 100
20    PRINT"F(X) = X*SIN(X) - 1"
30    RETURN

100   REM PROGRAM BISECTON
110   DELTA=.0000005
120   GOSUB 300: REM SUBROUTINE GETPOINTS
130   A1=A
140   B1=B
150   GOSUB 400: REM SUBROUTINE BISECTION
160   GOSUB 1000:REM SUBROUTINE RESULTS
170   PRINT
180   PRINT"WANT TO TRY ANOTHER INTERVAL? <Y/N> ";
190   INPUT ANS$
200   IF  ANS$ = "Y" OR ANS$ = "y"  THEN  GOTO 120
210   GOTO 1460

300   REM SUBROUTINE GETPOINTS
310   CLS
320   PRINT"THE BISECTION METHOD WILL BE USED TO FIND A ZERO THE FUNCTION"
330   PRINT
340   GOSUB 20: REM PRINT FUNCTION
350   PRINT
360   PRINT"THAT LIES IN THE INTERVAL  [A,B]"
370   PRINT
380   PRINT"ENTER LEFT  ENDPOINT A = ";
390   INPUT A
392   PRINT"ENTER RIGHT ENDPOINT B = ";
394   INPUT B
396   PRINT
398   RETURN

400   REM SUBROUTINE BISECTION
410   BIG=1E+10
420   K=0
430   KL=0
440   KR=0
450   YA=FNF(A)
460   YB=FNF(B)
470   D=B-A
480   COND=0
490   MAX=1+INT((LOG(D)-LOG(DELTA))/LOG(2))
500   IF  YA*YB => 0  THEN  COND=1: GOTO 770
510   WHILE (COND=0) AND (K < MAX)
520   C=(A+B)/2
530   YC=FNF(C)
540   IF  YC = 0  THEN 550 ELSE 590
550       A=C
560       B=C
570       COND=2
580       GOTO 690
590   REM ELSEIF
600       IF  YB*YC > 0  THEN 610 ELSE 650
610       B=C
620       YB=YC
630       KR=KR+1
640       GOTO 690
650   REM ELSE
660       A=C
670       YA=YC
680       KL=KL+1
690   REM ENDIF
700   K=K+1
710   WEND
720   D=B-A
730   IF  D < DELTA  THEN  740 ELSE 760
740       IF  COND <> 2  THEN  COND=3
750       IF  ABS(YA) > BIG  AND  ABS(YB) > BIG  THEN  COND=4
760   REM ENDIF
770   REM CONTINUE
780   RETURN

1000  REM SUBROUTINE RESULTS
1010  PRINT"THE BISECTION METHOD WAS USED TO FIND A ZERO OF THE FUNCTION"
1020  PRINT
1030  GOSUB 20: REM PRINT FUNCTION
1040  PRINT
1050  PRINT"IN THE INTERVAL  [",A,"  ,",B,"  ]"
1060  PRINT
1070  K=KL+KR
1080  IF  COND = 1  THEN  1090 ELSE 1170
1090      PRINT"THE VALUES F(A) AND F(B)"
1100      PRINT"DO NOT DIFFER IN SIGN."
1110      PRINT
1120      PRINT"F(",A,"  ) =",FNF(A)
1130      PRINT"F(",B,"  ) =",FNF(B)
1140      PRINT
1150      PRINT"THE BISECTION METHOD CANNOT BE USED."
1160      GOTO 1430
1170  REM ELSEIF
1180      IF COND = 2 OR COND = 3  THEN 1190 ELSE 1330
1190      PRINT"THE BISECTION METHOD TOOK ",K," ITERATIONS."
1200      PRINT
1210      PRINT"THERE WERE",KR," SQUEEZES FROM THE RIGHT"
1220      PRINT
1230      PRINT"       AND",KL," SQUEEZES FROM THE LEFT."
1240      PRINT
1250      PRINT"  THE ROOT IS  C =",C
1260      PRINT
1270      PRINT"THE ACCURACY IS +-",D
1280      PRINT
1290      PRINT"FUNCTION VALUE  F(",C,"  ) =",FNF(C)
1300      PRINT
1310      IF  COND = 2 THEN PRINT"THE FUNCTION VALUE IS EXACTLY ZERO!"
1320      GOTO 1430
1330  REM ELSEIF
1340      IF  COND = 0 OR COND = 4  THEN  1350 ELSE 1430
1350      PRINT"THE CURRENT ITERATE IS C(",K,") =",C
1360      PRINT
1370      PRINT"THE CURRENT INTERVAL WIDTH IS ",D
1380      PRINT
1390      PRINT"THE CURRENT FUNCTION VALUE  F(",C,"  ) =",FNF(C)
1400      PRINT
1410      IF COND = 0 THEN PRINT"THE MAXIMUM NUMBER OF ITERATIONS WAS EXCEEDED."
1420      IF COND = 4 THEN PRINT"SURPRISE, A POLE WAS FOUND INSTEAD OF A ZERO!"
1430  REM ENDIF
1440  PRINT
1450  RETURN
1460  END

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(c) John H. Mathews 2004