Download | Documentation | Examples | Requirements | Release Notes

Werner Wothke

Uncmin++ contains C++ implementations of the UNCMIN routines for unconstrained optimization and the Fmin function for univariate minimization using Brent's method. Uncmin++ allows the user to select from various options for calculating or approximating derivatives and for the step selection strategy. The gradient vector may be supplied by the user or calculated by finite differences. The Hessian matrix may be calculated either analytically or by finite differences (Newton's method) or the BFGS update (quasi-Newton). Options for step selection include line search, double dogleg trust region, and a hookstep trust region method. Any combination of these options is permitted.

The Uncmin class is a translation of Uncmin_F77.java into C++ by Brad Hanson (2001). Uncmin_F77.java was translated into Java from the FORTRAN UNCMIN routines by Steve Verrill. The original UNCMIN routines in FORTRAN are available from the Guide to Available Mathematical Software web site as OPTIF9 and OPTIF0. The UNCMIN routines are based on algorithms presented in Appendix A of:

Dennis, J.E., & Schnabel, R.B. (1996). Numerical methods for unconstrained optimization and nonlinear equations. Philadelphia: Society for Industrial and Applied Mathematics.

The Fmin function is a translation of Fmin.java into C++. Fmin.java was translated into Java from the FORTRAN FMIN function by Steve Verrill. The original FMIN function in FORTRAN is available from Netlib.

Please contact me if you have any questions or comments about this software


Download - Zip archive containing Uncmin.h, Fmin.h, this HTML file, and an examples directory.


The documentation for Uncmin++ and Fmin.h consists of this file as well as comments in the source files. The source file comments were written to be compatible with the doxygen documentation system. The on-line source code documentation contains descriptions of each file, class, and function that are part of UNCMIN. This documentation is also contained in the doc directory of the UNCMIN distribution.


The examples directory contains four examples of using Uncmin. Two of the examples perform nonlinear regression for data sets from the Statistical Reference Datasets Project (StRD). The other examples are Uncmin test cases of finding minima of uni-dimensional and two-diminsional algebraic functions, exercising several minimization options offered by Uncmin.

The following files are included in the examples directory:


Two template parameters to the UNCMIN class correspond to types for vector and matrix classes. Classes implementing vectors and matrices are required for using the UNCMIN class. The documentation at the top of Uncmin.h documents the requirements of the vector and matrix classes used as template parameters to Uncmin. Two freely available packages which contain vector and matrix classes which meet the requirements for use with Uncmin are the Template Numerical Toolkit (TNT) and the Simple C++ Numerical Toolkit (SCPPNT). The programs included in the Examples directory demonstrate using the SCPPNT classes.

Release Notes

Version 080309 (March 9, 2008)

Edited doxygen-compatible documentation, second pass. Fmin.h has been included in the distribution package. Also addded were descriptive comments, as much as possible, and any useful information from the existing FORTRAN and Java documentation sets was incorporated in the C++ version. Now out-dated FORTRAN and Java documentations were removed.

Release 080106 (Release Date: Jan 6, 2008)

The current version of Uncmin.h has been reformatted for readability. The comment sections of Uncmin.h were tagged for doxygen documentation. Two lines of code were changed, to match refactored SCPPNT functions and to ensure that a step-size variable is always initialized.

Uncmin.h and the programs in the Examples folder were successfully compiled and tested with gcc version 3.4.4 under Windows Vista using the Cygwin version 1.5.25-7 tool chains.

Earlier Releases:

Brad Hanson compiled earlier releases of Uncmin using the CodeWarrior 6.0 compiler on Mac OS and Windows NT, gcc 2.95.2 on Linux, and the free Borland 5.5 compiler on Windows 95/NT. To use Uncmin with Microsoft Visual C++ 6 the symbols BOOST_NO_STDC_NAMESPACE and BOOST_NO_LIMITS need to be defined.

Other Software on this website

Smallwaters.com Home Page

URL of this page: http://www.smallwaters.com/software/cpp/uncmin.html

Last updated: November 18, 2014