9 ON WARNING NEXT 10 ! *********************** 20 !* Metoda gradientului, versiunea TI-XBASIC (dubla precizie)* 30 !************************************************************ 40 NPCT=5!----Numarul punctelor experimentale 50 NPAR=3!----Numarul parametrilor modelului teoretic 60 NSIG=3!----Numarul cifrelor semnificative in param. calc. 70 PREC=10^(-NSIG)!---- Precizia in calculul parametrilor. 80 DIM D(5),T(5)! D(),T() Contin datele experimentale. 90 DIM W(5)! W() este un vector de lucru. 100 DIM X(5)! X() contine parametrii modelului. 110 DIM G(5)! G() contine componentele gradientului. 140 DATA 0,12,10,15.7,30,18.8,100,20.2,300,19.2 150 !*********************************************************** 160 !* P R O G R A M U L P R I N C I P A L * 170 !*********************************************************** 180 CALL CLEAR :: CALL CHAR(96,"01020408102040802070787020000000") :: GOSUB 1370 :: FOR I=1 TO NPCT 190 READ T(I),D(I)! Citeste datele exp. din linia 100 200 D(I)=D(I)/10! Operatie pt. scalarea comp. grad. 210 NEXT I 220 X(1)=2!----Valorile initiale ale parametrilor 230 X(2)=.5 240 X(3)=.3 250 ALFA=0.5 260 REPS=1!------Evaluam lungimea mantisei masinii ---- 270 REPS=REPS/2 280 IF REPS+1<>1 THEN 270 290 REPS=2*REPS 300 EPS=SQR(REPS)!---Constanta folosita la deriv. numerica. 360 ITN=1! Initializam contorul iteratiilor 370 INEF=0 380 FOR I=1 TO NPAR!----Initializam vectorul de lucru 390 W(I)=X(I) 400 NEXT I 410 GOSUB 1290 420 F0=F!----Evaluarea reziduului cu param. initiali 430 ! 440 !================ INCEPUTUL PROCESULUI ITERATIV ============ 450 ! 460 GNORM=0!------ Initializam norma gradientului. 470 FOR I=1 TO NPAR!-- Incepem calculul derivatelor numerice. 480 Z=W(I) 490 IF Z>.1 THEN 520 500 PAS=EPS*.1 510 GOTO 530 520 PAS=Z*EPS 530 W(I)=X(I)+PAS 540 GOSUB 1290 550 G(I)=(F-F0)/PAS! Eval. numerica a comp. grad. 560 GNORM=GNORM+G(I)*G(I) 570 W(I)=Z 580 NEXT I 590 FOR I=1 TO NPAR!--Incercam un progres in dir. de cautare. 600 W(I)=X(I)-ALFA*G(I)! Noua aprox. a coord. minim. 610 NEXT I 620 GOSUB 1290 :: DISPLAY AT(1,18):USING "ITN=##":ITN :: DISPLAY AT(2,18):USING "REZ=.#####":F0 :: DISPLAY AT(3,18):USING "AL=.###":ALFA 630 FOR I=1 TO NPAR 640 DISPLAY AT(17+I,1):X(I),G(I) 650 NEXT I 660 !PRINT F0 670 IQUIT=0!-------Incercam criteriile de oprire. 680 FOR I=1 TO NPAR 690 IF ABS(W(I)/X(I)-1)>PREC THEN 720 700 IQUIT=IQUIT+1 710 NEXT I 720 IF GNORM<=.001 AND IQUIT=NPAR THEN 960! Terminat ! 730 IF ALFA<100*REPS THEN 780 740 IF F