Sub FHybrj(N As Long, X() As Double, Fvec() As Double, Fjac() As Double, IFlag As Long)
If IFlag = 1 Then
Fvec(0) = X(0) ^ 2 - X(1) - 1
Fvec(1) = (X(0) - 2) ^ 2 + (X(1) - 0.5) ^ 2 - 1
ElseIf IFlag = 2 Then
Fjac(0, 0) = 2 * X(0)
Fjac(1, 0) = 2 * X(0) - 4
Fjac(0, 1) = -1
Fjac(1, 1) = 2 * X(1) - 1
End If
End Sub
Sub Ex_Hybrj1_r()
Const N = 2
Dim X(N - 1) As Double, Fvec(N - 1) As Double, XTol As Double, Info As Long
Dim XX(N - 1) As Double, YY(N - 1) As Double, YYpd(N - 1, N - 1) As Double
Dim IRev As Long
X(0) = 0: X(1) = 0
XTol = 0.0000000001 '1.0e-10
IRev = 0
Do
Call Hybrj1_r(N, X(), Fvec(), XTol, Info, XX(), YY(), YYpd(), IRev)
If IRev = 1 Or IRev = 2 Then
Call FHybrj(N, XX(), YY(), YYpd(), IRev)
End If
Loop While IRev <> 0
Debug.Print "X1, X2 =", X(0), X(1)
Debug.Print "Info =", Info
End Sub