Example 1: Nonlinear Regression using Finite Differences

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);
    }
}


Output

The computed regression coefficients are {58.6065629318535, -0.039586447289031}
The computed rank is 2
The degrees of freedom for error are 13
The sums of squares for error is 49.459299862472
     R from the QR decomposition 
          0                 1          
0  1.87385998175942  1139.92836180938  
1  0                 1139.79754530433  


Link to C# source.