10 REM INTEGRALE DI EXP(-X*X), SIMPSON A RAFFINAMENTO GLOBALE - FULL 20 REM DATA: ESTREMO A, ESTREMO B, TOLLERANZA ASSOLUTA 30 DATA -2,2,0.00000001 40 LET LOW=0:LET HIGH=0:LET TOL=0 50 READ LOW,HIGH,TOL 60 IF LOW>=HIGH OR TOL<=0 THEN GOTO 460 70 IF LOW<-5 OR HIGH>5 OR TOL<0.000000000001 THEN GOTO 460 80 LET PANELS=8:LET WIDTH=0:LET XVAL=0:LET FX=0 90 LET ACCUM=0:LET RESULT=0:LET PREVIOUS=0:LET ESTERR=1 100 LET WEIGHT=0:LET ITER=0:LET CONVERGE=0:LET SCALED=0 110 GOSUB 320 120 PREVIOUS=RESULT 130 WHILE CONVERGE=0 140 PREVIOUS=RESULT:PANELS=PANELS*2:ITER=ITER+1 150 GOSUB 320 160 ESTERR=ABS(RESULT-PREVIOUS)/15 170 PRINT "REFINE;",PANELS,";",RESULT,";",ESTERR,CRLF 180 IF ESTERR<=TOL THEN CONVERGE=1 190 IF PANELS>=4096 THEN GOTO 300 200 REM STIMA PRECEDENTE CONSERVATA PER RICHARDSON 210 WEND 220 REM CORREZIONE DI RICHARDSON ULTIMA COPPIA DI STIME 230 RESULT=RESULT+(RESULT-PREVIOUS)/15 240 SCALED=INT(RESULT*1000000000+0.5) 250 PRINT "INTEGRAL;",RESULT,";",SCALED,";",PANELS,CRLF 260 PRINT "ESTERR;",ESTERR,";ITER;",ITER,CRLF 270 IF RESULT<=0 OR RESULT>HIGH-LOW+0.00000001 THEN GOTO 470 280 PRINT "SIMPSON TEST OK",CRLF 290 END 300 IF CONVERGE=0 THEN GOTO 470 310 GOTO 220 320 WIDTH=(HIGH-LOW)/PANELS:ACCUM=0 330 FOR I=0 TO PANELS 340 XVAL=LOW+I*WIDTH:GOSUB 440 350 IF I=0 OR I=PANELS THEN GOTO 390 360 IF I-2*INT(I/2)=1 THEN GOTO 380 370 WEIGHT=2:GOTO 400 380 WEIGHT=4:GOTO 400 390 WEIGHT=1 400 ACCUM=ACCUM+WEIGHT*FX 410 NEXT I 420 RESULT=WIDTH*ACCUM/3 430 RETURN 440 FX=EXP(-XVAL*XVAL) 450 RETURN 460 PRINT "ERRORE PARAMETRI SIMPSON",CRLF:END 470 PRINT "ERRORE AUTOVERIFICA O CONVERGENZA SIMPSON",CRLF:END