¡@

'     ******************************

'      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

End Sub