forked from navoj/ChemEngNumMeth
-
Notifications
You must be signed in to change notification settings - Fork 1
/
illin.for
121 lines (121 loc) · 3.47 KB
/
illin.for
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
C**************** ABSTRACT **********************************
C
C THIS SUBROUTINE EMPLOYS THE ILLINOIS METHOD FOR SOLUTION
C OF A SINGLE NON LINEAR EQUATION IN ONE UNKNOWN.
C ILLINOIS METHOD IS A MODIFICATION OF THE REGULA FALSI
C METHOD AND IT DEMONSTRATES FASTER CONVERGENCE FOR CONVEX
C FUNCTIONS. IT IS APPLIED ONLY WHEN THE FUNCTION APPROACHES
C THE SOLUTION IN CONVEX FASHION, OTHERWISE THE PROGRAM
C PROCEEDS USING THE NORMAL REGULA FALSI METHOD.
C
C IT IS NECESSARY TO INPUT ONLY ONE GUESS VALUE, AND THE
C FUNCTION EQUATION IS CONTAINED IN THE SUBROUTINE 'F'.
C
C**************** NOMENCLATURE *******************************
C
C XG- INITIAL GUESS VALUE SUPPLIED AS INPUT
C ERLIM- ERROR CRITERIA FOR CONVERGENCE
C X1INT- INTERMEDIATE VALUE FOR BOUNDING THE FUNCTION
C X2INT- VALUE FOUND FOR BOUNDING THE FUNCTION
C XMULT- MULTIPLIER USED ON X1INT IN SEARCHING FOR X2INT
C X1OLD- FIRST WORK VARIABLE FOR CALCULATING THE NEW VALUE
C X2OLD- SECOND WORK VARIABLE FOR CALCULATING THE NEW VALUE
C X1NEW- NEW VALUE CALCULATED USING THE REGULA FALSI METHOD
C X2NEW- NEXT VALUE CALCULATED USING ILLINOIS MODIFICATION
C ERR1- FUNCTION VALUE FOR VARIABLE X1OLD
C ERR2- FUNCTION VALUE FOR VARIABLE X2OLD
C E1NEW- FUNCTION VALUE FOR VARIABLE X1NEW
C E2NEW- FUNCTION VALUE FOR VARIABLE X2NEW
C AI- ALFA FACTOR FOR ILLINOIS METHOD
C TEST- TEST VARIABLE
C ANSWER- THE FINAL CONVERGED VALUE
C
C*****************************************************************
C
SUBROUTINE ILLIN(F,ERLIM,ICMAX,IPRINT,XG)
IMPLICIT REAL*8(A-H,O-Z)
EXTERNAL F
IC=0
CALL F(XG,ERR1)
X1INT=XG
DX=.3*XG
IF(DX.EQ.0.0)DX=.1
X2INT=XG+DX
CALL F(X2INT,ERR2)
IF(DABS(ERR2).GT.DABS(ERR1))DX=-DX
C
C BOUND THE FUNCTION
C
10 X2INT=X1INT+DX
CALL F(X2INT,ERR2)
TEST=ERR1*ERR2
IF(TEST.LT.0.0)GO TO 100
X1INT=X2INT
ERR1=ERR2
X2INT=X1INT+DX
GO TO 10
C
C BEGIN THE REGULA FALSI METHOD
C -------------------------------
C
100 X2OLD=X2INT
X1OLD=X1INT
AI=0.5
C
C FORMULA FOR REGULA FALSI METHOD
C
20 X1NEW=(ERR2/(ERR2-ERR1))*X1OLD+(ERR1/(ERR1-ERR2))*X2OLD
C
CALL F(X1NEW,E1NEW)
IC=IC+1
C CHECK FOR EXCESSIVE ITERATIONS
IF(IC.GT.ICMAX)WRITE(6,22)
22 FORMAT( ' ILLINOIS METHOD DID NOT CONVERGE')
IF(IC.GT.ICMAX)STOP
C PRINT OUT INTERMEDIATE RESULTS
IF(IPRINT.EQ.1)WRITE(6,11)IC,X1NEW,E1NEW
11 FORMAT( 5X,' IC=',I3,5X,' X=',F7.5,5X,' F(X)=',D10.3)
C
DELTA=X1NEW-X2OLD
IF(DABS(DELTA).LT.ERLIM)GO TO 400
C
C CHECK IF ILLINOIS MODIFICATION IS APPLICABLE
C ----------------------------------------------
C
TEST=ERR2*E1NEW
IF(TEST.GT.0.0)GO TO 200
C
C IF NOT, CONTINUE WITH REGULA FALSI
C
X1OLD=X2OLD
ERR1=ERR2
X2OLD=X1NEW
ERR2=E1NEW
GO TO 20
C
C APPLICATION OF THE ILLINOIS METHOD
C ------------------------------------
C
200 ERR1=ERR1/2.
X2OLD=X1NEW
ERR2=E1NEW
GO TO 20
C
C WRITE THE FINAL ANSWER
C
400 XG=X1NEW
RETURN
END
C
C***************************** ABSTRACT *******************************
C
C THIS SUBROUTINE CALCULATES THE CALCULATES THE VALUE OF F(X)
C GIVEN THE VALUE OF X.
C
C************************************************************************
C
SUBROUTINE F(X,FV)
IMPLICIT REAL*8(A-H,O-Z)
FV=X*DTAN(X)-1.
RETURN
END