Attribute VB_Name = "Module1"
Public Function NewtonExact(Root As Double, TOL As Double, maxIter As Integer, params() As Double) As Integer
Dim iter As Integer
Dim diff As Double
Do
diff = MyFxMu(Root, params()) / MyDerivMu(Root, params())
Root = Root - diff
iter = iter + 1
Loop While (iter <= maxIter) And (Abs(diff) > TOL)
If Abs(diff) <= TOL Then
NewtonExact = True
Else
NewtonExact = False
End If
End Function
Function MyDerivMu(X As Double, params() As Double) As Double
' First Derivative f'(µ)
term1 = params(0) / (params(3) - X)
term2 = params(1) / (params(4) - X)
term3 = params(2) / (params(5) - X)
MyDerivMu = (2 / (params(3) - X)) * term1 * term1 + (2 / (params(4) - X)) * term2 * term2 + (2 / (params(5) - X)) * term3 * term3
End Function
Function MyFxMu(X As Double, params() As Double) As Double
'Function f(µ)
term1 = params(0) / (params(3) - X)
term2 = params(1) / (params(4) - X)
term3 = params(2) / (params(5) - X)
MyFxMu = (term1 * term1 + term2 * term2 + term3 * term3) - 1
End Function