You are on page 1of 19

APPENDIX A: FORTRAN PROGRAMS

A.1. FORTRAN PROGRAMS FOR SYSTEM OF LINEAR EQUATIONS

A.1.1 Dolittle LU Factorization (The matrix A is taken from Example Sec. 2.5.3)

IMPLICIT REAL*8(A-H,O-Z)
PARAMETER (N=3)
REAL A(N,N),L(N,N),U(N,N),Z(N),X(N),B(N)
OPEN(1,FILE='LUFACTOR.OUT')
! INPUT THE MATRIX A
A(1,1)=1; A(1,2)=2; A(1,3)=7;
A(2,1)=-3; A(2,2)=4.; A(2,3)=5.
A(3,1)=6.; A(3,2)=12.; A(3,3)=3.
! INPUT THE VECTOR B
B(1)=26.
B(2)=20.
B(3)=39.
! PERFORM THE FACTORIZATION A=LU
CALL LU(N,A,L,U)
DO I=1,N
WRITE(*,9)(L(I,J),J=1,N),(U(I,J),J=1,N)
ENDDO
9 FORMAT(3(F8.4),7X,3(F8.4))
! SOLVE LZ=B USING FORWARD SUBSTITUTION
CALL FORW(N,L,Z,B)
WRITE(*,99)(Z(I),I=1,N)
99 FORMAT(//,'Z=',3(F12.4))
! SOLVE UX=Z USING BACK SUBSTITUTION
CALL SBACK(N,U,Z,X)
WRITE(*,999)(X(J),J=1,N)
999 FORMAT(//,'X=',3(F12.4))
STOP
END
!
!
SUBROUTINE LU(N,A,L,U)
! SUBROUTINE TO PERFORM DOLITTLE FACTORIZATION: A=LU
IMPLICIT REAL*8(A-H,O-Z)
REAL A(N,N),L(N,N),U(N,N)
DO I = 1,N
L(I,I)=1.
ENDDO
U(1,1)=A(1,1)
IF(U(1,1).EQ.0.)THEN
WRITE(1,*)'LU FACTORIZATION IS IMPOSSIBLE'
RETURN
ENDIF
DO J =2,N

1
! DETERMINE THE FIRST ROW OF U
U(1,J)=A(1,J)
! DETERMINE THE FIRST COLUMN OF XL
L(J,1)=A(J,1)/U(1,1)
ENDDO
DO I = 2, N-1
S=0.
DO K = 1, I-1
S=S+L(I,K)*U(K,I)
ENDDO
U(I,I)= A(I,I)-S
IF(U(I,I).EQ.0.)THEN
WRITE(1,*)'LU FACTORIZATION IS IMPOSSIBLE'
RETURN
ENDIF
DO J = I+1, N
S1=0.
S2=0.
DO K = 1, I-1
S1=S1+L(I,K)*U(K,J)
S2=S2+L(J,K)*U(K,I)
! DETERMINE THE (ith)ROWS OF U
U(I,J)=A(I,J)-S1
! DETERMINE THE (ith)COLUMN OF XL
L(J,I)=(A(J,I)-S2)/U(I,I)
ENDDO
ENDDO
ENDDO
SS=0
DO K = 1,N-1
SS=SS+L(N,K)*U(K,N)
U(N,N)=A(N,N)-SS
ENDDO
IF(U(N,N).EQ.0) THEN
WRITE(1,*)' THE MATRIX A IS SINQULAR'
ENDIF
RETURN
END

SUBROUTINE FORW(N,L,Z,B)
! SUBROUTINE TO SOLVE LZ=B USING FORWARD SUBSTITUTION
IMPLICIT REAL*8(A-H,O-Z)
REAL L(N,N),Z(N),B(N)
Z(1)=B(1)
DO I =2,N
S3=0.
DO J =1,I-1
S3=S3+L(I,J)*Z(J)
ENDDO
Z(I)=B(I)-S3

2
ENDDO
RETURN
END

SUBROUTINE SBACK(N,U,Z,X)
! SUBROUTINE TO SOLVE UX=Z USING BACK SUBSTITUTION
IMPLICIT REAL*8(A-H,O-Z)
REAL U(N,N),Z(N),X(N)
X(N)=Z(N)/U(N,N)
DO K = N-1,1,-1
S4=0.
DO J=K+1,N
S4=S4+U(K,J)*X(J)
ENDDO
X(K)=(Z(K)-S4)/U(K,K)
ENDDO
RETURN
END

A.1.2 Gauss-Siedel Iteration Technique (Example Eq. 2.139)

IMPLICIT REAL*8(A-H,O-Z)
! INPUT SIZE, MAXIMUM NUMBER OF ITERTIONS, TOLERANCE
PARAMETER (N=3,ITMAX=100,TOL=1D-07)
DIMENSION A(N,N),B(N),X0(N)
! INPUT MATRIX A
A(1,1)=10.; A(1,2)=2.; A(1,3)=1.
A(2,1)=1.; A(2,2)=-7.; A(2,3)=2.
A(3,1)=2.; A(3,2)=-3.; A(3,3)=-8.
! INPUT VECTOR B
B(1)=13; B(2)=-15; B(3)=4.
! INPUT INITIAL GUESS X0
X0(1)=1.0
X0(2)=1.0
X0(3)=1.0

C CALL SUBROUTINE SIEDEL


CALL SIEDEL(N,A,B,X0,TOL,ITMAX,K)
WRITE(*,99) K
WRITE(*,999) (X0(I),I=1,N)
99 FORMAT('ITERATIONS REQUIRED=',I3)
999 FORMAT('SOLUTION X IS',3F12.6)
STOP
END

SUBROUTINE SIEDEL(N,A,B,X0,TOL,ITMAX,K)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION A(N,N),B(N),X(N),X0(N),ERR(N)
DO K=1,ITMAX

3
DO I=1,N
S1=0.D0
S2=0.D0
DO J=1,I-1
S1=S1+A(I,J)*X(J)
ENDDO
DO J=I+1,N
S2=S2+A(I,J)*X0(J)
ENDDO
X(I)=(B(I)-S1-S2)/A(I,I)
ENDDO
! SETTING THE STOPPING CRITERION
DO I=1,N
ERR(I)=X(I)-X0(I)
ENDDO
CALL MAX(N,X,SX)
CALL MAX(N,ERR,SR)
ER=SR/SX
! PRINT ITTERATIONS
write(1,100) K, (X(I),I=1,N), ER
100 FORMAT(1X, 'ITTER.#', I3, 3(F12.6,1X), 2X, E8.3)
ER=DABS(ER)
DO I=1,N
X0(I)=X(I)
ENDDO
IF (ER .LE. TOL) THEN
! REQURIED ACCUARCY IS ACHIEVED
RETURN
ENDIF
ENDDO
RETURN
END

SUBROUTINE MAX(N,Y,SY)
! Computes the maximum element of the vector y
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION Y(10)
SY=DABS(Y(1))
DO 10 I=1,N
IF (DABS(Y(I)) .GE. SY) THEN
SY=DABS(Y(I))
ENDIF
10 CONTINUE
RETURN
END

4
A.2. FORTRAN PROGRAMS FOR NONLINEAR ALGEBRAIC EQUATIONS

A.2.1 Newton Raphson Method (Example Eq. 3.23)

IMPLICIT REAL*8(A-H,O-Z)
OPEN(1,FILE='Newton.out')
DATA X0,ITMAX,EPS,DEL /1.5,100,1.D-07,1D-07/
CALL NEWTON (X0,ITMAX,EPS,DEL)
WRITE(*,*) X0,F(X0)
STOP
END

SUBROUTINE NEWTON (X0,ITMAX,EPS,DEL)


IMPLICIT REAL*8(A-H,O-Z)
IF (DABS(F(X0)) .LT. EPS) THEN
RETURN
ENDIF
! INCREMENT OF X
DO I =1,ITMAX
X=X0-(F(X0)/DF(X0))
ERR1=DABS(X-X0)/DABS(X0)
ERR2=DABS(F(X))
! PRINT ITTERATIONS
write(*,100) I,X,ERR2, ERR1
100 FORMAT(1X, 'ITTER#', I2, E12.5, (2E12.5,1X))
IF(ERR1.LT.EPS .OR. ERR2 .LT. DEL)THEN
! REQUIRED ACCUACY IS ACHIEVED
RETURN
ELSE
X0=X
ENDIF
ENDDO
RETURN
END

FUNCTION F(X)
IMPLICIT REAL*8(A-H,O-Z)
DATA XK1,XK2,CB1,CB2,W1,W2,H /2*1.,24.9,0.1,2*1.0,100/
CB=X
F=(CB1-CB)*W1/H+(CB2-CB)*W2/H-XK1*CB/((1+XK2*CB)**2)
RETURN
END

FUNCTION DF(X)
IMPLICIT REAL*8(A-H,O-Z)
DATA XK1,XK2,CB1,CB2,W1,W2,H /2*1.,24.9,0.1,2*1.0,100/
CB=X
DF=-W1/H-W2/H-XK1*(1-XK2*CB)/((1+XK2*CB)**3)
RETURN
END

5
A.2.2 Muller's Method (Example Eq. 3.76)

IMPLICIT REAL*8(A-H,O-Z)
! INPUT HERE THE PARAMETERS
PARAMETER(TOL=1D-07,ITMAX=100)
EXTERNAL F
! INPUT INITIAL GUESSES
X0=-0.5
X1=0.
X2=0.5
CALL MULLER (F,X0,X1,X2,TOL,ITMAX,X3)
WRITE(*,*) X3,F(X3)
STOP
END

SUBROUTINE MULLER(F,X0,X1,X2,TOL,ITMAX,X3)
IMPLICIT REAL*8(A-H,O-Z)
DO I=1,ITMAX
S0=X0-X1
S1=X1-X2
A= (F(X0)-F(X2))/(S0*(S0+S1))
A= A-(F(X1)-F(X2))/(S1*S0)
B=(F(X1)-F(X2))*(S0+S1)/(S1*S0)
B=B-(F(X0)-F(X2))*S1/(S0*(S0+S1))
C=F(X2)
DEL=B**2-4*A*C
IF (DEL .LT. 0) THEN
WRITE(*,*) 'COMPLEX ROOTS'
RETURN
ENDIF
DEL=DSQRT(DEL)
IF (B .GE. 0) THEN
SIGN=1.D0
ELSE
SIGN=-1.D0
ENDIF
H=-2*C/(B+SIGN*DEL)
X3=X2+H
IF (DABS(H) .LE. TOL) THEN
RETURN
ELSE
X0=X1
X1=X2
X2=X3
! PRINT ITTERATIONS
WRITE(*,100) I,X0,X1,X2,F(X2), DABS((X2-X1)/X1)
100 FORMAT(1X, 'ITTER#',I3, 3(F10.5,1X), 1X,E12.5, 2X, E10.5)
ENDIF

6
ENDDO
WRITE (*,*) 'MAXIMUM ITERATIONS EXCEEDED'
RETURN
END

FUNCTION F(X)
IMPLICIT REAL*8(A-H,O-Z)
F=(X-5.)**2*(X+1.)
RETURN
END

A.3. FORTRAN PROGRAMS FOR ORDINARY DIFFERENTIAL EQUATIONS

A.3.1 Runge-Kutta Order 4 (Example Eq. 4.65 with initial condition in Eq. 4.67)

IMPLICIT REAL*8(A-H,O-Z)
PARAMETER(T0=0.0,TF=1000.0,N=100,Y0=40.0)
DIMENSION T(N+1),Y(N+1)
CALL RK4(T0,TF,N,Y0,T,Y)
DO I=1,N+1
WRITE(*,*)T(I),Y(I)
ENDDO
STOP
END

SUBROUTINE RK4(T0,TF,N,Y0,T,Y)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION T(N+1),Y(N+1)
H=(TF-T0)/DFLOAT(N)
T(1)=T0
Y(1)=Y0
DO I= 1,N
XK1=F(T(I),Y(I))
XK2=F(T(I)+H/2.,Y(I)+XK1/2.)
XK3=F(T(I)+H/2.,Y(I)+XK2/2.)
XK4=F(T(I)+H,Y(I)+XK3)
Y(I+1)=Y(I)+(XK1+2.*XK2+2.*XK3+XK4)*H/6.
T(I+1)=T(I)+H
ENDDO
RETURN
END

FUNCTION F(T,Y)
IMPLICIT REAL*8(A-H,O-Z)
DATA W1,W2/2*1.D0/
F=W1+W2-0.2*Y**(0.5)
RETURN
END

7
A.3.2 Explicit Euler Method for System of Equations (Example Eqs. 4.65-4.67)

C Euler's method for systems of ODE


IMPLICIT REAL*8(A-H,O-Z)
PARAMETER(T0=0.0,TF=1000.,N=1000,M=2)
DIMENSION Y(M)
EXTERNAL FCN
OPEN(1,FILE='SYSRK4.OUT')
Y(1)=40.D0
Y(2)=0.1D0
CALL SYSEULER(FCN,T0,TF,N,M,Y)
STOP
END

SUBROUTINE SYSEULER(FCN,T0,TF,N,M,Y)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION Y(M),F(M)
STEP=(TF-T0)/DFLOAT(N)
T=T0
WRITE(*,*) T,(Y(J),J=1,M)
DO I=1,N
DO J=1,M
CALL FCN(M,T,Y,F)
Y(J)=Y(J)+STEP*F(J)
ENDDO
WRITE(*,*) T+STEP,(Y(J),J=1,M)
T=T+STEP
ENDDO
RETURN
END

SUBROUTINE FCN(M,T,Y,F)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION Y(M),F(M)
DATA XK1,XK2,CB1,CB2,W1,W2/1.,1.,24.9,0.1,1.,1./
H=Y(1)
CB=Y(2)
F(1)=W1+W2-0.2*H**(0.5)
F(2)=(CB1-CB)*W1/H+(CB2-CB)*W2/H-XK1*CB/((1+XK2*CB)**2)
RETURN
END

A.4. FORTRAN PROGRAMS FOR LINEAR REGRESSION

A.4.1 Simple Linear Regression (Example Sec. 6.2.1)

! LINEAR REGRESSION
IMPLICIT REAL*8(A-H,O-Z)
! INPUT THE SIZE OF VECTOR

8
PARAMETER (N=4)
DIMENSION X(N),Y(N),SIGMA(N)
! INPUT THE DATA
X(1)=1/273.
X(2)=1/279.
X(3)=1/291.
X(4)=1/303.
Y(1)=DLOG(5.6/1D05)
Y(2)=DLOG(11.8/1D05)
Y(3)=DLOG(48.8/1D05)
Y(4)=DLOG(208/1D05)
! INPUT THE UNCERTAINTY ON MEASUREMETS
DO I=1,N
SIGMA(I)=1.D0
ENDDO
! START CALCULATIONS
S=0.D0
DO I=1,N
S=S+1/SIGMA(I)**2
ENDDO
SX=0.D0
SY=0.D0
SXX=0.D0
SXY=0.D0
DO I=1,N
SX=SX+X(I)/SIGMA(I)**2
SY=SY+Y(I)/SIGMA(I)**2
SXX=SXX+X(I)**2/SIGMA(I)**2
SXY=SXY+X(I)*Y(I)/SIGMA(I)**2
ENDDO
D=S*SXX-(SX)**2
A=(SXX*SY-SX*SXY)/D
B=(S*SXY-SX*SY)/D
SIGA=(SXX/D)**0.5
SIGB=(S/D)**0.5
SR=0.D0
DO I=1,N
SR=SR+(Y(I)-A-B*X(I))**2
ENDDO
SYX=DSQRT(SR/(N-2))
SUMY=0.D0
DO I=1,N
YMEAN=YMEAN+Y(I)
ENDDO
YMEAN=YMEAN/N
ST=0.D0
DO I=1,N
ST=ST+(Y(I)-YMEAN)**2
ENDDO
SYY=DSQRT(ST/(N-1))

9
R_SQUARE=(1-SR/ST)
WRITE(*,*)'S=',S , ' SX=',SX, ' SY=',SY
WRITE(*,*) 'SXY=',SXY, ' SXX=',SXX
WRITE(*,*) 'COEFFICIENTS', A,B
WRITE(*,*) 'YMEAN=',YMEAN,' ST=', ST,' SYY=',SYY, ' SR=',SR
WRITE(*,*) 'SYX=',SYX, 'R_SQUARE=',R_SQUARE
WRITE(*,*) 'VARIANCES ' ,SIGA, SIGB
STOP
END

A.4.2 Polynomial Regression (Example Sec. 6.3.3)

IMPLICIT REAL*8(A-H,O-Z)
! INPUT PARAMETER SIZE AND REGRESSION ORDER
! N=number of points
! M= order of polynomial +1
PARAMETER (N=7,M=3)
REAL L(M,M),U(M,M)
REAL A(N,M),B(N),X(N),Y(N),SIGMA(N)
REAL AN(M,M),BN(M),AX(N),Z(N)
X(1)=273.15
X(2)=283.15
X(3)=293.15
X(4)=313.15
X(5)=333.15
X(6)=353.15
X(7)=373.15
Y(1)=75.158
Y(2)=75.254
Y(3)=75.339
Y(4)=75.539
Y(5)=75.727
Y(6)=75.915
Y(7)=76.101
DO I=1,N
SIGMA(I)=1.D0
ENDDO
DO I=1,N
DO J=1,M
V=X(I)
A(I,J)=F(J,V)/SIGMA(I)
ENDDO
ENDDO
DO I=1,N
B(I)=Y(I)/SIGMA(I)
ENDDO
C compute A'A
DO I=1,M
DO J=1,M
AN(I,J)=0.D0

10
DO K=1,N
AN(I,J)=AN(I,J)+A(K,I)*A(K,J)
ENDDO
ENDDO
ENDDO
! compute A'B
DO I=1,M
BN(I)=0.D0
DO K=1,N
BN(I)=BN(I)+A(K,I)*B(K)
ENDDO
ENDDO
! Solve A'A X=A'B Using LU decomposition
CALL LU(M,AN,L,U)
CALL FORW(M,L,Z,BN)
CALL SBACK(M,U,Z,AX)
WRITE(*,*)'POLYNOMIAL COEFFICIENTS IN ASCENDING ORDER'
WRITE(*,*) (AX(I),I=1,M)
C COMPUTE VARIANCES
SR=0.D0
DO I=1,N
SUM=0.D0
DO K=1,M
V=X(I)
SUM=SUM+AX(K)*F(K,V)
ENDDO
SR=SR+(Y(I)-SUM)**2
ENDDO
SYX=DSQRT(SR/(N-(M)))
YMEAN=0.D0
DO I=1,N
YMEAN=YMEAN+Y(I)
ENDDO
MEAN=YMEAN/N
ST=0.D0
DO I=1,N
ST=ST+(Y(I)-YMEAN)**2
ENDDO
SY=DSQRT(ST/(N-1))
R=DSQRT(1-SR/ST)
WRITE(*,*) 'R=',R
STOP
END

FUNCTION F(J,V)
IMPLICIT REAL*8(A-H,O-Z)
IF (J .EQ. 1) THEN
F=1.
ELSE

11
F= V**(J-1)
ENDIF
RETURN
END

SUBROUTINE LU(N,A,L,U)
C SUBROUTINE TO PERFORM DOLITTLE FACTORIZATION: A=LU
IMPLICIT REAL*8(A-H,O-Z)
REAL A(N,N),L(N,N),U(N,N)
DO I = 1,N
L(I,I)=1.
ENDDO
U(1,1)=A(1,1)
IF(U(1,1).EQ.0.)THEN
WRITE(1,*)'LU FACTORIZATION IS IMPOSSIBLE'
RETURN
ENDIF
DO J =2,N
U(1,J)=A(1,J)
L(J,1)=A(J,1)/U(1,1)
ENDDO
DO I = 2, N-1
S=0.
DO K = 1, I-1
S=S+L(I,K)*U(K,I)
ENDDO
U(I,I)= A(I,I)-S
IF(U(I,I).EQ.0.)THEN
WRITE(1,*)'LU FACTORIZATION IS IMPOSSIBLE'
RETURN
ENDIF
DO J = I+1, N
S1=0.
S2=0.
DO K = 1, I-1
S1=S1+L(I,K)*U(K,J)
S2=S2+L(J,K)*U(K,I)
U(I,J)=A(I,J)-S1
L(J,I)=(A(J,I)-S2)/U(I,I)
ENDDO
ENDDO
ENDDO
SS=0
DO K = 1,N-1
SS=SS+L(N,K)*U(K,N)
U(N,N)=A(N,N)-SS
ENDDO
IF(U(N,N).EQ.0) THEN
WRITE(1,*)' THE MATRIX A IS SINQULAR'

12
ENDIF
RETURN
END

SUBROUTINE FORW(N,L,Z,B)
IMPLICIT REAL*8(A-H,O-Z)
REAL L(N,N),Z(N),B(N)
Z(1)=B(1)
DO I =2,N
S3=0.
DO J =1,I-1
S3=S3+L(I,J)*Z(J)
ENDDO
Z(I)=B(I)-S3
ENDDO
RETURN
END

SUBROUTINE SBACK(N,U,Z,X)
IMPLICIT REAL*8(A-H,O-Z)
REAL U(N,N),Z(N),X(N)
X(N)=Z(N)/U(N,N)
DO K = N-1,1,-1
S4=0.
DO J=K+1,N
S4=S4+U(K,J)*X(J)
ENDDO
X(K)=(Z(K)-S4)/U(K,K)
ENDDO
RETURN
END

A.4.3 Multiple Linear Regression (y=a0+a1x1+a2x2+a3x3+..) (Example Sec.6.4.2)

IMPLICIT REAL*8(A-H,O-Z)
! INPUT PARAMETER AND THE SIZE
PARAMETER (M=3,N=10)
REAL A(N,M),B(N),X(M,N),Y(N),SIGMA(N)
REAL AN(M,M),BN(M),AX(M)
REAL L(M,M),U(M,M),Z(M)
OPEN(2,FILE='BOOK17.DAT')
X(1,1)=6.0
X(1,2)=8.0
X(1,3)=10.0
X(1,4)=12.0
X(1,5)=16.0
X(1,6)=10.0
X(1,7)=10.0
X(1,8)=10.0

13
X(1,9)=10.0
X(1,10)=10.0
X(2,1)=20.0
X(2,2)=20.0
X(2,3)=20.0
X(2,4)=20.0
X(2,5)=20.0
X(2,6)=10.0
X(2,7)=20.0
X(2,8)=40.0
X(2,9)=60.0
X(2,10)=100.0
Y(1)=0.5D-03
Y(2)=0.63D-03
Y(3)=0.83D-03
Y(4)=1.0D-03
Y(5)=1.28D-03
Y(6)=0.33D-03
Y(7)=0.80D-03
Y(8)=1.50D-03
Y(9)=2.21D-03
Y(10)=3.33D-03
DO I=1,2
DO J=1,N
X(I,J)=ALOG(X(I,J))
ENDDO
ENDDO
DO I=1,N
Y(I)=ALOG(Y(I))
ENDDO
DO I=1,N
SIGMA(I)=1.D0
ENDDO
DO I=1,N
A(I,1)=1.D0
ENDDO
DO I=1,N
DO J=2,M
A(I,J)=X(J-1,I)/SIGMA(I)
ENDDO
ENDDO
DO I=1,N
B(I)=Y(I)/SIGMA(I)
ENDDO
! A'A
DO I=1,M
DO J=1,M
AN(I,J)=0.D0
DO K=1,N
AN(I,J)=AN(I,J)+A(K,I)*A(K,J)

14
ENDDO
ENDDO
ENDDO
! A'B
DO I=1,M
BN(I)=0.D0
DO K=1,N
BN(I)=BN(I)+A(K,I)*B(K)
ENDDO
ENDDO
! SOLVE (A'A)(AX)=(A'B)
CALL LU(M,AN,L,U)
CALL FORW(M,L,Z,BN)
CALL SBACK(M,U,Z,AX)
WRITE(*,*) 'COEFFCIENTS '
WRITE(*,*) (AX(I),I=1,M)
SR=0.D0
DO I=1,N
SUM=AX(1)
DO K=2,M
SUM=SUM+AX(K)*X(K-1,I)
ENDDO
SR=SR+(Y(I)-SUM)**2
ENDDO
SYX=DSQRT(SR/(N-(M+1)))
YMEAN=0.D0
DO I=1,N
YMEAN=YMEAN+Y(I)
ENDDO
YMEAN=YMEAN/N
ST=0.D0
DO I=1,N
ST=ST+(Y(I)-YMEAN)**2
ENDDO
R=DSQRT(1-SR/ST)
WRITE(*,*) 'SR=',SR,'SYX=',SYX,'ST=',ST,'R=',R
STOP
END

SUBROUTINE LU(N,A,L,U)
! SUBROUTINE TO PERFORM DOLITTLE FACTORIZATION: A=LU
IMPLICIT REAL*8(A-H,O-Z)
REAL A(N,N),L(N,N),U(N,N)
DO I = 1,N
L(I,I)=1.
ENDDO
U(1,1)=A(1,1)
IF(U(1,1).EQ.0.)THEN

15
WRITE(1,*)'LU FACTORIZATION IS IMPOSSIBLE'
RETURN
ENDIF
DO J =2,N
U(1,J)=A(1,J)
L(J,1)=A(J,1)/U(1,1)
ENDDO
DO I = 2, N-1
S=0.
DO K = 1, I-1
S=S+L(I,K)*U(K,I)
ENDDO
U(I,I)= A(I,I)-S
IF(U(I,I).EQ.0.)THEN
WRITE(1,*)'LU FACTORIZATION IS IMPOSSIBLE'
RETURN
ENDIF
DO J = I+1, N
S1=0.
S2=0.
DO K = 1, I-1
S1=S1+L(I,K)*U(K,J)
S2=S2+L(J,K)*U(K,I)
U(I,J)=A(I,J)-S1
L(J,I)=(A(J,I)-S2)/U(I,I)
ENDDO
ENDDO
ENDDO
SS=0
DO K = 1,N-1
SS=SS+L(N,K)*U(K,N)
U(N,N)=A(N,N)-SS
ENDDO
IF(U(N,N).EQ.0) THEN
WRITE(1,*)' THE MATRIX A IS SINQULAR'
ENDIF
RETURN
END

SUBROUTINE FORW(N,L,Z,B)
! SUBROUTINE TO SOLVE LZ=B USING FORWARD SUBSTITUTION
IMPLICIT REAL*8(A-H,O-Z)
REAL L(N,N),Z(N),B(N)
Z(1)=B(1)
DO I =2,N
S3=0.
DO J =1,I-1
S3=S3+L(I,J)*Z(J)
ENDDO
Z(I)=B(I)-S3

16
ENDDO
RETURN
END

SUBROUTINE SBACK(N,U,Z,X)
! SUBROUTINE TO SOLVE UX=Z USING BACK SUBSTITUTION
IMPLICIT REAL*8(A-H,O-Z)
REAL U(N,N),Z(N),X(N)
X(N)=Z(N)/U(N,N)
DO K = N-1,1,-1
S4=0.
DO J=K+1,N
S4=S4+U(K,J)*X(J)
ENDDO
X(K)=(Z(K)-S4)/U(K,K)
ENDDO
RETURN
END

A.5. FORTRAN PROGRAMS FOR OPTIMIZATION

A.5.1 GOLDEN SEARCH METHOD (Example Eq. 7.23)

IMPLICIT REAL*8(A-H,O-Z)
! Maximization problem
! For minimization problem Define the Objective function !
! without F=-F in the function below
! Input the initial range [A, B] of the solution
A=0.15
B=0.31
! Input maximum number of iterations and Tolerance
ITMAX=100.
TOL=1D-05
! Start procedure
FS=(3.D0-DSQRT(5.D0))/2.D0
DO K=1,ITMAX
XL=(B-A)
X1=A+FS*XL
X2=B-FS*XL
WRITE(*,99)K, A,B
IF (DABS(A-B)/DABS(A) .LE. TOL) THEN
write(*,*)' convergence', 'Iter',K,'Value of X',X2
stop
ENDIF
IF (F(X1) .GT. F(X2)) THEN
A=X1
ELSE
B=X2
ENDIF

17
ENDDO
99 FORMAT(1x,I3,1X,2(F7.5,1X))
STOP
END

FUNCTION F(X)
IMPLICIT REAL*8(A-H,O-Z)
XK=0.5
BA0=0.01
F=(X**XK-X)/(1-XK)+BA0*X**XK
F=−F
RETURN
END

18
314

You might also like