FORTRAN 77 Code
REAL FUNCTION
G(X)
REAL X
G=0.9 + X -
0.4*X*X
RETURN
END
SUBROUTINE
ITERATE(G,Pterm,Max,Tol,Pnew,Cond,K)
PARAMETER(Big=1E10,Small=1E-20)
INTEGER Cond,K,Max
REAL Pnew,Pterm,Tol
REAL Dx,Dg,Pold,RelErr,Slope
K=0
RelErr=1
Pnew=G(Pterm)
WHILE (RelErr.GE.Tol).AND.(K.LE.Max)
& .AND.(ABS(Pnew).LT.Big)
Pold=Pterm
Pterm=Pnew
Pnew=G(Pterm)
Dg=Pnew-Pterm
RelErr=ABS(Dg)/(ABS(Pnew)+Small)
K=K+1
WRITE(9,1000)
K,Pnew
REPEAT
IF (Dg.EQ.0) THEN
Slope=0
ELSE
Dx=Pterm-Pold
IF (Dx.NE.0) THEN
Slope=Dg/Dx
ELSE
Slope=6.023E23
ENDIF
ENDIF
IF (ABS(Slope).LT.1) THEN
Cond=1
IF (Slope.LT.0)
Cond=2
ELSE
Cond=3
IF (Slope.LT.0)
Cond=4
ENDIF
IF (RelErr.LT.Tol) THEN
IF
((Cond.EQ.3).OR.(Cond.EQ.4)) Cond=5
ENDIF
PAUSE
RETURN
1000 FORMAT(I2,4X,F15.7)
END
(c) John H. Mathews 2004