In this example a nonlinear model is fitted. The derivatives are obtained by finite differences.
using System; using Imsl.Math; using Imsl.Stat; public class NonlinearRegressionEx1 : NonlinearRegression.IFunction { public bool f(double[] theta, int iobs, double[] frq, double[] wt, double[] e) { double[] ydata = new double[]{ 54.0, 50.0, 45.0, 37.0, 35.0, 25.0, 20.0, 16.0, 18.0, 13.0, 8.0, 11.0, 8.0, 4.0, 6.0}; double[] xdata = new double[]{ 2.0, 5.0, 7.0, 10.0, 14.0, 19.0, 26.0, 31.0, 34.0, 38.0, 45.0, 52.0, 53.0, 60.0, 65.0}; bool iend; int nobs = 15; if (iobs < nobs) { wt[0] = 1.0; frq[0] = 1.0; iend = true; e[0] = ydata[iobs] - theta[0] * Math.Exp(theta[1] * xdata[iobs]); } else { iend = false; } return iend; } public static void Main(String[] args) { int nparm = 2; double[] theta = new double[]{60.0, - 0.03}; NonlinearRegression regression = new NonlinearRegression(nparm); regression.Guess = theta; NonlinearRegression.IFunction fcn = new NonlinearRegressionEx1(); double[] coef = regression.Solve(fcn); Console.Out.WriteLine ("The computed regression coefficients are {" + coef[0] + ", " + coef[1] + "}"); Console.Out.WriteLine("The computed rank is " + regression.Rank); Console.Out.WriteLine("The degrees of freedom for error are " + regression.DFError); Console.Out.WriteLine("The sums of squares for error is " + regression.GetSSE()); new PrintMatrix("R from the QR decomposition ").Print(regression.R); } }
The computed regression coefficients are {58.6065629385189, -0.0395864472964795} The computed rank is 2 The degrees of freedom for error are 13 The sums of squares for error is 49.4592998624719 R from the QR decomposition 0 1 0 1.87385998095046 1139.92835934133 1 0 1139.79755002385Link to C# source.