NEWS NLREG has been selected as the "Editor"s Pick" by SoftSeek. NLREG is in use at hundreds of universities, laboratories, and government agencies around the world (over 20 countries). For a list of a few organizations using NLREG click here. If you have categorical variables, you may want to use a Decision Tree to model your data. Check out the DTREG Decision Tree Builder. You also should check out the News Rover program that automatically scans Usenet newsgroups, downloads messages of interest to you, decodes binary file attachments, reconstructs files split across multiple messages, and eliminates spam and duplicate files.

## Function Minimization -- Path Of Quickest Descent

This is an example of using NLREG to find the minimum value of a multivariate, nonlinear function.

The time taken for an object to slide down a frictionless guide from position (0,h) to another position (d,0) (i.e., falling through a distance h while moving horizontally a distance d) depends on the path that the object takes as it follows the guide. It turns out that the path that minimizes the descent time is not a straight line from (0,h) to (d,0) but rather a curve called a brachistochrone (Greek for "shortest time") with a steeper slope near the beginning, that gives the object a chance to accelerate quickly, and then a shallower slope further on. (Technically, a brachistochrone is an inverted cycloid.)

Finding the shape of this curve is a classic problem in the branch of mathematics called the Calculus of Variations. The following NLREG example solves a simpler case of this problem: the object slides along a straight guide from (0,1000) to an intermediate position (px,py), and then along another straight guide from (px,py) to (1000,0). What point, (px,py), minimizes the descent time?

```   Title "Two segment path for fastest descent";
Parameter px;              // X coordinate of bend
Parameter py;              // Y coordinate of bend
Constrain px=.1,999;       // px must be in range 0 < px < d
Constrain py=.1,999;       // py must be in range 0 < py < h
Double G=980;              // Acceleration of gravity = 980 cm/sec^2
Double sx=0, sy=1000;      // Starting x and y coordinate
Double ex=1000, ey=0;      // Ending x and y coordinate
Double d1,d2;              // Length of each segment
Double a1,a2;              // Acceleration along each segment
Double t1,t2;              // Fall time along each segment
Double s1;                 // Speed at end of segment 1
/*
*  Determine length of each segment.
*/
d1 = sqrt((px-sx)*(px-sx) + (py-sy)*(py-sy));
d2 = sqrt((px-ex)*(px-ex) + (py-ey)*(py-ey));
/*
*  Determine acceleration for each segment (proportional to slope).
*/
a1 = G*(sy-py)/d1;
a2 = G*(py-ey)/d2;
/*
*  Determine time for segment 1 (starting speed is 0).
*/
t1 = sqrt(2.*d1/a1);
/*
*  Determine speed at end of segment 1.
*/
s1 = a1 * t1;
/*
*  Determine time for segment 2 (speed is s1 at start of segment).
*/
t2 = (sqrt(s1*s1 + 2.*a2*d2) - s1) / a2;
/*
*  Minimize the total fall time.
*/
function t1 + t2;
Data;
```