BASIC Code
1 REM Copyright 1987
2 REM John H. Mathews
3 REM Dept. of
Mathematics
4 REM California State
University, Fullerton
5 REM Bisection Method
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