Sub FN2f(M As Long, N As Long, X() As Double, Nf As Long, Fvec() As Double)
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
For I = 0 To M - 1
Fvec(I) = Ydata(I) - X(0) * (1 - Exp(-Xdata(I) * X(1)))
Next
End Sub
Sub Ex_N2f1_r()
Const M = 4, N = 2
Dim X(N - 1) As Double, Info As Long
Dim YY(M - 1) As Double, IRev As Long
X(0) = 500: X(1) = 0.0001
IRev = 0
Do
Call
N2f1_r(M, N, X(), Info, YY(), IRev)
If IRev = 1 Then
Call FN2f(M, N, X(), 0, YY())
End If
Loop While IRev <> 0
Debug.Print "C1, C2 =", X(0), X(1)
Debug.Print "Info =", Info
End Sub
Sub N2f1_r(M As Long, N As Long, X() As Double, Info As Long, YY() As Double, IRev As Long, Optional NFcall As Long, Optional NFjcall As Long, Optional Niter As Long)
非線形最小二乗法 (適応アルゴリズム) (ヤコビ行列計算不要) (シンプルドライバ) (リバースコミュニケーション版)