Click for good descriptions of Newton’s method and Halley’s method.

I decided to write my C64 Basic code for two different functions:

f(x) = x*x*x – 2*x – 5

f(x) = exp(x) – x*x

Here are the plots for these functions, with the roots indicated by a blue dot:

These methods require choosing a first guess for the root. In both cases I chose x = 2 as a first guess.

Here is the code:

10 REM =============================== 20 REM 30 REM FIND THE ZEROS OF A FUNCTION 35 REM USING NEWTON/RAPHSON METHOD 40 REM AND HALLEY'S METHOD 60 REM 70 REM =============================== 100 PRINT CHR$(147) 200 DEF FN F(A) = A*A*A - 2*A - 5 210 DEF FN F1(A) = 3*A*A - 2 220 DEF FN F2(A) = 6*A 230 E$ = "XXX - 2X - 5" 235 PRINT "--------------------------------------" 240 GOSUB 10000 245 PRINT "--------------------------------------" 250 GOSUB 20000 300 DEF FN F(A) = EXP(A) - A*A 310 DEF FN F1(A) = EXP(A) - 2*A 320 DEF FN F2(A) = EXP(A) - 2 330 E$ = "EXP(X) - X*X" 335 PRINT "--------------------------------------" 340 GOSUB 10000 345 PRINT "--------------------------------------" 350 GOSUB 20000 1000 END 10000 REM NEWTON/RAPHSON 10002 X = 2 10005 S = 0 : DI = 10 : TL = 0.000001 10010 IF DI < TL THEN GOTO 10100 10020 G = FN F(X) : G1 = FN F1(X) 10030 X1 = X - G/G1 10040 DI = ABS(X - X1) 10050 X = X1 10060 S = S + 1 10070 GOTO 10010 10100 PRINT "NEWTON'S METHOD FOR: ";E$ 10110 PRINT "ROOT = ";X 10120 PRINT "F(ROOT) = "; FN F(X) 10130 PRINT "FOUND IN ";S;" STEPS" 10200 RETURN 20000 REM HALLEY 20002 X = 2 20005 S = 0 : DI = 10 : TL = 0.000001 20010 IF DI < TL THEN GOTO 20100 20020 G = FN F(X) : G1 = FN F1(X) 20025 G2 = FN F2(X) 20030 NU = 2 * G * G1 20040 DE = 2 * G1 * G1 - G * G2 20050 X1 = X - NU/DE 20060 DI = ABS(X - X1) 20070 X = X1 20080 S = S + 1 20090 GOTO 20010 20100 PRINT "HALLEY'S METHOD FOR ";E$ 20110 PRINT "ROOT = ";X 20120 PRINT "F(ROOT) = "; FN F(X) 20130 PRINT "FOUND IN ";S;" STEPS" 20200 RETURN

Here is the screen shot: