Return Values from User-Supplied Functions

All values returned by user-supplied functions must be valid real numbers. It is the user’s responsibility to check that the values returned by a user-supplied function do not contain NaN, infinity, or negative infinity values.

In addition to the techniques described below, it is also possible to instruct the IMSL C Numerical Library to return control to the calling program in case an unrecoverable error occurs within a user-supplied function. See function imsl_set_user_fcn_return_flag for a description of this feature.

Example

 

        #include <imsl.h>

        #include <math.h>

 

        void fcn(int, int, float[], float[]);

        int main()

        {

            int m=3, n=1;

            float *result, fx[3];

            float xguess[]={1.0};

            result = imsl_f_nonlin_least_squares(fcn, m, n, IMSL_XGUESS,

                xguess, 0);

            fcn(m, n, result, fx);

            /* Print results */

            imsl_f_write_matrix("The solution is", 1, 1, result, 0);

            imsl_f_write_matrix("The function values are", 1, 3, fx, 0);

        }

 

        void fcn(int m, int n, float x[], float f[])

        {

            int i;

            float y[3] = {2.0, 4.0, 3.0};

            float t[3] = {1.0, 2.0, 3.0};

            for (i=0; i<m; i++)

            {

                /*      check for x=0    

                do not want to return infinity to nonlin_least_squares    */

                if (x[0] == 0.0) {

                    f[i] = 10000.;

                } else {

                    f[i] = t[i]/x[0] - y[i];

                }

            }

        }