BASIC Code
1 REM Copyright 1987
2 REM John H. Mathews
3 REM Dept. of
Mathematics
4 REM California State
University, Fullerton
5 REM False Position
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 FALSE POSITION METHOD
110 DELTA=0.000005
112 EPSILON=1E-6
114 MAX=99
120 GOSUB 300: REM SUBROUTINE GETPOINTS
130 A1=A
140 B1=B
150 GOSUB 400: REM SUBROUTINE REGULA FALSI
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 FALSE POSITION 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 REGULA FALSI
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
500 IF YA*YB >
0 THEN COND=1: GOTO 800
510 WHILE (COND=0) AND (K < MAX)
520 DX=YB*(B-A)/(YB-YA)
525 C=B-DX
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
640 GOTO 690
650 REM ELSE
660 A=C
670 YA=YC
680 KL=KL+1
690 REM ENDIF
700 K=K+1
720 D=ABS(DX)
730 IF D < Delta THEN 740
ELSE 770
740 IF COND<>2
THEN COND=3
750 IF COND=3 AND
ABS(YC)<EPSILON THEN COND=5
760 IF ABS(YA) > Big AND
ABS(YB) > Big THEN COND=6
770 REM ELSE
780 IF COND=0 AND
ABS(YC)<EPSILON THEN COND=4
790 REM ENDIF
800 REM CONTINUE
805 WEND
810 RETURN
1000 REM SUBROUTINE RESULTS
1010 PRINT"THE FALSE POSITION 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 IF COND = 1 THEN 1080 ELSE
1150
1080 PRINT"THE VALUES F(A) AND
F(B)"
1090 PRINT"DO NOT DIFFER IN
SIGN."
1100 PRINT
1110 PRINT"F(",A," )
=",F(A)
1120 PRINT"F(",B," )
=",F(B)
1130 PRINT
1140 PRINT"THE FALSE POSITION
METHOD CANNOT BE USED."
1150 REM ELSEIF
1160 IF COND=>2 AND
COND<=5 THEN 1170 ELSE 1280
1170 PRINT"THE FALSE POSITION
METHOD TOOK ",K," ITERATIONS."
1180 PRINT
1190 PRINT" THE ROOT
IS C =",C
1200 PRINT
1210 PRINT"THE ACCURACY IS
+-",D
1220 PRINT
1230 PRINT"FUNCTION
VALUE F(",C," ) =",F(C)
1240 PRINT
1250 IF COND=2 THEN PRINT"THE
FUNCTION VALUE IS EXACTLY ZERO!"
1260 IF COND=3 OR COND=5 THEN
PRINT"THE ABSCISSA IS WITHIN TOLERANCE"
1270 IF COND=4 OR COND=5 THEN
PRINT"THE FUNCTION VALUE IS IS WITHIN TOLERANCE"
1280 REM ELSEIF
1290 IF COND=0 OR COND=6 THEN 1300
ELSE 1420
1300 PRINT"THE CURRENT ITERATE IS
C(",K,") =",C
1310 PRINT
1320 PRINT"CONSECUTIVE ITERATES
DIFFER BY",D
1330 PRINT
1340 PRINT"THE CURRENT FUNCTION
VALUE F(",C," ) =",F(C)
1350 PRINT
1360 IF COND=0 THEN PRINT"THE
MAXIMUM NUMBER OF ITERATIONS WAS EXCEEDED."
1390 IF COND=6 THEN
PRINT"SURPRISE, A POLE WAS FOUND INSTEAD OF A ZERO!"
1420 REM ENDIF
1430 PRINT
1440 RETURN
1460 END
(c) John H. Mathews 2004