Sub FLmdif(M As Long, N As Long, X() As Double, Fvec() As Double, IFlag As Long)
Dim Xdata(3) As Double, Ydata(3) As Double, I As Long
Ydata(0) = 10.07: Xdata(0) = 77.6
Ydata(1) = 29.61: Xdata(1) = 239.9
Ydata(2) = 50.76: Xdata(2) = 434.8
Ydata(3) = 81.78: Xdata(3) = 760
If IFlag = 1 Or IFlag = 2 Then
For I = 0 To M - 1
Fvec(I) = Ydata(I) - X(0) * (1 - Exp(-Xdata(I) * X(1)))
Next
End If
End Sub
Sub Ex_Lmdif1()
Const M As Long = 4, N As Long = 2
Dim X(N - 1) As Double, Fvec(M - 1) As Double, Tol As Double, Info As Long
Tol = 0.00000001 '1.0e-8
X(0) = 500: X(1) = 0.0001
Call
Lmdif1(AddressOf FLmdif, M, N, X(), Fvec(), Tol, Info)
Debug.Print "C1, C2 =", X(0), X(1)
Debug.Print "Info =", Info
End Sub
Sub Lmdif1(F As LongPtr, M As Long, N As Long, X() As Double, Fvec() As Double, Tol As Double, Info As Long, Optional Info2 As Long)
Nonlinear least squares approximation by Levenberg-Marquardt method (Jacobian not required) (simple d...