10 REM RADICE DI COS(X)-X CON NEWTON PROTETTO DA BISEZIONE - FULL 20 REM DATA: ESTREMO A, ESTREMO B, TOLLERANZA 30 DATA 0,1,0.000000001 40 LET LOW=0:LET HIGH=0:LET TOL=0 50 READ LOW,HIGH,TOL 60 IF LOW>=HIGH OR TOL<=0 THEN GOTO 400 70 IF TOL<0.000000000001 THEN GOTO 400 80 LET XVAL=LOW:LET FX=0:LET DERIV=0 90 LET FLEFT=0:LET FRIGHT=0:LET PROPOSE=0:LET RESID=0 100 LET ITER=0:LET NEWTON=0:LET BISECT=0:LET CONVERGE=0 110 LET SCALED=0 120 GOSUB 370:FLEFT=FX 130 XVAL=HIGH:GOSUB 370:FRIGHT=FX 140 IF FLEFT*FRIGHT>0 THEN GOTO 400 150 XVAL=(LOW+HIGH)/2 160 WHILE CONVERGE=0 170 GOSUB 370:ITER=ITER+1:RESID=ABS(FX) 180 PRINT "ITER;",ITER,";",XVAL,";",FX,";",HIGH-LOW,CRLF 190 IF RESID<=TOL THEN GOTO 310 200 IF ITER>=100 THEN GOTO 410 210 IF FLEFT*FX<=0 THEN GOTO 230 220 LOW=XVAL:FLEFT=FX:GOTO 240 230 HIGH=XVAL:FRIGHT=FX 240 IF ABS(DERIV)<0.000000000001 THEN GOTO 280 250 PROPOSE=XVAL-FX/DERIV 260 IF PROPOSE<=LOW OR PROPOSE>=HIGH THEN GOTO 280 270 NEWTON=NEWTON+1:GOTO 290 280 PROPOSE=(LOW+HIGH)/2:BISECT=BISECT+1 290 XVAL=PROPOSE 300 WEND 310 SCALED=INT(XVAL*1000000000+0.5) 320 PRINT "ROOT;",XVAL,";",SCALED,";",RESID,CRLF 330 PRINT "STEPS;",ITER,";",NEWTON,";",BISECT,CRLF 340 IF XVALHIGH OR RESID>TOL THEN GOTO 410 350 PRINT "NEWTON TEST OK",CRLF 360 END 370 FX=COS(XVAL)-XVAL 380 DERIV=-SIN(XVAL)-1 390 RETURN 400 PRINT "ERRORE PARAMETRI O INTERVALLO NEWTON",CRLF:END 410 PRINT "ERRORE CONVERGENZA NEWTON",CRLF:END