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