C Procedury na reseni nelinearnich rovnic. REAL FUNCTION SUCFAI(F,X,DX0,EPS,NMAX) C Rosenbrockova metoda "success - failure" INTEGER NMAX REAL F,X,DX0,EPS EXTERNAL F DOUBLE PRECISION ALFA,BETA,F1,F2,F3,T,S1,S2,A,DX REAL X0,X1,X2,X3 INTEGER J DATA ALFA/1.5/,BETA/0.5/ DX = DX0 X1 = X F1 = F(X1) X2 = X1 + DX F2 = F(X2) IF( F2.LT.F1 )THEN C Uspech DX = ALFA*DX T = X1 X1 = X2 X2 = T T = F1 F1 = F2 F2 = T ELSE C Neuspech DX = -BETA*DX ENDIF DO J = 3,NMAX X3 = X1 + DX F3 = F(X3) IF( F3.LE.F1 )THEN C Uspech X2 = X1 F2 = F1 X1 = X3 F1 = F3 DX = ALFA*DX ELSE C Neuspech, kvadraticka interpolace S1 = (F1 - F2)*(X2 - X3) S2 = (F2 - F3)*(X1 - X2) A = 2.0*(S2 - S1) X0 = (S2*(X1 + X2) - S1*(X2 + X3))/A A = A/((X3 - X2)*(X2 - X1)*(X3 - X1)) X2 = X1 F2 = F1 X1 = X0 F1 = F(X1) DX = X1 - X2 IF( F1.GT.F2 )THEN DX = -BETA*DX T = X1 X1 = X2 X2 = T T = F1 F1 = F2 F2 = T ENDIF ENDIF IF( ABS(DX).LT.EPS ) THEN SUCFAI = F1 X = X1 RETURN ENDIF ENDDO SUCFAI = 1E37 END