      PROGRAM KINKAI
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      DOUBLE PRECISION NIBUN,NEWTON,LINITR
      EXTERNAL F,G
      S=NIBUN(F,1.0D0,2.0D0,I)
      WRITE(*,300) 'Bisection Method : ',S,'at I = ',I      
      S=NEWTON(F,G,1.0D0,2.0D0,I)
      WRITE(*,300) 'Newton'//CHAR(39)//'s Method  : ',S,'at I = ',I      
      S=LINITR(F,1.0D0,2.0D0,I)
      WRITE(*,300) 'Linear Iteration : ',S,'at I = ',I      
  300 FORMAT(1H ,A20,F18.15,A10,I7)
      END
C 
      DOUBLE PRECISION FUNCTION F(X)
      DOUBLE PRECISION X
      F=DEXP(X)-2*X-1
      RETURN
      END
C
      DOUBLE PRECISION FUNCTION G(X)
      DOUBLE PRECISION X
      G=DEXP(X)-2
      RETURN
      END
C
C $BFsJ,K!$N%5%V%k!<%A%s(B
      DOUBLE PRECISION FUNCTION NIBUN(F,A,B,I)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      EXTERNAL F
      EPS=1.0D-16
      FA=F(A)
      FB=F(B)
      IF (FA*FB.GT.0.0D0) THEN
          WRITE(*,*) 'WRONG INTERVAL'
          RETURN
      END IF      
      XA=A
      XB=B
      DO 200 I=1,100  ! $B$3$NH?I|2s?t$O(B2^(-54)$B"b(B=10^(-16)$B$h$j(B54$B0J2<$G==J,(B
          X=(XA+XB)/2
          WRITE(*,*)XA,X,XB,XB-XA
          FX=F(X)
          IF (FX*FA.LE.0.0D0) THEN
              XB=X
              FB=FX
          ELSE 
              XA=X
              FA=FX
          END IF
          IF (XB-XA.LT.EPS) GOTO 300
  200 CONTINUE 
  300 NIBUN=X
      RETURN
      END
C
C $B%K%e!<%H%sK!$N%5%V%k!<%A%s(B
      DOUBLE PRECISION FUNCTION NEWTON(F,G,A,B,I)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      EXTERNAL F,G       ! G(X) = F'(X)
      EPS=1.0D-16
      NEWTON=B           ! $B6a;w2r$N=i4|CM(B
C     NEWTON=(A+B)/2     
      DO 100 I=1,100
          Y=F(NEWTON)/G(NEWTON)
          NEWTON=NEWTON-Y
          IF (DABS(Y).LT.EPS) RETURN
  100 CONTINUE
      RETURN
      END
C
C $B@~7?H?I|K!$N%5%V%k!<%A%s(B
      DOUBLE PRECISION FUNCTION LINITR(F,A,B,I)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      EXTERNAL F
      EPS=1.0D-16
      LINITR=B               ! $B6a;w2r$N=i4|CM(B
C      T=DEXP(B)-2            ! $B;HMQ$9$k79$-(B
      T=(F(B)-F(A))/(B-A)
      DO 100 I=1,500
          Y=F(LINITR)/T
          IF (DABS(Y).LT.EPS) RETURN
          LINITR=LINITR-Y
  100 CONTINUE
      RETURN
      END
