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_Chkder()
Const M = 2, N = 2
Dim X(N - 1) As Double, Fvec(N - 1) As Double, Fjac(N - 1, N - 1) As Double
Dim Xp(N - 1) As Double, Fvecp(N - 1) As Double, Err(N - 1) As Double
Dim Mode As Long, Info As Long
X(0) = 1: X(1) = 1
'-- Check 1
Mode = 1
Call Chkder(M, N, X(), Fvec(), Fjac(), Xp(), Fvecp(), Mode, Err(), Info)
'-- Check 2
Mode = 2
Call FHybrj(N, X(), Fvec(), Fjac(), 1)
Call FHybrj(N, X(), Fvec(), Fjac(), 2)
Call FHybrj(N, Xp(), Fvecp(), Fjac(), 1)
Call Chkder(M, N, X(), Fvec(), Fjac(), Xp(), Fvecp(), Mode, Err(), Info)
Debug.Print "Err =", Err(0), Err(1)
Debug.Print "Info =", Info
End Sub