¡@
'
******************************
'
WEGSTEIN METHOD
'
******************************
Sub
WegsteinMethod(Xpos, Ypos)
Cls
Dim XA(10),
YA(10)
'
----------------------
'
DEFINE THE PROBLEM
'
----------------------
A = 0.11171
B = 0.07697
C = 3000000#
A0 = 16.6037
B0 = 0.2354
R = 0.0827
T = 408#
P = 36#
'
PRELILMINARY CALCULATION
BT = R * T * B0
- A0 - R * C / T / T
GM = -R * T * B0
* B + A * A0 - R * B0 * C / T / T
DET = R * B0 * B
* C / T / T
V = R * T / P
I = 0
'
' START
ITERATION
Print "ITER",
"V", "VC"
'
RTL = 0.000001:
'RELATIVE ERROR TOLERANCE
'
'
-------------
'
ITERATION
'
-------------
NC% = 0
Do
VC = (R * T + BT / V + GM / V / V + DET / V / V / V) / P
XC = VC
NR = 1
I = I + 1
Print I, V, VC
Call Wegstein(X, XC, RTL, NR, XA, YA, NC)
V = X
Loop While NC
> 1
End Sub
Sub Wegstein(X,
XC, RTL, NR, XA, YA, ConvergentFlag%)
'
'
----------------------------------------------
'
SUBROUTINE WEGSTEIN
'
---------------------------------------------
'
'
XA,YA = RESERVED VALUES FOR
MULTIFUNCTION CALLS
'
RTL = REL. TOLERANCE
'
ConvergentFlag%
¡¥
= CONVERGE INDEX
'
1. CONVERGENT
'
2. NOT CONVERGENT
'
X
= TRIAL VALUE
'
XC = CALCULATED VALAUE
'
NR = ROUTINE CALL
NUMBER FOR MULTIPLE EQNS
'
If (Abs((X - XC)
/ (X + XC)) < RTL) Then
X = XC
ConvergentFlag% = 1
ElseIf
ConvergentFlag% <= 1 Then
XA(NR) = X
YA(NR) = XC
X = XC
ConvergentFlag% = 2
Else
XT = (XA(NR) * XC - YA(NR) * X) / (XA(NR) - X + XC - YA(NR))
XA(NR) = X
YA(NR) = XC
X = XT
End If