PROGRAM FINDROT
C=======================================================================
C FIND ROOT OF THE FOLLOWING FUNCTIONS
C COSH(LAMBDA)*COS(LAMBDA)+1=0 FOR CANTILEVER
C COSH(LAMBDA)*COS(LAMBDA)-1=0 FOR FREE-FREE BEAM
C=======================================================================
IMPLICIT REAL*8 ( A-H , O-Z )
PARAMETER ( MXN=1200, DX=0.001D0, DXNEWTON=DX/10.D0 )
DIMENSION ROOT(MXN)
C---------- DX = INCREMENTAL VALUE
C=======================================================================
EPS = 1.D-14
C=======================================================================
C------ INITIALIZATION
X = DX
NROOT = 0
F0 = FX (X)
C
DO WHILE ( X .LT. 200.D0 )
X = X + DX
F1 = FX (X)
IF ( F0*F1 .LT. 0.D0 ) THEN
CALL NEWTON ( X-DX, DXNEWTON, FLAMBDA, EPS )
NROOT = NROOT + 1
ROOT(NROOT) = FLAMBDA
END IF
F0 = F1
END DO
C
OPEN ( 1, FILE='ROOT.DAT', STATUS='UNKNOWN' )
DO I = 1 , NROOT
WRITE (1,*) ROOT (I)
WRITE (*,*) ROOT (I)
END DO
CLOSE (1)
C=======================================================================
STOP 'NORMAL TERMINATION'
END
C
C
SUBROUTINE NEWTON (X0, DX, X, EPS )
IMPLICIT REAL*8 ( A-H , O-Z )
X = X0
DELTAX = X
DO WHILE ( DABS(DELTAX/X) .GT. EPS )
DFDX = (FX(X+DX)-FX(X-DX))/(2.D0*DX)
DELTAX = - FX(X)/DFDX
X = X + DELTAX
END DO
RETURN
END
C
C
FUNCTION FX(FLAMBDA)
IMPLICIT REAL*8 ( A-H , O-Z )
FX = COSH(FLAMBDA)*COS(FLAMBDA)+1.D0
RETURN
END