<?xml-stylesheet type="text/xsl" href="../styles/pmathml.xsl"?>
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:dsi="http://www.w3.org/1999/xlink" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:space="preserve"><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"/><title>E04 Chapter Introduction : NAG Library, Mark 23</title><link rel="stylesheet" href="../styles/libdoc.css" type="text/css"/><script type="text/javascript">
   function showLevel(_levelId){
    var thisLevel = document.getElementById(_levelId);
    var thisplus = document.getElementById( _levelId.concat('plus'));
    var thisminus = document.getElementById( _levelId.concat('minus'));
    if(thisLevel.style.display != "block"){
     thisLevel.style.display = "block";
     thisplus.style.display = "none";
     thisminus.style.display = "inline";
     }
    else{
     thisLevel.style.display = "none";
     thisminus.style.display = "none";
     thisplus.style.display = "inline";
     }
    }
  </script></head><body><hr/><div><a class="chap" href="e04conts.xml">E04 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/E04/e04intro.pdf">E04 Chapter Introduction (PDF version)</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div><hr/><h1 class="libdoc">NAG Library Chapter Introduction<br/><br/>E04 &#8211; Minimizing or Maximizing a Function</h1><div class="htmltoc">
<h2 class="htmltoc"><span class="htmltochead" onclick="showLevel('htmltoc');"><span class="htmltocplus" id="htmltocplus">+</span><span class="htmltocminus" id="htmltocminus">&#8722;</span></span>&#160;Contents</h2>
<div class="htmltocitem" id="htmltoc">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#scope">1&#160;&#160;<b>Scope of the Chapter</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground');"><span class="htmltocplus" id="tocbackgroundplus">+</span><span class="htmltocminus" id="tocbackgroundminus">&#8722;</span></span>
<a class="htmltoc" href="#background">2&#160;&#160;<b>Background to the Problems</b></a>
<div class="htmltocitem" id="tocbackground">
<div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground1');"><span class="htmltocplus" id="tocbackground1plus">+</span><span class="htmltocminus" id="tocbackground1minus">&#8722;</span></span>
<a class="htmltoc" href="#background1">2.1&#160;&#160;<b>Types of Optimization Problems</b></a>
<div class="htmltocitem" id="tocbackground1">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background11">2.1.1&#160;&#160;<b>Unconstrained minimization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background12">2.1.2&#160;&#160;<b>Nonlinear least squares problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background13">2.1.3&#160;&#160;<b>Minimization subject to bounds on the variables</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background14">2.1.4&#160;&#160;<b>Minimization subject to linear constraints</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background15">2.1.5&#160;&#160;<b>Minimization subject to nonlinear constraints</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background16">2.1.6&#160;&#160;<b>Minimization subject to bounds on the objective function</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#multiobjectiveoptimization">2.1.7&#160;&#160;<b>Multi-objective optimization</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground2');"><span class="htmltocplus" id="tocbackground2plus">+</span><span class="htmltocminus" id="tocbackground2minus">&#8722;</span></span>
<a class="htmltoc" href="#background2">2.2&#160;&#160;<b>Geometric Representation and Terminology</b></a>
<div class="htmltocitem" id="tocbackground2">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background21">2.2.1&#160;&#160;<b>Gradient vector</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background22">2.2.2&#160;&#160;<b>Hessian matrix</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background23">2.2.3&#160;&#160;<b>Jacobian matrix; matrix of constraint normals</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground3');"><span class="htmltocplus" id="tocbackground3plus">+</span><span class="htmltocminus" id="tocbackground3minus">&#8722;</span></span>
<a class="htmltoc" href="#background3">2.3&#160;&#160;<b>Sufficient Conditions for a Solution</b></a>
<div class="htmltocitem" id="tocbackground3">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background31">2.3.1&#160;&#160;<b>Unconstrained minimization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background32">2.3.2&#160;&#160;<b>Minimization subject to bounds on the variables</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background33">2.3.3&#160;&#160;<b>Linearly-constrained minimization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background34">2.3.4&#160;&#160;<b>Nonlinearly-constrained minimization</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground4');"><span class="htmltocplus" id="tocbackground4plus">+</span><span class="htmltocminus" id="tocbackground4minus">&#8722;</span></span>
<a class="htmltoc" href="#background4">2.4&#160;&#160;<b>Background to Optimization Methods</b></a>
<div class="htmltocitem" id="tocbackground4">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background41">2.4.1&#160;&#160;<b>One-dimensional optimization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background42">2.4.2&#160;&#160;<b>Methods for unconstrained optimization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background43">2.4.3&#160;&#160;<b>Methods for nonlinear least squares problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background44">2.4.4&#160;&#160;<b>Methods for handling constraints</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#multiobjectivemethods">2.4.5&#160;&#160;<b>Methods for handling multi-objective optimization</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground5');"><span class="htmltocplus" id="tocbackground5plus">+</span><span class="htmltocminus" id="tocbackground5minus">&#8722;</span></span>
<a class="htmltoc" href="#background5">2.5&#160;&#160;<b>Scaling</b></a>
<div class="htmltocitem" id="tocbackground5">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background51">2.5.1&#160;&#160;<b>Transformation of variables</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background52">2.5.2&#160;&#160;<b>Scaling the objective function</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background53">2.5.3&#160;&#160;<b>Scaling the constraints</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground6');"><span class="htmltocplus" id="tocbackground6plus">+</span><span class="htmltocminus" id="tocbackground6minus">&#8722;</span></span>
<a class="htmltoc" href="#background6">2.6&#160;&#160;<b>Analysis of Computed Results</b></a>
<div class="htmltocitem" id="tocbackground6">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background61">2.6.1&#160;&#160;<b>Convergence criteria</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background62">2.6.2&#160;&#160;<b>Checking results</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background63">2.6.3&#160;&#160;<b>Monitoring progress</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background64">2.6.4&#160;&#160;<b>Confidence intervals for least squares solutions</b></a>
</div>
</div>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocavailable');"><span class="htmltocplus" id="tocavailableplus">+</span><span class="htmltocminus" id="tocavailableminus">&#8722;</span></span>
<a class="htmltoc" href="#available">3&#160;&#160;<b>Recommendations on Choice and Use of Available Routines</b></a>
<div class="htmltocitem" id="tocavailable">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_1">3.1&#160;&#160;<b>Easy-to-use and Comprehensive Routines</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#threadsafety">3.2&#160;&#160;<b>Thread Safe Routines</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_2a">3.3&#160;&#160;<b>Reverse Communication Routines</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_2">3.4&#160;&#160;<b>Service Routines</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_3">3.5&#160;&#160;<b>Function Evaluations at Infeasible Points</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_4">3.6&#160;&#160;<b>Related Problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#variant">3.7&#160;&#160;<b>Choosing Between Variant Routines for Some Problems</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#dtree">4&#160;&#160;<b>Decision Trees</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#index">5&#160;&#160;<b>Functionality Index</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#auxindex">6&#160;&#160;<b>Auxiliary Routines Associated with Library Routine Parameters</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#withdrawn">7&#160;&#160;<b>Routines Withdrawn or Scheduled for Withdrawal</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#references">8&#160;&#160;<b>References</b></a>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="scope" id="scope"/>1&#160;&#160;Scope of the Chapter</h2>
<div class="paramtext">An optimization problem involves minimizing a function (called the
<b>objective function</b>) of several variables, possibly subject to
restrictions on the values of the variables defined by a set of
<b>constraint functions</b>.  Most routines in the Library are
concerned with function <b>minimization</b> only, since the problem of
maximizing a given objective function <span class="italic">F(x)</span> is equivalent to
minimizing
<m:math><m:mrow><m:mo>-</m:mo><m:mi>F</m:mi></m:mrow><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.
Some routines allow you to specify whether you are solving a minimization or
maximization problem, carrying out the required transformation of the objective
function in the latter case.</div><div class="paramtext">In general routines in this chapter find a local minimum of a function <m:math><m:mi>f</m:mi></m:math>, that is a point <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;s.t. for all <m:math><m:mi>x</m:mi></m:math>&#160;near <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup><m:mtext>&#160;</m:mtext><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&#8805;</m:mo><m:mi>f</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:math>.</div><div class="paramtext">The <a class="chap" href="../E05/e05conts.xml">Chapter E05</a> contains routines to find the global minimum of a function <m:math><m:mi>f</m:mi></m:math>. At a global minimum <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup><m:mtext>&#160;</m:mtext><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&#8805;</m:mo><m:mi>f</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:math>&#160;for all <m:math><m:mi>x</m:mi></m:math>.</div><div class="paramtext">The <a class="chap" href="../H/hconts.xml">Chapter H</a> contains routines typically regarded as belonging to the field of operations research.</div><div class="paramtext">This introduction is only a brief guide to the subject of optimization designed for the casual user.  Anyone with a difficult or protracted problem to solve will find it beneficial to consult a more detailed text, such as <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a> or <a class="ref" href="#ref224">Fletcher (1987)</a>.</div><div class="paramtext">If you are unfamiliar with the mathematics of the subject you may find some sections difficult at first reading; if so, you should <b>concentrate</b> on <a class="sec" href="#background1">Sections 2.1</a>, <a class="sec" href="#background2">2.2</a>, <a class="sec" href="#background5">2.5</a>, <a class="sec" href="#background6">2.6</a> and <a class="sec" href="#available">3</a>.</div><h2 class="standard"><a class="sec" name="background" id="background"/>2&#160;&#160;Background to the Problems</h2><h3 class="standard"><a class="sec" name="background1" id="background1"/>2.1&#160;&#160;Types of Optimization Problems</h3>
<div class="paramtext">The solution of optimization problems by a single, all-purpose, method is cumbersome and inefficient.  Optimization problems are therefore classified into particular categories, where each category is defined by the properties of the objective and constraint functions, as illustrated by some examples below.
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left" style="width:24em;"><b>Properties of Objective Function</b></td>
    <td class="libdoc" valign="top" align="left" style="width:24em;"><b>Properties of Constraints</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left" style="width:24em;">Nonlinear</td>
    <td class="libdoc" valign="top" align="left" style="width:24em;">Nonlinear</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left" style="width:24em;">Sums of squares of nonlinear functions</td>
    <td class="libdoc" valign="top" align="left" style="width:24em;">Sparse linear</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left" style="width:24em;">Quadratic</td>
    <td class="libdoc" valign="top" align="left" style="width:24em;">Linear</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left" style="width:24em;">Sums of squares of linear functions</td>
    <td class="libdoc" valign="top" align="left" style="width:24em;">Bounds</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left" style="width:24em;">Linear</td>
    <td class="libdoc" valign="top" align="left" style="width:24em;">None</td>
   </tr>
  </tbody>
 </table></div>
For instance, a specific problem category involves the minimization of a nonlinear objective function subject to bounds on the variables.  In the following sections we define the particular categories of problems that can be solved by routines contained in this chapter.  Not every category is given special treatment in the current version of the Library; however, the long-term objective is to provide a comprehensive set of routines to solve problems in all such categories.</div><h4 class="standard"><a class="sec" name="background11" id="background11"/>2.1.1&#160;&#160;Unconstrained minimization</h4>
<div class="paramtext">In unconstrained minimization problems there are no constraints on the variables.  The problem can be stated mathematically as follows:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:munder><m:mi mathvariant="normal">minimize</m:mi><m:mi>x</m:mi></m:munder><m:mspace width="0.25em"/><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>x</m:mi><m:mo>&#8712;</m:mo><m:msup><m:mi>R</m:mi><m:mi>n</m:mi></m:msup></m:math>, that is, <m:math>
 <m:mi>x</m:mi>
 <m:mo>=</m:mo>
 <m:msup><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>x</m:mi><m:mi>n</m:mi></m:msub></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math>.</div><h4 class="standard"><a class="sec" name="background12" id="background12"/>2.1.2&#160;&#160;Nonlinear least squares problems</h4>
<div class="paramtext">Special consideration is given to the problem for which the function to be minimized can be expressed as a sum of squared functions.  The least squares problem can be stated mathematically as follows:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:munder><m:mi mathvariant="normal">minimize</m:mi><m:mi>x</m:mi></m:munder><m:mspace width="0.25em"/>
<m:mfenced open="{" close="}" separators=""><m:msup><m:mi>f</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>f</m:mi><m:mo>=</m:mo><m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:mi>m</m:mi></m:munderover><m:msubsup><m:mi>f</m:mi><m:mi>i</m:mi><m:mn>2</m:mn></m:msubsup><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mfenced>
<m:mtext>, &#8195;</m:mtext><m:mi>x</m:mi><m:mo>&#8712;</m:mo><m:msup><m:mi>R</m:mi><m:mi>n</m:mi></m:msup>
</m:math></td><td class="formula2"/></tr></table></div>

where the <m:math><m:mi>i</m:mi></m:math>th element of the <m:math><m:mi>m</m:mi></m:math>-vector <m:math><m:mi>f</m:mi></m:math>&#160;is the function <m:math><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.</div><h4 class="standard"><a class="sec" name="background13" id="background13"/>2.1.3&#160;&#160;Minimization subject to bounds on the variables</h4>
<div class="paramtext">These problems differ from the unconstrained problem in that at least one of the variables is subject to a simple bound (or restriction) on its value, e.g., <m:math><m:msub><m:mi>x</m:mi><m:mn>5</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mn>10</m:mn></m:math>, but no constraints of a more general form are present.</div><div class="paramtext">The problem can be stated mathematically as follows:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:munder><m:mi mathvariant="normal">minimize</m:mi><m:mi>x</m:mi></m:munder><m:mspace width="0.25em"/>
<m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mtext>, &#8195;</m:mtext><m:mi>x</m:mi><m:mo>&#8712;</m:mo><m:msup><m:mi>R</m:mi><m:mi>n</m:mi></m:msup>
</m:math></td><td class="formula2"/></tr></table></div>

subject to <m:math><m:msub><m:mi>l</m:mi><m:mi mathvariant="italic">i</m:mi></m:msub><m:mo>&#8804;</m:mo><m:msub><m:mi>x</m:mi><m:mi mathvariant="italic">i</m:mi></m:msub><m:mo>&#8804;</m:mo><m:msub><m:mi>u</m:mi><m:mi mathvariant="italic">i</m:mi></m:msub></m:math>, for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>.</div><div class="paramtext">This format assumes that upper and lower bounds exist on all the variables.  By conceptually allowing <m:math><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mo>+</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>&#160;and <m:math><m:msub><m:mi>l</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>&#160;all the variables need not be restricted.</div><h4 class="standard"><a class="sec" name="background14" id="background14"/>2.1.4&#160;&#160;Minimization subject to linear constraints</h4>
<div class="paramtext">A general linear constraint is defined as a constraint function that is linear in more than one of the variables, e.g., <m:math><m:mn>3</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo><m:mn>2</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>&#8805;</m:mo><m:mn>4</m:mn></m:math>.  The various types of linear constraint are reflected in the following mathematical statement of the problem:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:munder><m:mi mathvariant="normal">minimize</m:mi><m:mi>x</m:mi></m:munder><m:mspace width="0.25em"/>
<m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mtext>, &#8195;</m:mtext><m:mi>x</m:mi><m:mo>&#8712;</m:mo><m:msup><m:mi>R</m:mi><m:mi>n</m:mi></m:msup>
</m:math></td><td class="formula2"/></tr></table></div>

subject to the
<div class="tablediv"><table class="frame-none" align="center">
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">equality constraints:</td>
    <td class="libdoc" valign="top" align="left"><m:math>
      <m:msubsup><m:mi>a</m:mi><m:mi>i</m:mi><m:mi mathvariant="normal">T</m:mi></m:msubsup>
      <m:mi>x</m:mi><m:mo>=</m:mo><m:msub><m:mi>b</m:mi><m:mi>i</m:mi></m:msub>
     </m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>1</m:mn></m:msub></m:math>;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">inequality constraints:</td>
    <td class="libdoc" valign="top" align="left"><m:math>
      <m:msubsup><m:mi>a</m:mi><m:mi>i</m:mi><m:mi mathvariant="normal">T</m:mi></m:msubsup>
      <m:mi>x</m:mi><m:mo>&#8805;</m:mo><m:msub><m:mi>b</m:mi><m:mi>i</m:mi></m:msub>
     </m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:msub><m:mi>m</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>2</m:mn></m:msub></m:math>;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><m:math>
      <m:msubsup><m:mi>a</m:mi><m:mi>i</m:mi><m:mi mathvariant="normal">T</m:mi></m:msubsup>
      <m:mi>x</m:mi><m:mo>&#8804;</m:mo><m:msub><m:mi>b</m:mi><m:mi>i</m:mi></m:msub>
     </m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:msub><m:mi>m</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>3</m:mn></m:msub></m:math>;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">range constraints:</td>
    <td class="libdoc" valign="top" align="left"><m:math>
      <m:msub><m:mi>s</m:mi><m:mi>j</m:mi></m:msub>
      <m:mo>&#8804;</m:mo>
      <m:msubsup><m:mi>a</m:mi><m:mi>i</m:mi><m:mi mathvariant="normal">T</m:mi></m:msubsup>
      <m:mi>x</m:mi><m:mo>&#8804;</m:mo><m:msub><m:mi>t</m:mi><m:mi>j</m:mi></m:msub>
     </m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:msub><m:mi>m</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>4</m:mn></m:msub><m:mtext>;</m:mtext></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>4</m:mn></m:msub><m:mo>-</m:mo><m:msub><m:mi>m</m:mi><m:mn>3</m:mn></m:msub><m:mtext>;</m:mtext></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">bounds constraints:</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:msub><m:mi>l</m:mi><m:mi>i</m:mi></m:msub><m:mo>&#8804;</m:mo><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>&#8804;</m:mo><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math></td>
   </tr>
  </tbody>
 </table></div>
where each <m:math><m:msub><m:mi>a</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is a vector of length <m:math><m:mi>n</m:mi></m:math>; <m:math><m:msub><m:mi>b</m:mi><m:mi>i</m:mi></m:msub></m:math>, <m:math><m:msub><m:mi>s</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>t</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;are constant scalars; and any of the categories may be empty.</div><div class="paramtext">Although the bounds on <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;could be included in the definition of general linear constraints, we prefer to distinguish between them for reasons of computational efficiency.</div><div class="paramtext">If <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is a linear function, the linearly-constrained problem is termed a linear programming problem (LP); if <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is a quadratic function, the problem is termed a quadratic programming problem (QP).  For further discussion of LP and QP problems, including the dual formulation of such problems, see <a class="ref" href="#ref223">Dantzig (1963)</a>.</div><h4 class="standard"><a class="sec" name="background15" id="background15"/>2.1.5&#160;&#160;Minimization subject to nonlinear constraints</h4>
<div class="paramtext">A problem is included in this category if at least one constraint function is nonlinear, e.g., <m:math><m:msubsup><m:mi>x</m:mi><m:mn>1</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>+</m:mo><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mo>-</m:mo><m:mn>2</m:mn><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>.  The mathematical statement of the problem is identical to that for the linearly-constrained case, except for the addition of the following constraints:
<div class="tablediv"><table class="frame-none" align="center">
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">equality constraints:</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:mn>0</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>5</m:mn></m:msub></m:math>;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">inequality constraints:</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:msub><m:mi>m</m:mi><m:mn>5</m:mn></m:msub><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>5</m:mn></m:msub><m:mo>+</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>6</m:mn></m:msub></m:math>;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">range constraints:</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:msub><m:mi>v</m:mi><m:mi>j</m:mi></m:msub><m:mo>&#8804;</m:mo><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&#8804;</m:mo><m:msub><m:mi>w</m:mi><m:mi>j</m:mi></m:msub></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:msub><m:mi>m</m:mi><m:mn>6</m:mn></m:msub><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>6</m:mn></m:msub><m:mo>+</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>7</m:mn></m:msub></m:math>,</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>m</m:mi><m:mn>7</m:mn></m:msub><m:mo>-</m:mo><m:msub><m:mi>m</m:mi><m:mn>6</m:mn></m:msub></m:math></td>
   </tr>
  </tbody>
 </table></div>
where each <m:math><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is a nonlinear function; <m:math><m:msub><m:mi>v</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>w</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;are constant scalars; and any category may be empty.  Note that we do not include a separate category for constraints of the form <m:math><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>, since this is equivalent to <m:math><m:mtext/><m:mo>-</m:mo><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>.</div><div class="paramtext">Although the general linear constraints could be included in the definition of nonlinear constraints, again we prefer to distinguish between them for reasons of computational efficiency.</div><div class="paramtext">If <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is a nonlinear function, the nonlinearly-constrained problem is termed a nonlinear programming problem (NLP).  For further discussion of NLP problems, see <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a> or <a class="ref" href="#ref224">Fletcher (1987)</a>.</div><h4 class="standard"><a class="sec" name="background16" id="background16"/>2.1.6&#160;&#160;Minimization subject to bounds on the objective function</h4>
<div class="paramtext">In all of the above problem categories it is assumed that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>a</m:mi><m:mo>&#8804;</m:mo><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&#8804;</m:mo><m:mi>b</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>a</m:mi><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>&#160;and <m:math><m:mi>b</m:mi><m:mo>=</m:mo><m:mrow><m:mo>+</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>.  Problems in which <m:math><m:mi>a</m:mi></m:math>&#160;and/or <m:math><m:mi>b</m:mi></m:math>&#160;are finite can be solved by adding an extra constraint of the appropriate type (i.e., linear or nonlinear) depending on the form of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.  Further advice is given in <a class="sec" href="#recomm_3">Section 3.5</a>.</div><h4 class="standard"><a class="sec" name="multiobjectiveoptimization" id="multiobjectiveoptimization"/>2.1.7&#160;&#160;Multi-objective optimization</h4>
<div class="paramtext">Sometimes a problem may have two or more objective functions which are to be optimized at the same time. Such problems are called multi-object, multi-criteria or multi-attribute optimization. If the constraints are linear and the objectives are all linear then the terminology &#8216;goal programming&#8217; is also used.</div><div class="paramtext">Techniques used in this chapter and in <a class="chap" href="../E05/e05conts.xml">Chapter E05</a> may be employed to address such problems.</div><h3 class="standard"><a class="sec" name="background2" id="background2"/>2.2&#160;&#160;Geometric Representation and Terminology</h3>
<div class="paramtext">To illustrate the nature of optimization problems it is useful to consider the following example in two dimensions:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:msup><m:mi>e</m:mi><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:msup><m:mfenced separators=""><m:mn>4</m:mn><m:msubsup><m:mi>x</m:mi><m:mn>1</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>+</m:mo><m:mn>2</m:mn><m:msubsup><m:mi>x</m:mi><m:mn>2</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>+</m:mo><m:mn>4</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo><m:mn>2</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo><m:mn>1</m:mn></m:mfenced><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

(This function is used as the example function in the documentation for the unconstrained routines.)
<div class="figure"><a name="E04INTRO_FIG1" id="E04INTRO_FIG1"/><img src="../figures/e04intro_fig1.png" style="height: 30em" alt="Figure 1"/></div><div class="figure"><b>Figure 1</b></div>
</div><div class="paramtext"><a class="fig" href="#E04INTRO_FIG1">Figure 1</a> is a contour diagram of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.  The contours labelled <m:math><m:msub><m:mi>F</m:mi><m:mn>0</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>F</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>F</m:mi><m:mn>4</m:mn></m:msub></m:math>&#160;are isovalue contours, or lines along which the function <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;takes specific constant values.  The point <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup><m:mo>=</m:mo><m:msup><m:mfenced separators=""><m:mfrac other="small"><m:mn>1</m:mn><m:mn>2</m:mn></m:mfrac><m:mo>,</m:mo><m:mo>-</m:mo><m:mn>1</m:mn></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;is a <b>local unconstrained minimum</b>, that is, the value of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:math>&#160;(<m:math><m:mtext/><m:mo>=</m:mo><m:mn>0</m:mn></m:math>) is less than at all the neighbouring points.  A function may have several such minima.  The lowest of the local minima is termed a <b>global minimum</b>.  In the problem illustrated in <a class="fig" href="#E04INTRO_FIG1">Figure 1</a>, <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;is the only local minimum.  The point <m:math><m:msub><m:mi>x</m:mi><m:mi>s</m:mi></m:msub></m:math>&#160;is said to be a <b>saddle point</b> because it is a minimum along the line AB, but a maximum along CD.</div><div class="paramtext">If we add the constraint <m:math><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>&#160;(a simple bound) to the problem of minimizing <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, the solution remains unaltered.  In <a class="fig" href="#E04INTRO_FIG1">Figure 1</a> this constraint is represented by the straight line passing through <m:math><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, and the shading on the line indicates the unacceptable region (i.e., <m:math><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>).  The region in <m:math><m:msup><m:mi>R</m:mi><m:mi>n</m:mi></m:msup></m:math>&#160;satisfying the constraints of an optimization problem is termed the <b>feasible region</b>.  A point satisfying the constraints is defined as a <b>feasible point</b>.</div><div class="paramtext">If we add the nonlinear constraint <m:math><m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>:</m:mo><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>-</m:mo><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>-</m:mo><m:mfrac other="small"><m:mn>3</m:mn><m:mn>2</m:mn></m:mfrac><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>, represented by the curved shaded line in <a class="fig" href="#E04INTRO_FIG1">Figure 1</a>, then <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;is not a feasible point because <m:math><m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>.  The solution of the new constrained problem is <m:math><m:msub><m:mi>x</m:mi><m:mi>b</m:mi></m:msub><m:mo>&#8771;</m:mo><m:msup><m:mfenced separators=""><m:mn>1.1825</m:mn><m:mo>,</m:mo><m:mo>-</m:mo><m:mn>1.7397</m:mn></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, the feasible point with the smallest function value (where <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>b</m:mi></m:msub></m:mfenced><m:mo>&#8771;</m:mo><m:mn>3.0607</m:mn></m:math>).</div><h4 class="standard"><a class="sec" name="background21" id="background21"/>2.2.1&#160;&#160;Gradient vector</h4>
<div class="paramtext">The vector of first partial derivatives of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is called the <b>gradient vector</b>, and is denoted by <m:math><m:mi>g</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, i.e.,

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>g</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:msup><m:mfenced open="[" close="]" separators=""><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:mrow>
 </m:mfrac><m:mo>,</m:mo><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mrow>
 </m:mfrac><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mi>n</m:mi></m:msub></m:mrow>
 </m:mfrac></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

For the function illustrated in <a class="fig" href="#E04INTRO_FIG1">Figure 1</a>,

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>g</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:mfenced open="[" close="]" separators="">
 <m:mtable>
  <m:mtr>
   <m:mtd><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>+</m:mo><m:msup><m:mi>e</m:mi><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:msup><m:mfenced separators=""><m:mn>8</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo> <m:mn>4</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mfenced></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:msup><m:mi>e</m:mi><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:msup> <m:mfenced separators=""><m:mn>4</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo> <m:mn>4</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo> <m:mn>2</m:mn></m:mfenced></m:mtd>
  </m:mtr>
 </m:mtable>
</m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

The gradient vector is of importance in optimization because it must be zero at an unconstrained minimum of any function with continuous first derivatives.</div><h4 class="standard"><a class="sec" name="background22" id="background22"/>2.2.2&#160;&#160;Hessian matrix</h4>
<div class="paramtext">The matrix of second partial derivatives of a function is termed its <b>Hessian matrix</b>.  The Hessian matrix of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is denoted by <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, and its <m:math><m:mfenced separators=""><m:mi>i</m:mi><m:mo>,</m:mo><m:mi>j</m:mi></m:mfenced></m:math>th element is given by <m:math><m:msup><m:mo>&#8706;</m:mo><m:mn>2</m:mn></m:msup><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>/</m:mo><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>.  If <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;has continuous second derivatives, then <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;must be positive semidefinite at any unconstrained minimum of <m:math><m:mi>F</m:mi></m:math>.</div><h4 class="standard"><a class="sec" name="background23" id="background23"/>2.2.3&#160;&#160;Jacobian matrix; matrix of constraint normals</h4>
<div class="paramtext">In nonlinear least squares problems, the matrix of first partial derivatives of the vector-valued function <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is termed the <b>Jacobian matrix</b> of <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;and its <m:math><m:mfenced separators=""><m:mi>i</m:mi><m:mo>,</m:mo><m:mi>j</m:mi></m:mfenced></m:math>th component is <m:math><m:mo>&#8706;</m:mo><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub><m:mo>/</m:mo><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>.</div><div class="paramtext">The vector of first partial derivatives of the constraint <m:math><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is denoted by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mi>a</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:msup><m:mfenced open="[" close="]" separators=""><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:mrow>
 </m:mfrac><m:mo>,</m:mo><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mrow>
 </m:mfrac><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mi>n</m:mi></m:msub></m:mrow>
 </m:mfrac></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

The matrix whose columns are the vectors <m:math><m:mfenced open="{" close="}" separators=""><m:msub><m:mi>a</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:math>&#160;is termed the <b>matrix of constraint normals</b>.  At a point <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>, the vector <m:math><m:msub><m:mi>a</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:mfenced></m:math>&#160;is orthogonal (normal) to the isovalue contour of <m:math><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;passing through <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>; this relationship is illustrated for a two-dimensional function in <a class="fig" href="#E04INT6">Figure 2</a>.
<div class="figure"><a name="E04INT6" id="E04INT6"/><img src="../figures/E04INT6fl20.png" style="height: 12em" alt="Figure 2"/></div><div class="figure"><b>Figure 2</b></div>
Note that if <m:math><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is a linear constraint involving <m:math>
 <m:msubsup><m:mi>a</m:mi><m:mi>i</m:mi><m:mi mathvariant="normal">T</m:mi></m:msubsup>
 <m:mi>x</m:mi>
</m:math>, then its vector of first partial derivatives is simply the vector <m:math><m:msub><m:mi>a</m:mi><m:mi>i</m:mi></m:msub></m:math>.</div><h3 class="standard"><a class="sec" name="background3" id="background3"/>2.3&#160;&#160;Sufficient Conditions for a Solution</h3>
<div class="paramtext">All nonlinear functions will be assumed to have continuous second derivatives in the neighbourhood of the solution.</div><h4 class="standard"><a class="sec" name="background31" id="background31"/>2.3.1&#160;&#160;Unconstrained minimization</h4>
<div class="paramtext">The following conditions are sufficient for the point <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;to be an unconstrained local minimum of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top"><m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>g</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:mfenced><m:mo>=</m:mo><m:mn>0</m:mn></m:math>; and</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top"><m:math><m:mi>G</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:math>&#160;is positive definite,</td>
</tr></table>
where <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>g</m:mi></m:mfenced></m:math>&#160;denotes the Euclidean length of <m:math><m:mi>g</m:mi></m:math>.</div><h4 class="standard"><a class="sec" name="background32" id="background32"/>2.3.2&#160;&#160;Minimization subject to bounds on the variables</h4>
<div class="paramtext">At the solution of a bounds-constrained problem, variables which are not on their bounds are termed <b>free variables</b>.  If it is known in advance which variables are on their bounds at the solution, the problem can be solved as an unconstrained problem in just the free variables; thus, the sufficient conditions for a solution are similar to those for the unconstrained case, applied only to the free variables.</div><div class="paramtext">Sufficient conditions for a feasible point <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;to be the solution of a bounds-constrained problem are as follows:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top"><m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mover><m:mi>g</m:mi><m:mo>-</m:mo></m:mover><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:mfenced><m:mo>=</m:mo><m:mn>0</m:mn></m:math>; and</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top"><m:math><m:mover><m:mi>G</m:mi><m:mo>-</m:mo></m:mover><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:math>&#160;is positive definite; and</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iii)</td>
<td valign="top"><m:math><m:msub><m:mi>g</m:mi><m:mi>j</m:mi></m:msub><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>&lt;</m:mo><m:mn>0</m:mn><m:mo>,</m:mo><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>; <m:math><m:msub><m:mi>g</m:mi><m:mi>j</m:mi></m:msub><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>&gt;</m:mo><m:mn>0</m:mn><m:mo>,</m:mo><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>l</m:mi><m:mi>j</m:mi></m:msub></m:math>,</td>
</tr></table>
where <m:math><m:mover><m:mi>g</m:mi><m:mo>-</m:mo></m:mover><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is the gradient of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;with respect to the free variables, and <m:math><m:mover><m:mi>G</m:mi><m:mo>-</m:mo></m:mover><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is the Hessian matrix of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;with respect to the free variables.  The extra condition (iii) ensures that <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;cannot be reduced by moving off one or more of the bounds.</div><h4 class="standard"><a class="sec" name="background33" id="background33"/>2.3.3&#160;&#160;Linearly-constrained minimization</h4>
<div class="paramtext">For the sake of simplicity, the following description does not include a specific treatment of bounds or range constraints, since the results for general linear inequality constraints can be applied directly to these cases.</div><div class="paramtext">At a solution <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>, of a linearly-constrained problem, the constraints which hold as equalities are called the <b>active</b> or <b>binding</b> constraints.  Assume that there are <m:math><m:mi>t</m:mi></m:math>&#160;active constraints at the solution <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>, and let <m:math><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;denote the matrix whose columns are the columns of <m:math><m:mi>A</m:mi></m:math>&#160;corresponding to the active constraints, with <m:math><m:mover><m:mi>b</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;the vector similarly obtained from <m:math><m:mi>b</m:mi></m:math>; then

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msup><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup><m:mo>=</m:mo><m:mover><m:mi>b</m:mi><m:mo>^</m:mo></m:mover><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

The matrix <m:math><m:mi>Z</m:mi></m:math>&#160;is defined as an <m:math><m:mi>n</m:mi><m:mo>&#215;</m:mo><m:mfenced separators=""><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>t</m:mi></m:mfenced></m:math>&#160;matrix satisfying:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mtable columnalign="left">
 <m:mtr>
  <m:mtd><m:msup><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>Z</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>;</m:mtext></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>Z</m:mi><m:mo>=</m:mo><m:mi>I</m:mi><m:mtext>.</m:mtext></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>

The columns of <m:math><m:mi>Z</m:mi></m:math>&#160;form an orthogonal basis for the set of vectors orthogonal to the columns of <m:math><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover></m:math>.</div><div class="paramtext">Define
<ul class="listind"><li class="listind"><m:math><m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>g</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, the <b>projected gradient vector</b> of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>;</li><li class="listind"><m:math><m:msub><m:mi>G</m:mi><m:mi>Z</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>G</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mi>Z</m:mi></m:math>, the <b>projected Hessian matrix</b> of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.</li></ul>
</div><div class="paramtext">At the solution of a linearly-constrained problem, the projected gradient vector must be zero, which implies that the gradient vector <m:math><m:mi>g</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:math>&#160;can be written as a linear combination of the columns of <m:math><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover></m:math>, i.e., <m:math><m:mi>g</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>=</m:mo><m:mstyle displaystyle="true"><m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:mi>t</m:mi></m:munderover></m:mstyle><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup><m:msub><m:mover><m:mi>a</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:msup><m:mi>&#955;</m:mi><m:mo>*</m:mo></m:msup></m:math>.  The scalar <m:math><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup></m:math>&#160;is defined as the <b>Lagrange multiplier</b> corresponding to the <m:math><m:mi>i</m:mi></m:math>th active constraint.  A simple interpretation of the <m:math><m:mi>i</m:mi></m:math>th Lagrange multiplier is that it gives the gradient of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;along the <m:math><m:mi>i</m:mi></m:math>th active constraint normal; a convenient definition of the Lagrange multiplier vector (although not a recommended method for computation) is:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msup><m:mi>&#955;</m:mi><m:mo>*</m:mo></m:msup><m:mo>=</m:mo><m:msup><m:mfenced separators=""><m:msup><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:msup><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>g</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

Sufficient conditions for <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;to be the solution of a linearly-constrained problem are:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top"><m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;is feasible, and <m:math><m:msup><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup><m:mo>=</m:mo><m:mover><m:mi>b</m:mi><m:mo>^</m:mo></m:mover></m:math>; and</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top"><m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:mfenced><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, or equivalently, <m:math><m:mi>g</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>=</m:mo><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:msup><m:mi>&#955;</m:mi><m:mo>*</m:mo></m:msup></m:math>; and</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iii)</td>
<td valign="top"><m:math><m:msub><m:mi>G</m:mi><m:mi>Z</m:mi></m:msub><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:math>&#160;is positive definite; and</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iv)</td>
<td valign="top"><m:math><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>&#160;if <m:math><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup></m:math>&#160;corresponds to a constraint <m:math>
 <m:msubsup><m:mover><m:mi>a</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi><m:mi mathvariant="normal">T</m:mi></m:msubsup>
 <m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup>
 <m:mo>&#8805;</m:mo>
 <m:msub><m:mover><m:mi>b</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub>
</m:math>;
 <div class="paramtext"><m:math><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>&#160;if <m:math><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup></m:math>&#160;corresponds to a constraint <m:math>
 <m:msubsup><m:mover><m:mi>a</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi><m:mi mathvariant="normal">T</m:mi></m:msubsup>
 <m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup>
 <m:mo>&#8804;</m:mo>
 <m:msub><m:mover><m:mi>b</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub>
</m:math>.</div>
 <div class="paramtext">The sign of <m:math><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup></m:math>&#160;is immaterial for equality constraints, which by definition are always active.</div></td>
</tr></table>
</div><h4 class="standard"><a class="sec" name="background34" id="background34"/>2.3.4&#160;&#160;Nonlinearly-constrained minimization</h4>
<div class="paramtext">For nonlinearly-constrained problems, much of the terminology is defined exactly as in the linearly-constrained case.  The set of active constraints at <m:math><m:mi>x</m:mi></m:math>&#160;again means the set of constraints that hold as equalities at <m:math><m:mi>x</m:mi></m:math>, with corresponding definitions of <m:math><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;and <m:math><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover></m:math>: the vector <m:math><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;contains the active constraint functions, and the columns of <m:math><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;are the gradient vectors of the active constraints.  As before, <m:math><m:mi>Z</m:mi></m:math>&#160;is defined in terms of <m:math><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;as a matrix such that:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mtable columnalign="left">
 <m:mtr>
  <m:mtd><m:msup><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>Z</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>;</m:mtext></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>Z</m:mi><m:mo>=</m:mo><m:mi>I</m:mi></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>

where the dependence on <m:math><m:mi>x</m:mi></m:math>&#160;has been suppressed for compactness.</div><div class="paramtext">The projected gradient vector <m:math><m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is the vector <m:math><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>g</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.  At the solution <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;of a nonlinearly-constrained problem, the projected gradient must be zero, which implies the existence of Lagrange multipliers corresponding to the active constraints, i.e., <m:math><m:mi>g</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>=</m:mo><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:msup><m:mi>&#955;</m:mi><m:mo>*</m:mo></m:msup></m:math>.</div><div class="paramtext">The <b>Lagrangian function</b> is given by:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>L</m:mi><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>&#955;</m:mi></m:mfenced><m:mo>=</m:mo><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>-</m:mo><m:msup><m:mi>&#955;</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

We define <m:math><m:msub><m:mi>g</m:mi><m:mi>L</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;as the gradient of the Lagrangian function; <m:math><m:msub><m:mi>G</m:mi><m:mi>L</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;as its Hessian matrix, and <m:math><m:msub><m:mover><m:mi>G</m:mi><m:mo>^</m:mo></m:mover><m:mi>L</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;as its projected Hessian matrix, i.e., <m:math><m:msub><m:mover><m:mi>G</m:mi><m:mo>^</m:mo></m:mover><m:mi>L</m:mi></m:msub><m:mo>=</m:mo><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:msub><m:mi>G</m:mi><m:mi>L</m:mi></m:msub><m:mi>Z</m:mi></m:math>.</div><div class="paramtext">Sufficient conditions for <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;to be the solution of a nonlinearly-constrained problem are:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top"><m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;is feasible, and <m:math><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>=</m:mo><m:mn>0</m:mn></m:math>; and</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top"><m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:mfenced><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, or, equivalently, <m:math><m:mi>g</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>=</m:mo><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:msup><m:mi>&#955;</m:mi><m:mo>*</m:mo></m:msup></m:math>; and</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iii)</td>
<td valign="top"><m:math><m:msub><m:mover><m:mi>G</m:mi><m:mo>^</m:mo></m:mover><m:mi>L</m:mi></m:msub><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:math>&#160;is positive definite; and</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iv)</td>
<td valign="top"><m:math><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>&#160;if <m:math><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup></m:math>&#160;corresponds to a constraint of the form <m:math><m:msub><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>.
 <div class="paramtext">The sign of <m:math><m:msubsup><m:mi>&#955;</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup></m:math>&#160;is immaterial for equality constraints, which by definition are always active.</div></td>
</tr></table>
</div><div class="paramtext">Note that condition (ii) implies that the projected gradient of the Lagrangian function must also be zero at <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>, since the application of <m:math><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;annihilates the matrix <m:math><m:mover><m:mi>A</m:mi><m:mo>^</m:mo></m:mover><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced></m:math>.</div><h3 class="standard"><a class="sec" name="background4" id="background4"/>2.4&#160;&#160;Background to Optimization Methods</h3>
<div class="paramtext">All the algorithms contained in this chapter generate an iterative sequence <m:math><m:mfenced open="{" close="}" separators=""><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:mfenced></m:math>&#160;that converges to the solution <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;in the limit, except for some special problem categories (i.e., linear and quadratic programming).  To terminate computation of the sequence, a convergence test is performed to determine whether the current estimate of the solution is an adequate approximation.  The convergence tests are discussed in <a class="sec" href="#background6">Section 2.6</a>.</div><div class="paramtext">Most of the methods construct a sequence <m:math><m:mfenced open="{" close="}" separators=""><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:mfenced></m:math>&#160;satisfying:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mfenced>
</m:msup><m:mo>=</m:mo><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup><m:mo>+</m:mo><m:msup><m:mi>&#945;</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup><m:msup><m:mi>p</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where the vector <m:math><m:msup><m:mi>p</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:math>&#160;is termed the <b>direction of search</b>, and <m:math><m:msup><m:mi>&#945;</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:math>&#160;is the <b>steplength</b>.  The steplength <m:math><m:msup><m:mi>&#945;</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:math>&#160;is chosen so that <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mfenced>
</m:msup></m:mfenced><m:mo>&lt;</m:mo><m:mi>F</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:mfenced></m:math>&#160;and is computed using one of the techniques for one-dimensional optimization referred to in <a class="sec" href="#background41">Section 2.4.1</a>.</div><h4 class="standard"><a class="sec" name="background41" id="background41"/>2.4.1&#160;&#160;One-dimensional optimization</h4>
<div class="paramtext">The Library contains two special routines for minimizing a function of a single variable.  Both routines are based on safeguarded polynomial approximation.  One routine requires function evaluations only and fits a quadratic polynomial whilst the other requires function and gradient evaluations and fits a cubic polynomial.  See Section 4.1 of <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a>.</div><h4 class="standard"><a class="sec" name="background42" id="background42"/>2.4.2&#160;&#160;Methods for unconstrained optimization</h4>
<div class="paramtext">The distinctions among methods arise primarily from the need to use varying levels of information about derivatives of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;in defining the search direction.  We describe three basic approaches to unconstrained problems, which may be extended to other problem categories.  Since a full description of the methods would fill several volumes, the discussion here can do little more than allude to the processes involved, and direct you to other sources for a full explanation.
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(a)</td>
<td valign="top"><b>Newton-type</b> Methods (Modified Newton Methods)
 <div class="paramtext">Newton-type methods use the Hessian matrix <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:mfenced></m:math>, or a finite difference approximation to <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:mfenced></m:math>, to define the search direction.  The routines in the Library either require a subroutine that computes the elements of <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:mfenced></m:math>&#160;directly, or they approximate <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:mfenced></m:math>&#160;by finite differences.</div>
 <div class="paramtext">Newton-type methods are the most powerful methods available for general problems and will find the minimum of a quadratic function in one iteration.  See Sections 4.4  and 4.5.1  of <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a>.</div></td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(b)</td>
<td valign="top"><b>Quasi-Newton</b> Methods
 <div class="paramtext">Quasi-Newton methods approximate the Hessian <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mfenced separators=""><m:mi>k</m:mi></m:mfenced></m:msup></m:mfenced></m:math>&#160;by a matrix <m:math><m:msup><m:mi>B</m:mi><m:mfenced separators=""><m:mi>k</m:mi></m:mfenced></m:msup></m:math>&#160;which is modified at each iteration to include information obtained about the curvature of <m:math><m:mi>F</m:mi></m:math>&#160;along the current search direction <m:math><m:msup><m:mi>p</m:mi><m:mfenced separators=""><m:mi>k</m:mi></m:mfenced></m:msup></m:math>.  Although not as robust as Newton-type methods, quasi-Newton methods can be more efficient because <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mfenced separators=""><m:mi>k</m:mi></m:mfenced></m:msup></m:mfenced></m:math>&#160;is not computed directly, or approximated by finite differences.  Quasi-Newton methods minimize a quadratic function in <m:math><m:mi>n</m:mi></m:math>&#160;iterations, where <m:math><m:mi>n</m:mi></m:math>&#160;is the number of variables.  See Section 4.5.2 of <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a>.</div></td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(c)</td>
<td valign="top"><b>Conjugate-gradient</b> Methods
 <div class="paramtext">Unlike Newton-type and quasi-Newton methods, conjugate-gradient methods do not require the storage of an <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix and so are ideally suited to solve large problems.  Conjugate-gradient type methods are not usually as reliable or efficient as Newton-type, or quasi-Newton methods.  See Section 4.8.3 of <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a>.</div></td>
</tr></table>
</div><h4 class="standard"><a class="sec" name="background43" id="background43"/>2.4.3&#160;&#160;Methods for nonlinear least squares problems</h4>
<div class="paramtext">These methods are similar to those for unconstrained optimization, but exploit the special structure of the Hessian matrix to give improved computational efficiency.</div><div class="paramtext">Since

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:mi>m</m:mi></m:munderover><m:msubsup><m:mi>f</m:mi><m:mi>i</m:mi><m:mn>2</m:mn></m:msubsup><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

the Hessian matrix <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is of the form

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>G</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
 <m:mo>=</m:mo>
 <m:mn>2</m:mn>
 <m:mfenced separators="">
  <m:mi>J</m:mi><m:msup><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
  <m:mi>J</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
  <m:mo>+</m:mo>
  <m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:mi>m</m:mi></m:munderover>
  <m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
  <m:msub><m:mi>G</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
 </m:mfenced>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>J</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is the Jacobian matrix of <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, and <m:math><m:msub><m:mi>G</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is the Hessian matrix of <m:math><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.</div><div class="paramtext">In the neighbourhood of the solution, <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mfenced></m:math>&#160;is often small compared to <m:math>
 <m:mfenced open="&#8214;" close="&#8214;" separators="">
  <m:mi>J</m:mi><m:msup><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
  <m:mi>J</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
 </m:mfenced>
</m:math>&#160;(for example, when <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;represents the goodness-of-fit of a nonlinear model to observed data).  In such cases, <m:math>
 <m:mn>2</m:mn>
 <m:mi>J</m:mi><m:msup><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mi>J</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
</m:math>&#160;may be an adequate approximation to <m:math><m:mi>G</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, thereby avoiding the need to compute or approximate second derivatives of <m:math><m:mfenced open="{" close="}" separators=""><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mfenced></m:math>.  See Section 4.7 of <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a>.</div><h4 class="standard"><a class="sec" name="background44" id="background44"/>2.4.4&#160;&#160;Methods for handling constraints</h4>
<div class="paramtext">Bounds on the variables are dealt with by fixing some of the variables on their bounds and adjusting the remaining free variables to minimize the function.  By examining estimates of the Lagrange multipliers it is possible to adjust the set of variables fixed on their bounds so that eventually the bounds active at the solution should be correctly identified.  This type of method is called an <b>active set method</b>.  One feature of such methods is that, given an initial feasible point, all approximations <m:math><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:math>&#160;are feasible.  This approach can be extended to general linear constraints.  At a point, <m:math><m:mi>x</m:mi></m:math>, the set of constraints which hold as equalities being used to predict, or approximate, the set of active constraints is called the <b>working set</b>.</div><div class="paramtext">Nonlinear constraints are more difficult to handle.  If at all possible, it is usually beneficial to avoid including nonlinear constraints during the formulation of the problem.  The methods currently implemented in the Library handle nonlinearly constrained problems by transforming them into a sequence of quadratic programming problems.  A feature of such methods is that <m:math><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:math>&#160;is not guaranteed to be feasible except in the limit, and this is certainly true of the routines currently in the Library.  See Chapter 6, particularly Sections 6.4 and 6.5, of <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a>.</div><div class="paramtext">Anyone interested in a detailed description of methods for optimization should consult the references.</div><h4 class="standard"><a class="sec" name="multiobjectivemethods" id="multiobjectivemethods"/>2.4.5&#160;&#160;Methods for handling multi-objective optimization</h4>
<div class="paramtext">Suppose we have objective functions <m:math><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, <m:math><m:mi>i</m:mi><m:mo>&gt;</m:mo><m:mn>1</m:mn></m:math>, all of which we need to minimize at the same time. There are two main approaches to this problem:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(a)</td>
<td valign="top">Combine the individual objectives into one composite objective. Typically this might be a weighted sum of the objectives, e.g.,

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>w</m:mi><m:mn>1</m:mn></m:msub>
 <m:msub><m:mi>f</m:mi><m:mn>1</m:mn></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced> 
 <m:mo>+</m:mo> 
 <m:msub><m:mi>w</m:mi><m:mn>2</m:mn></m:msub>
 <m:msub><m:mi>f</m:mi><m:mn>2</m:mn></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
 <m:mo>+</m:mo>
 <m:mo>&#8943;</m:mo>
 <m:mo>+</m:mo>
 <m:msub><m:mi>w</m:mi><m:mi>n</m:mi></m:msub>
 <m:msub><m:mi>f</m:mi><m:mi>n</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div><div class="paramtext">Here you choose the weights to express the relative importance of the corresponding objective. Ideally each of the <m:math><m:msub><m:mi>f</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;should be of comparable size at a solution.</div></td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(b)</td>
<td valign="top">Order the objectives in order of importance. Suppose <m:math><m:msub><m:mi>f</m:mi><m:mi mathvariant="italic">i</m:mi></m:msub></m:math>&#160;are ordered such that <m:math><m:msub><m:mi>f</m:mi><m:mi mathvariant="italic">i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is more important than <m:math><m:msub><m:mi>f</m:mi><m:mrow><m:mi mathvariant="italic">i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:math>. Then in the lexicographical approach to multi-objective optimization a sequence of subproblems are solved. Firstly solve the problem for objective function <m:math><m:msub><m:mi>f</m:mi><m:mn>1</m:mn></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;and denote by <m:math><m:msub><m:mi>r</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;the value of this minimum. If <m:math><m:mfenced separators=""><m:mi mathvariant="italic">i</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mfenced></m:math>&#160;subproblems have been solved with results <m:math><m:msub><m:mi>r</m:mi><m:mrow><m:mi mathvariant="italic">i</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:math>&#160;then subproblem <m:math><m:mi mathvariant="italic">i</m:mi></m:math>&#160;becomes <m:math><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:msub><m:mi>f</m:mi><m:mi mathvariant="italic">i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mfenced></m:mrow></m:math>&#160;subject to <m:math><m:msub><m:mi>r</m:mi><m:mi>k</m:mi></m:msub><m:mo>&#8804;</m:mo><m:msub><m:mi>f</m:mi><m:mi>k</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&#8804;</m:mo><m:msub><m:mi>r</m:mi><m:mi>k</m:mi></m:msub></m:math>, for <m:math><m:mi mathvariant="italic">k</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>i</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:math>&#160;plus the other constraints.</td>
</tr></table>
</div><div class="paramtext">Clearly the bounds on <m:math><m:msub><m:mi>f</m:mi><m:mi>k</m:mi></m:msub></m:math>&#160;might be relaxed at your discretion.</div><div class="paramtext">In general, if NAG routines from the <a class="chap" href="../E04/e04conts.xml">Chapter E04</a> are used then only local minima are found. This means that a better solution to an individual objective might be found without worsening the optimal solutions to the other objectives. Ideally you seek a Pareto solution; one in which an improvement in one objective can only be achieved by a worsening of another objective.</div><div class="paramtext">To obtain a Pareto solution routines from <a class="chap" href="../E05/e05conts.xml">Chapter E05</a> might be used or, alternatively, a pragmatic attempt to derive a global minimum might be tried. In this approach a variety of different minima are computed for each subproblem by starting from a range of different starting points. The best solution achieved is taken to be the global minimum. The more starting points chosen the greater confidence you might have in the computed global minimum.</div><h3 class="standard"><a class="sec" name="background5" id="background5"/>2.5&#160;&#160;Scaling</h3>
<div class="paramtext">Scaling (in a broadly defined sense) often has a significant influence on the performance of optimization methods.  Since convergence tolerances and other criteria are necessarily based on an implicit definition of &#8216;small&#8217; and &#8216;large&#8217;, problems with unusual or unbalanced scaling may cause difficulties for some algorithms.  Although there are currently no user-callable scaling routines in the Library, scaling is automatically performed by default in the routines which solve sparse LP, QP or NLP problems and in some newer dense solver routines.  The following sections present some general comments on problem scaling.</div><h4 class="standard"><a class="sec" name="background51" id="background51"/>2.5.1&#160;&#160;Transformation of variables</h4>
<div class="paramtext">One method of scaling is to transform the variables from their original representation, which may reflect the physical nature of the problem, to variables that have certain desirable properties in terms of optimization.  It is generally helpful for the following conditions to be satisfied:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top">the variables are all of similar magnitude in the region of interest;</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top">a fixed change in any of the variables results in similar changes in <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.  Ideally, a unit change in any variable produces a unit change in <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>;</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iii)</td>
<td valign="top">the variables are transformed so as to avoid cancellation error in the evaluation of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.</td>
</tr></table>
</div><div class="paramtext">Normally, you should restrict yourself to linear transformations of variables, although occasionally nonlinear transformations are possible.  The most common such transformation (and often the most appropriate) is of the form

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mi>x</m:mi><m:mi mathvariant="normal">new</m:mi></m:msub><m:mo>=</m:mo><m:mi>D</m:mi><m:msub><m:mi>x</m:mi><m:mi mathvariant="normal">old</m:mi></m:msub><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>D</m:mi></m:math>&#160;is a diagonal matrix with constant coefficients.  Our experience suggests that more use should be made of the transformation

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mi>x</m:mi><m:mi mathvariant="normal">new</m:mi></m:msub><m:mo>=</m:mo><m:mi>D</m:mi><m:msub><m:mi>x</m:mi><m:mi mathvariant="normal">old</m:mi></m:msub><m:mo>+</m:mo><m:mi>v</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>v</m:mi></m:math>&#160;is a constant vector.</div><div class="paramtext">Consider, for example, a problem in which the variable <m:math><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub></m:math>&#160;represents the position of the peak of a Gaussian curve to be fitted to data for which the extreme values are <m:math><m:mn>150</m:mn></m:math>&#160;and <m:math><m:mn>170</m:mn></m:math>; therefore <m:math><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub></m:math>&#160;is known to lie in the range <m:math><m:mn>150</m:mn></m:math>&#8211;<m:math><m:mn>170</m:mn></m:math>.  One possible scaling would be to define a new variable <m:math><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mn>3</m:mn></m:msub></m:math>, given by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mn>3</m:mn></m:msub><m:mo>=</m:mo><m:mfrac><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mn>170</m:mn></m:mfrac><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

A better transformation, however, is given by defining <m:math><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mn>3</m:mn></m:msub></m:math>&#160;as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mn>3</m:mn></m:msub><m:mo>=</m:mo><m:mfrac><m:mrow><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>-</m:mo><m:mn>160</m:mn></m:mrow><m:mn>10</m:mn></m:mfrac><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

Frequently, an improvement in the accuracy of evaluation of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;can result if the variables are scaled before the routines to evaluate <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;are coded.  For instance, in the above problem just mentioned of Gaussian curve-fitting, <m:math><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub></m:math>&#160;may always occur in terms of the form <m:math><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>-</m:mo><m:msub><m:mi>x</m:mi><m:mi>m</m:mi></m:msub></m:mfenced></m:math>, where <m:math><m:msub><m:mi>x</m:mi><m:mi>m</m:mi></m:msub></m:math>&#160;is a constant representing the mean peak position.</div><h4 class="standard"><a class="sec" name="background52" id="background52"/>2.5.2&#160;&#160;Scaling the objective function</h4>
<div class="paramtext">The objective function has already been mentioned in the discussion of scaling the variables.  The solution of a given problem is unaltered if <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is multiplied by a positive constant, or if a constant value is added to <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>.  It is generally preferable for the objective function to be of the order of unity in the region of interest; thus, if in the original formulation <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is always of the order of <m:math><m:msup><m:mn>10</m:mn><m:mrow><m:mo>+</m:mo><m:mn>5</m:mn></m:mrow></m:msup></m:math>&#160;(say), then the value of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;should be multiplied by <m:math><m:msup><m:mn>10</m:mn><m:mrow><m:mo>-</m:mo><m:mn>5</m:mn></m:mrow></m:msup></m:math>&#160;when evaluating the function within an optimization routine.  If a constant is added or subtracted in the computation of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, usually it should be omitted, i.e., it is better to formulate <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;as <m:math><m:msubsup><m:mi>x</m:mi><m:mn>1</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>+</m:mo><m:msubsup><m:mi>x</m:mi><m:mn>2</m:mn><m:mn>2</m:mn></m:msubsup></m:math>&#160;rather than as <m:math><m:msubsup><m:mi>x</m:mi><m:mn>1</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>+</m:mo><m:msubsup><m:mi>x</m:mi><m:mn>2</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>+</m:mo><m:mn>1000</m:mn></m:math>&#160;or even <m:math><m:msubsup><m:mi>x</m:mi><m:mn>1</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>+</m:mo><m:msubsup><m:mi>x</m:mi><m:mn>2</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>+</m:mo><m:mn>1</m:mn></m:math>.  The inclusion of such a constant in the calculation of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;can result in a loss of significant figures.</div><h4 class="standard"><a class="sec" name="background53" id="background53"/>2.5.3&#160;&#160;Scaling the constraints</h4>
<div class="paramtext">A &#8216;well scaled&#8217; set of constraints has two main properties.  Firstly, each constraint should be well-conditioned with respect to perturbations of the variables.  Secondly, the constraints should be balanced with respect to each other, i.e., all the constraints should have &#8216;equal weight&#8217; in the solution process.</div><div class="paramtext">The solution of a linearly- or nonlinearly-constrained problem is unaltered if the <m:math><m:mi>i</m:mi></m:math>th constraint is multiplied by a positive weight <m:math><m:msub><m:mi>w</m:mi><m:mi>i</m:mi></m:msub></m:math>.  At the approximation of the solution determined by a Library routine, any active linear constraints will (in general) be satisfied &#8216;exactly&#8217; (i.e., to within the tolerance defined by <span class="bitalic">machine precision</span>) if they have been properly scaled.  This is in contrast to any active nonlinear constraints, which will not (in general) be satisfied &#8216;exactly&#8217; but will have &#8216;small&#8217; values (for example, <m:math><m:msub><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mn>1</m:mn></m:msub><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>=</m:mo><m:msup><m:mn>10</m:mn><m:mrow><m:mo>-</m:mo><m:mn>8</m:mn></m:mrow></m:msup></m:math>, <m:math><m:msub><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mn>2</m:mn></m:msub><m:mfenced separators=""><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>=</m:mo><m:msup><m:mrow><m:mo>-</m:mo><m:mn>10</m:mn></m:mrow>
  <m:mrow><m:mo>-</m:mo><m:mn>6</m:mn></m:mrow></m:msup></m:math>, and so on).  In general, this discrepancy will be minimized if the constraints are weighted so that a unit change in <m:math><m:mi>x</m:mi></m:math>&#160;produces a similar change in each constraint.</div><div class="paramtext">A second reason for introducing weights is related to the effect of the size of the constraints on the Lagrange multiplier estimates and, consequently, on the active set strategy.  This means that different sets of weights may cause an algorithm to produce different sequences of iterates.  Additional discussion is given in <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a>.</div><h3 class="standard"><a class="sec" name="background6" id="background6"/>2.6&#160;&#160;Analysis of Computed Results</h3><h4 class="standard"><a class="sec" name="background61" id="background61"/>2.6.1&#160;&#160;Convergence criteria</h4>
<div class="paramtext">The convergence criteria inevitably vary from routine to routine, since in some cases more information is available to be checked (for example, is the Hessian matrix positive definite?), and different checks need to be made for different problem categories (for example, in constrained minimization it is necessary to verify whether a trial solution is feasible).  Nonetheless, the underlying principles of the various criteria are the same; in non-mathematical terms, they are:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top">is the sequence <m:math><m:mfenced open="{" close="}" separators=""><m:msup><m:mi>x</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:mfenced></m:math>&#160;converging?</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top">is the sequence <m:math><m:mfenced open="{" close="}" separators=""><m:msup><m:mi>F</m:mi>
<m:mfenced separators=""><m:mi>k</m:mi></m:mfenced>
</m:msup></m:mfenced></m:math>&#160;converging?</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iii)</td>
<td valign="top">are the necessary and sufficient conditions for the solution satisfied?</td>
</tr></table>
</div><div class="paramtext">The decision as to whether a sequence is converging is necessarily speculative.  The criterion used in the present routines is to assume convergence if the relative change occurring between two successive iterations is less than some prescribed quantity.  Criterion (iii) is the most reliable but often the conditions cannot be checked fully because not all the required information may be available.</div><h4 class="standard"><a class="sec" name="background62" id="background62"/>2.6.2&#160;&#160;Checking results</h4>
<div class="paramtext">Little <span class="italic">a priori</span> guidance can be given as to the quality of the solution found by a nonlinear optimization algorithm, since no guarantees can be given that the methods will not fail.  Therefore, you should always check the computed solution even if the routine reports success.  Frequently a &#8216;solution&#8217; may have been found even when the routine does not report a success.  The reason for this apparent contradiction is that the routine needs to assess the accuracy of the solution.  This assessment is not an exact process and consequently may be unduly pessimistic.  Any &#8216;solution&#8217; is in general only an approximation to the exact solution, and it is possible that the accuracy you have specified is too stringent.</div><div class="paramtext">Further confirmation can be sought by trying to check whether or not convergence tests are almost satisfied, or whether or not some of the sufficient conditions are nearly satisfied.  When it is thought that a routine has returned a 
nonzero value of IFAIL

only because the requirements for &#8216;success&#8217; were too stringent it may be worth restarting with increased convergence tolerances.</div><div class="paramtext">For nonlinearly-constrained problems, check whether the solution returned is feasible, or nearly feasible; if not, the solution returned is not an adequate solution.</div><div class="paramtext">Confidence in a solution may be increased by resolving the problem with a different initial approximation to the solution.  See Section 8.3 of <a class="ref" href="#ref079">Gill <span class="italic">et al.</span> (1981)</a> for further information.</div><h4 class="standard"><a class="sec" name="background63" id="background63"/>2.6.3&#160;&#160;Monitoring progress</h4>
<div class="paramtext">Many of the routines in the chapter have facilities to allow you to monitor the progress of the minimization process, and you are encouraged to make use of these facilities.  Monitoring information can be a great aid in assessing whether or not a satisfactory solution has been obtained, and in indicating difficulties in the minimization problem or in the ability of the routine to cope with the problem.</div><div class="paramtext">The behaviour of the function, the estimated solution and first derivatives can help in deciding whether a solution is acceptable and what to do in the event of a return with a 
nonzero value of IFAIL.
</div><h4 class="standard"><a class="sec" name="background64" id="background64"/>2.6.4&#160;&#160;Confidence intervals for least squares solutions</h4>
<div class="paramtext">When estimates of the parameters in a nonlinear least squares problem have been found, it may be necessary to estimate the variances of the parameters and the fitted function.  These can be calculated from the Hessian of <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;at the solution.</div><div class="paramtext">In many least squares problems, the Hessian is adequately approximated at the solution by <m:math><m:mi>G</m:mi><m:mo>=</m:mo><m:mn>2</m:mn><m:msup><m:mi>J</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>J</m:mi></m:math>&#160;(see <a class="sec" href="#background43">Section 2.4.3</a>).  The Jacobian, <m:math><m:mi>J</m:mi></m:math>, or a factorization of <m:math><m:mi>J</m:mi></m:math>&#160;is returned by all the comprehensive least squares routines and, in addition, a routine is available in the Library to estimate variances of the parameters following the use of most of the nonlinear least squares routines, in the case that <m:math><m:mi>G</m:mi><m:mo>=</m:mo><m:mn>2</m:mn><m:msup><m:mi>J</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>J</m:mi></m:math>&#160;is an adequate approximation.</div><div class="paramtext">Let <m:math><m:mi>H</m:mi></m:math>&#160;be the inverse of <m:math><m:mi>G</m:mi></m:math>, and <m:math><m:mi>S</m:mi></m:math>&#160;be the sum of squares, both calculated at the solution <m:math><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover></m:math>; an unbiased estimate of the <b>variance</b> of the <m:math><m:mi>i</m:mi></m:math>th parameter <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mrow><m:mi>var</m:mi><m:mo>&#8289;</m:mo><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mrow><m:mo>=</m:mo><m:mfrac><m:mrow><m:mn>2</m:mn><m:mi>S</m:mi></m:mrow>
  <m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mrow>
 </m:mfrac><m:msub><m:mi>H</m:mi><m:mrow><m:mi>i</m:mi><m:mi>i</m:mi></m:mrow></m:msub>
</m:math></td><td class="formula2"/></tr></table></div>

and an unbiased estimate of the covariance of <m:math><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mi>j</m:mi></m:msub></m:math>&#160;is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mrow><m:mi>covar</m:mi><m:mfenced separators=""><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mi>j</m:mi></m:msub></m:mfenced></m:mrow><m:mo>=</m:mo><m:mfrac><m:mrow><m:mn>2</m:mn><m:mi>S</m:mi></m:mrow>
  <m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mrow>
 </m:mfrac><m:msub><m:mi>H</m:mi><m:mrow><m:mi>i</m:mi><m:mi>j</m:mi></m:mrow></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

If <m:math><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;is the true solution, then the <m:math><m:mn>100</m:mn><m:mfenced separators=""><m:mn>1</m:mn><m:mo>-</m:mo><m:mi>&#946;</m:mi></m:mfenced><m:mo>%</m:mo><m:mtext/></m:math>&#160;<b>confidence interval</b> on <m:math><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover></m:math>&#160;is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msqrt><m:mrow><m:mi>var</m:mi><m:mo>&#8289;</m:mo><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mrow></m:msqrt><m:mo>.</m:mo>  <m:msub><m:mi>t</m:mi><m:mfenced separators=""><m:mrow><m:mn>1</m:mn><m:mo>-</m:mo><m:mi>&#946;</m:mi><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mrow></m:mfenced></m:msub><m:mo>&lt;</m:mo><m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup><m:mo>&lt;</m:mo><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>+</m:mo><m:msqrt><m:mrow><m:mi>var</m:mi><m:mo>&#8289;</m:mo><m:msub><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mrow></m:msqrt><m:mo>.</m:mo><m:msub><m:mi>t</m:mi><m:mfenced separators=""><m:mrow><m:mn>1</m:mn><m:mo>-</m:mo><m:mi>&#946;</m:mi><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mrow></m:mfenced></m:msub><m:mtext>, &#8195;</m:mtext><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi>t</m:mi><m:mfenced separators=""><m:mrow><m:mn>1</m:mn><m:mo>-</m:mo><m:mi>&#946;</m:mi><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mrow></m:mfenced></m:msub></m:math>&#160;is the <m:math><m:mn>100</m:mn><m:mfenced separators=""><m:mn>1</m:mn><m:mo>-</m:mo><m:mi>&#946;</m:mi></m:mfenced><m:mo>/</m:mo><m:mn>2</m:mn></m:math>&#160;percentage point of the <m:math><m:mi>t</m:mi></m:math>-distribution with <m:math><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:math>&#160;degrees of freedom.</div><div class="paramtext">In the majority of problems, the residuals <m:math><m:msub><m:mi>f</m:mi><m:mi mathvariant="italic">i</m:mi></m:msub></m:math>, for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>m</m:mi></m:math>, contain the difference between the values of a model function <m:math><m:mi>&#981;</m:mi><m:mfenced separators=""><m:mi>z</m:mi><m:mo>,</m:mo><m:mi>x</m:mi></m:mfenced></m:math>&#160;calculated for <m:math><m:mi>m</m:mi></m:math>&#160;different values of the independent variable <m:math><m:mi>z</m:mi></m:math>, and the corresponding observed values at these points.  The minimization process determines the parameters, or constants <m:math><m:mi>x</m:mi></m:math>, of the fitted function <m:math><m:mi>&#981;</m:mi><m:mfenced separators=""><m:mi>z</m:mi><m:mo>,</m:mo><m:mi>x</m:mi></m:mfenced></m:math>.  For any value, <m:math><m:mover><m:mi>z</m:mi><m:mo>-</m:mo></m:mover></m:math>, of the independent variable <m:math><m:mi>z</m:mi></m:math>, an unbiased estimate of the <b>variance</b> of <m:math><m:mi>&#981;</m:mi></m:math>&#160;is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mrow><m:mi>var</m:mi><m:mo>&#8289;</m:mo><m:mi>&#981;</m:mi></m:mrow><m:mo>=</m:mo><m:mfrac><m:mrow><m:mn>2</m:mn><m:mi>S</m:mi></m:mrow>
  <m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mrow>
 </m:mfrac>
<m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:mi>n</m:mi></m:munderover>
<m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:mi>n</m:mi></m:munderover>
<m:msub>
<m:mfenced open="[" close="]" separators=""><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:mi>&#981;</m:mi></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:mrow>
 </m:mfrac></m:mfenced>
<m:mover><m:mi>z</m:mi><m:mo>-</m:mo></m:mover>
</m:msub>
<m:msub>
<m:mfenced open="[" close="]" separators=""><m:mfrac other="display">
  <m:mrow><m:mo>&#8706;</m:mo><m:mi>&#981;</m:mi></m:mrow>
  <m:mrow><m:mo>&#8706;</m:mo><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:mrow>
 </m:mfrac></m:mfenced>
<m:mover><m:mi>z</m:mi><m:mo>-</m:mo></m:mover>
</m:msub>
<m:msub><m:mi>H</m:mi><m:mrow><m:mi>i</m:mi><m:mi>j</m:mi></m:mrow></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The <m:math><m:mn>100</m:mn><m:mfenced separators=""><m:mn>1</m:mn><m:mo>-</m:mo><m:mi>&#946;</m:mi></m:mfenced><m:mo>%</m:mo></m:math>&#160;<b>confidence interval</b> on <m:math><m:mi>F</m:mi></m:math>&#160;at the point <m:math><m:mover><m:mi>z</m:mi><m:mo>-</m:mo></m:mover></m:math>&#160;is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>&#981;</m:mi><m:mfenced separators=""><m:mover><m:mi>z</m:mi><m:mo>-</m:mo></m:mover><m:mo>,</m:mo><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover></m:mfenced><m:mo>-</m:mo><m:msqrt><m:mrow><m:mi>var</m:mi><m:mo>&#8289;</m:mo><m:mi>&#981;</m:mi></m:mrow></m:msqrt><m:mo>.</m:mo><m:msub><m:mi>t</m:mi><m:mfenced separators=""><m:mrow><m:mi>&#946;</m:mi><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mrow></m:mfenced></m:msub><m:mo>&lt;</m:mo><m:mi>&#981;</m:mi><m:mfenced separators=""><m:mover><m:mi>z</m:mi><m:mo>-</m:mo></m:mover><m:mo>,</m:mo><m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup></m:mfenced><m:mo>&lt;</m:mo><m:mi>&#981;</m:mi><m:mfenced separators=""><m:mover><m:mi>z</m:mi><m:mo>-</m:mo></m:mover><m:mo>,</m:mo><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover></m:mfenced><m:mo>+</m:mo><m:msqrt><m:mrow><m:mi>var</m:mi><m:mo>&#8289;</m:mo><m:mi>&#981;</m:mi></m:mrow></m:msqrt><m:mo>.</m:mo><m:msub><m:mi>t</m:mi><m:mfenced separators=""><m:mrow><m:mi>&#946;</m:mi><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mrow></m:mfenced></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

For further details on the analysis of least squares solutions see <a class="ref" href="#ref098">Bard (1974)</a> and <a class="ref" href="#ref099">Wolberg (1967)</a>.</div><h2 class="standard"><a class="sec" name="available" id="available"/>3&#160;&#160;Recommendations on Choice and Use of Available Routines</h2>
<div class="paramtext">The choice of routine depends on several factors: the type of problem (unconstrained, etc.); the level of derivative information available (function values only, etc.); your experience (there are easy-to-use versions of some routines); whether or not storage is a problem; whether or not the routine is to be used in a multithreaded environment; and whether computational time has a high priority.  Not all choices are catered for in the current version of the Library.</div><h3 class="standard"><a class="sec" name="recomm_1" id="recomm_1"/>3.1&#160;&#160;Easy-to-use and Comprehensive Routines</h3>
<div class="paramtext">Many routines appear in the Library in two forms: a comprehensive form and an easy-to-use form.  The objective in the easy-to-use forms is to make the routine simple to use by including in the calling sequence only those parameters absolutely essential to the definition of the problem, as opposed to parameters relevant to the solution method.  If you are an experienced user the comprehensive routines have additional parameters which enable you to improve their efficiency by &#8216;tuning&#8217; the method to a particular problem.  If you are a casual or inexperienced user, this feature is of little value and may in some cases cause a failure because of a poor choice of some parameters.</div><div class="paramtext">In the easy-to-use routines, these extra parameters are determined either by fixing them at a known safe and reasonably efficient value, or by an auxiliary routine which generates a &#8216;good&#8217; value automatically.</div><div class="paramtext">For routines introduced since Mark 12 of the Library a different approach has been adopted towards the choice of easy-to-use and comprehensive routines.  The optimization routine has an easy-to-use parameter list, but additional parameters may be changed from their default values by calling an &#8216;option&#8217; setting routine before the call to the main optimization routine.  This approach has the advantages of allowing the options to be given in the form of keywords and requiring only those options that are to be different from their default values to be set.</div><h3 class="standard"><a class="sec" name="threadsafety" id="threadsafety"/>3.2&#160;&#160;Thread Safe Routines</h3>
<div class="paramtext">Many of the routines in this chapter come in pairs, with each routine in the pair having exactly the same functionality, except that one of them has additional parameters in order to make it safe for use in multithreaded applications.  The routine that is safe for use in multithreaded applicatons has an &#8216;A&#8217; as the last character in the name, in place of the usual &#8216;F&#8217;.</div><div class="paramtext">An example of such a pair is <a class="rout" href="../E04/e04abf.xml">E04ABA</a> and <a class="rout" href="../E04/e04abf.xml">E04ABF</a>.</div><div class="paramtext">All &#8216;F&#8217; routines not scheduled for withdrawal from the Library and where there is no &#8216;A&#8217; version of that routine are threadsafe provided that the implementation as a whole is considered threadsafe (refer to the Users' Note for your implementation).</div><h3 class="standard"><a class="sec" name="recomm_2a" id="recomm_2a"/>3.3&#160;&#160;Reverse Communication Routines</h3>
<div class="paramtext">Most of the routines in this chapter are called just once in order to compute the minimum of a given objective function subject to a set of constraints on the variables.  The objective function and nonlinear constraints (if any) are specified by you and written as subroutines to a very rigid format described in the relevant routine document.  Such subroutines usually appear in the argument list of the minimization routine.</div><div class="paramtext">For the majority of applications this is the simplest and most convenient usage.  Sometimes however this approach can be restrictive:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top">when the required format of the subroutine does not allow useful information to be passed conveniently to and from your calling program;</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top">when the minimization routine is being called from another computer language, such as Visual Basic, which does not fully support procedure arguments in a way that is compatible with the Library.</td>
</tr></table>
</div><div class="paramtext">A way around these problems is to utilize <b>reverse communication</b> routines.  Instead of performing complete optimizations, these routines perform one step in the solution process before returning to the calling program with an appropriate flag (IREVCM) set.  The value of IREVCM determines whether the minimization process has finished or whether fresh information is required.  In the latter case you calculate this information (in the form of a vector or as a scalar, as appropriate) and re-enter the reverse communication routine with the information contained in appropriate arguments.  Thus you have the responsibility for providing the iterative loop in the minimization process, but as compensation, you have an extremely flexible and basic user-interface to the reverse communication routine.</div><div class="paramtext">The only reverse communication routines in this chapter are <a class="rout" href="../E04/e04uff.xml">E04UFF/E04UFA</a>, which solve dense NLP problems using a sequential quadratic programming method.</div><h3 class="standard"><a class="sec" name="recomm_2" id="recomm_2"/>3.4&#160;&#160;Service Routines</h3>
<div class="paramtext">One of the most common errors in the use of optimization routines is that user-supplied subroutines do not evaluate the relevant partial derivatives correctly.  Because exact gradient information normally enhances efficiency in all areas of optimization, you are encouraged to provide analytical derivatives whenever possible.  However, mistakes in the computation of derivatives can result in serious and obscure run-time errors.  Consequently, <b>service routines</b> are provided to perform an elementary check on the gradients you supplied.  These routines are inexpensive to use in terms of the number of calls they require to user-supplied subroutines.</div><div class="paramtext">The appropriate checking routines are as follows:
<div class="tablediv"><table class="frame-none" align="center">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left"><b>Minimization routine</b></td>
    <td class="libdoc" valign="top" align="left"><b>Checking routine(s)</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04kdf.xml">E04KDF</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04hcf.xml">E04HCF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04lbf.xml">E04LBF</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04hcf.xml">E04HCF</a> and <a class="rout" href="../E04/e04hdf.xml">E04HDF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04gbf.xml">E04GBF</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04yaf.xml">E04YAF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04gdf.xml">E04GDF</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04yaf.xml">E04YAF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04hef.xml">E04HEF</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../E04/e04yaf.xml">E04YAF</a> and <a class="rout" href="../E04/e04ybf.xml">E04YBF</a></td>
   </tr>
  </tbody>
 </table></div>
It should be noted that routines 
<a class="rout" href="../E04/e04uff.xml">E04UFF/E04UFA</a>, <a class="rout" href="../E04/e04usf.xml">E04USF/E04USA</a>, <a class="rout" href="../E04/e04vhf.xml">E04VHF</a> and <a class="rout" href="../E04/e04wdf.xml">E04WDF</a>

each incorporate a check on the gradients being supplied.  This involves verifying the gradients at the first point that satisfies the linear constraints and bounds.  There is also an option to perform a more reliable (but more expensive) check on the individual gradient elements being supplied.  Note that the checks are not infallible.</div><div class="paramtext">A second type of service routine computes a set of finite differences to be used when approximating first derivatives.  Such differences are required as input parameters by some routines that use only function evaluations.</div><div class="paramtext"><a class="rout" href="../E04/e04ycf.xml">E04YCF</a> estimates selected elements of the variance-covariance matrix for the computed regression parameters following the use of a nonlinear least squares routine.</div><div class="paramtext"><a class="rout" href="../E04/e04xaf.xml">E04XAF/E04XAA</a> estimates the gradient and Hessian of a function at a point, given a routine to calculate function values only, or estimates the Hessian of a function at a point, given a routine to calculate function and gradient values.</div><h3 class="standard"><a class="sec" name="recomm_3" id="recomm_3"/>3.5&#160;&#160;Function Evaluations at Infeasible Points</h3>
<div class="paramtext">All the routines for constrained problems will ensure that any evaluations of the objective function occur at points which <b>approximately</b> satisfy any <b>simple bounds</b> or <b>linear constraints</b>.  Satisfaction of such constraints is only approximate because routines which estimate derivatives by finite differences may require function evaluations at points which just violate such constraints even though the current iteration just satisfies them.</div><div class="paramtext">There is no attempt to ensure that the current iteration satisfies any nonlinear constraints. If you wish to prevent your objective function being evaluated outside some known region (where it may be undefined or not practically computable), you may try to confine the iteration within this region by imposing suitable simple bounds or linear constraints (but beware as this may create new local minima where these constraints are active).</div><div class="paramtext">Note also that some routines allow you to return the parameter 
(IFLAG or MODE)

with a negative value to force an immediate clean exit from the minimization routine when the objective function (or nonlinear constraints where appropriate) cannot be evaluated.

</div><h3 class="standard"><a class="sec" name="recomm_4" id="recomm_4"/>3.6&#160;&#160;Related Problems</h3>
<div class="paramtext">Apart from the standard types of optimization problem, there are other related problems which can be solved by routines in this or other chapters of the Library.</div><div class="paramtext"><a class="rout" href="../H/h02bbf.xml">H02BBF</a> solves <b>dense integer LP</b> problems, <a class="rout" href="../H/h02cbf.xml">H02CBF</a> solves <b>dense integer QP</b> problems, <a class="rout" href="../H/h02cef.xml">H02CEF</a> solves <b>sparse integer QP</b> problems and <a class="rout" href="../H/h03abf.xml">H03ABF</a> solves a special type of such problem known as a <b>&#8216;transportation&#8217; problem</b>.</div><div class="paramtext">Several routines in <a class="chap" href="../F04/f04conts.xml">Chapters F04</a> and <a class="chap" href="../F08/f08conts.xml">F08</a> solve <b>linear least squares problems</b>, i.e., <m:math><m:mrow><m:mi>minimize</m:mi><m:mo>&#8289;</m:mo><m:mstyle displaystyle="true"><m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:mi>m</m:mi></m:munderover></m:mstyle></m:mrow><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub><m:msup>
<m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
<m:mn>2</m:mn></m:msup></m:math>&#160;where <m:math><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:msub><m:mi>b</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:mstyle displaystyle="true"><m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:mi>n</m:mi></m:munderover></m:mstyle><m:msub><m:mi>a</m:mi><m:mrow><m:mi>i</m:mi><m:mi>j</m:mi></m:mrow></m:msub><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>.</div><div class="paramtext"><a class="rout" href="../E02/e02gaf.xml">E02GAF</a> solves an overdetermined system of linear equations in the <m:math><m:msub><m:mi>l</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;norm, i.e., minimizes <m:math><m:mstyle displaystyle="true"><m:munderover><m:mo>&#8721;</m:mo><m:mrow><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow><m:mi>m</m:mi></m:munderover></m:mstyle><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mfenced></m:math>, with <m:math><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;as above, and <a class="rout" href="../E02/e02gbf.xml">E02GBF</a> solves the same problem subject to linear inequality constraints.</div><div class="paramtext"><a class="rout" href="../E02/e02gcf.xml">E02GCF</a> solves an overdetermined system of linear equations in the <m:math><m:msub><m:mi>l</m:mi><m:mi>&#8734;</m:mi></m:msub></m:math>&#160;norm, i.e., minimizes <m:math><m:mstyle displaystyle="true"><m:munder><m:mi mathvariant="normal">max</m:mi><m:mi>i</m:mi></m:munder></m:mstyle><m:mspace width="0.25em"/><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:mfenced></m:math>, with <m:math><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;as above.</div><div class="paramtext"><a class="chap" href="../E05/e05conts.xml">Chapter E05</a> contains routines for global minimization.</div><div class="paramtext"><a class="sec" href="#multiobjectivemethods">Section 2.4.5</a> describes how a multi-objective optimization problem might be addressed using routines from this chapter and from <a class="chap" href="../E05/e05conts.xml">Chapter E05</a>.</div><h3 class="standard"><a class="sec" name="variant" id="variant"/>3.7&#160;&#160;Choosing Between Variant Routines for Some Problems</h3>
<div class="paramtext">As evidenced by the wide variety of routines available in <a class="chap" href="../E04/e04conts.xml">Chapter E04</a>, it is clear that no single algorithm can solve all optimization problems. It is important to try to match the problem to the most suitable routine, and that is what the decision trees in <a class="sec" href="#dtree">Section 4</a> help to do.</div><div class="paramtext">Sometimes in <a class="chap" href="../E04/e04conts.xml">Chapter E04</a> more than one routine is available to solve precisely the same minimization problem. Thus, for example, the general nonlinear programming routines <a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a> and <a class="rout" href="../E04/e04wdf.xml">E04WDF</a> have very similar argument lists and are based on similar methods. Experience shows that although both routines can usually solve the same problem and get similar results, sometimes one routine will be faster, sometimes one might find a different local minimum to the other, or, in difficult cases, one routine may obtain a solution when the other one fails.</div><div class="paramtext">After using one of these routines, if the results obtained are unacceptable for some reason, it may be worthwhile trying the other routine instead. In the absence of any other information, in the first instance you are recommended to try using <a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a>, and if that proves unsatisfactory, try using <a class="rout" href="../E04/e04wdf.xml">E04WDF</a>. Although the algorithms used are very similar, the two routines each have slightly different optional arguments which may allow the course of the computation to be altered in different ways.</div><div class="paramtext">Other pairs of routines which solve the same kind of problem are <a class="rout" href="../E04/e04nkf.xml">E04NKF/E04NKA</a> or <a class="rout" href="../E04/e04nqf.xml">E04NQF</a>, for sparse quadratic or linear programming problems, and <a class="rout" href="../E04/e04ugf.xml">E04UGF/E04UGA</a> or <a class="rout" href="../E04/e04vhf.xml">E04VHF</a>, for sparse nonlinear programming. In these cases the argument lists are not so similar as <a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a> or <a class="rout" href="../E04/e04wdf.xml">E04WDF</a>, but the same considerations apply.</div><h2 class="standard"><a class="sec" name="dtree" id="dtree"/>4&#160;&#160;Decision Trees</h2>
<h3 class="sec"><a name="tree1" id="tree1"/>Tree 1: Selection chart for unconstrained problems
</h3>
<table class="dtree">
<tr>
<td class="dtentry">Only one variable?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are first derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04bbf.xml">E04BBF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04abf.xml">E04ABF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Does the function have many discontinuities?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04cbf.xml">E04CBF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is store size a problem?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04dgf.xml">E04DGF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is the function a sum of squares?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are you an experienced user?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are first derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are second derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04hef.xml">E04HEF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are there more than ten variables?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04gbf.xml">E04GBF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04gdf.xml">E04GDF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04fcf.xml">E04FCF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are first derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are second derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04hyf.xml">E04HYF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are there more than ten variables?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04gyf.xml">E04GYF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04gzf.xml">E04GZF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04fyf.xml">E04FYF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are you an experienced user?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are first derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are second derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04lbf.xml">E04LBF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is computational cost critical?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04ucf.xml">E04UCF</a>, <a class="rout" href="../E04/e04uff.xml">E04UFF</a>, <a class="rout" href="../E04/e04ugf.xml">E04UGF</a>, <a class="rout" href="../E04/e04vhf.xml">E04VHF</a> or <a class="rout" href="../E04/e04wdf.xml">E04WDF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04kdf.xml">E04KDF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04ucf.xml">E04UCF</a>, <a class="rout" href="../E04/e04uff.xml">E04UFF</a>, <a class="rout" href="../E04/e04ugf.xml">E04UGF</a>, <a class="rout" href="../E04/e04vhf.xml">E04VHF</a> or <a class="rout" href="../E04/e04wdf.xml">E04WDF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are first derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are second derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04lyf.xml">E04LYF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is computational cost critical?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04kyf.xml">E04KYF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04kzf.xml">E04KZF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../E04/e04jyf.xml">E04JYF</a></td></tr></table><h3 class="sec"><a name="tree2" id="tree2"/>Tree 2: Selection chart for bound-constrained, linearly-constrained and nonlinearly-constrained problems</h3>
<table class="dtree">
<tr>
<td class="dtentry">Are there any nonlinear constraints?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is the objective function a sum of squares?  (A least squares problem)</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04usf.xml">E04USF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are the constraints sparse?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04ugf.xml">E04UGF</a> or <a class="rout" href="../E04/e04vhf.xml">E04VHF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04ucf.xml">E04UCF</a>, <a class="rout" href="../E04/e04uff.xml">E04UFF</a> or <a class="rout" href="../E04/e04wdf.xml">E04WDF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is the objective function linear?  (An LP problem)</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">See <a class="dtree" href="#tree3">Tree 3</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is the objective function quadratic?  (A <m:math><m:mi>Q</m:mi><m:mi>P</m:mi></m:math>&#160;or least squares problem)</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is the problem a least squares problem?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04ncf.xml">E04NCF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">See <a class="dtree" href="#tree4">Tree 4</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is the objective function a sum of squares?  (A least squares problem)</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04usf.xml">E04USF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are the constraints simple bounds?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are you an experienced user?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are first derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are second derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04lbf.xml">E04LBF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04kdf.xml">E04KDF</a>, <a class="rout" href="../E04/e04ucf.xml">E04UCF</a>, <a class="rout" href="../E04/e04uff.xml">E04UFF</a>, <a class="rout" href="../E04/e04ugf.xml">E04UGF</a> or <a class="rout" href="../E04/e04vhf.xml">E04VHF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04ucf.xml">E04UCF</a>, <a class="rout" href="../E04/e04uff.xml">E04UFF</a>, <a class="rout" href="../E04/e04ugf.xml">E04UGF</a>, <a class="rout" href="../E04/e04vhf.xml">E04VHF</a> or <a class="rout" href="../E04/e04wdf.xml">E04WDF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are first derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are second derivatives available?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04lyf.xml">E04LYF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is computational cost critical?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04kyf.xml">E04KYF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04kzf.xml">E04KZF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../E04/e04jcf.xml">E04JCF</a> or <a class="rout" href="../E04/e04jyf.xml">E04JYF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../E04/e04ucf.xml">E04UCF</a>, <a class="rout" href="../E04/e04uff.xml">E04UFF</a>, <a class="rout" href="../E04/e04ugf.xml">E04UGF</a> or <a class="rout" href="../E04/e04vhf.xml">E04VHF</a></td></tr></table><h3 class="sec"><a name="tree3" id="tree3"/>Tree 3: Linear programming</h3>
<table class="dtree">
<tr>
<td class="dtentry">Is the objective function linear (an LP problem) and is the linear constraint matrix sparse?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04nkf.xml">E04NKF</a>, <a class="rout" href="../E04/e04nqf.xml">E04NQF</a>, <a class="rout" href="../E04/e04ugf.xml">E04UGF</a> or <a class="rout" href="../E04/e04vhf.xml">E04VHF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../E04/e04mff.xml">E04MFF</a></td></tr></table><h3 class="sec"><a name="tree4" id="tree4"/>Tree 4: Quadratic programming</h3>
<table class="dtree">
<tr>
<td class="dtentry">Is the linear constraint matrix sparse?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04nkf.xml">E04NKF</a>, <a class="rout" href="../E04/e04nqf.xml">E04NQF</a>, <a class="rout" href="../E04/e04ugf.xml">E04UGF</a> or <a class="rout" href="../E04/e04vhf.xml">E04VHF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is the problem a convex <m:math><m:mi>Q</m:mi><m:mi>P</m:mi></m:math>&#160;problem?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../E04/e04ncf.xml">E04NCF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../E04/e04nff.xml">E04NFF</a></td></tr></table><h2 class="standard"><a class="sec" name="index" id="index"/>5&#160;&#160;Functionality Index</h2>
<div>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Constrained&#160;minimum&#160;of&#160;a&#160;sum&#160;of&#160;squares,&#160;nonlinear&#160;constraints,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;function&#160;values&#160;and&#160;optionally&#160;first&#160;derivatives,&#160;sequential&#160;QP&#160;method</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;dense</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04usf.xml">E04USF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Convex&#160;QP&#160;problem&#160;or&#160;linearly-constrained&#160;linear&#160;least&#160;squares&#160;problem&#160;(dense)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04ncf.xml">E04NCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Linear&#160;programming&#160;(LP)&#160;problem&#160;(dense)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04mff.xml">E04MFF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>LP&#160;or&#160;QP&#160;problem&#160;(sparse)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nkf.xml">E04NKF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>LP&#160;or&#160;QP&#160;problem&#160;(sparse)&#160;(recommended&#160;&#8211;&#160;see&#160;<a class="sec" href="#variant">Section&#160;3.7</a>)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nqf.xml">E04NQF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Minimum,&#160;function&#160;of&#160;one&#160;variable,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;first&#160;derivative</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04bbf.xml">E04BBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;function&#160;values&#160;only</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04abf.xml">E04ABF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Minimum,&#160;function&#160;of&#160;several&#160;variables,&#160;nonlinear&#160;constraints,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;function&#160;values&#160;and&#160;optionally&#160;first&#160;derivatives,&#160;sequential&#160;QP&#160;method,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;dense</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04wdf.xml">E04WDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;dense&#160;(recommended&#160;&#8211;&#160;see&#160;<a class="sec" href="#variant">Section&#160;3.7</a>)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04ucf.xml">E04UCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sparse</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04vhf.xml">E04VHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sparse&#160;(recommended&#160;&#8211;&#160;see&#160;<a class="sec" href="#variant">Section&#160;3.7</a>)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04ugf.xml">E04UGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Minimum,&#160;function&#160;of&#160;several&#160;variables,&#160;nonlinear&#160;constraints&#160;(comprehensive),</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;function&#160;values&#160;and&#160;optionally&#160;first&#160;derivatives,&#160;sequential&#160;QP&#160;method,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reverse&#160;communication&#160;(dense)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04uff.xml">E04UFF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Minimum,&#160;function&#160;of&#160;several&#160;variables,&#160;simple&#160;bounds,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;first&#160;and&#160;second&#160;derivatives,&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04lbf.xml">E04LBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Minimum,&#160;function&#160;of&#160;several&#160;variables,&#160;simple&#160;bounds&#160;(comprehensive),</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;first&#160;derivatives,&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04kdf.xml">E04KDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Minimum,&#160;function&#160;of&#160;several&#160;variables,&#160;simple&#160;bounds&#160;(easy-to-use),</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;first&#160;and&#160;second&#160;derivatives,&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04lyf.xml">E04LYF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;first&#160;derivatives,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04kzf.xml">E04KZF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;quasi-Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04kyf.xml">E04KYF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;function&#160;values&#160;only,&#160;by&#160;quadratic&#160;approximation</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04jcf.xml">E04JCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;function&#160;values&#160;only,&#160;quasi-Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04jyf.xml">E04JYF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Quadratic&#160;programming&#160;(QP)&#160;problem&#160;(dense)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nff.xml">E04NFF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Service&#160;routines:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;check&#160;user's&#160;routine&#160;for&#160;calculating:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;first&#160;derivatives&#160;of&#160;function</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04hcf.xml">E04HCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Hessian&#160;of&#160;a&#160;sum&#160;of&#160;squares</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04ybf.xml">E04YBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Jacobian&#160;of&#160;first&#160;derivatives</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04yaf.xml">E04YAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;second&#160;derivatives&#160;of&#160;function</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04hdf.xml">E04HDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;convert&#160;MPSX&#160;data&#160;file&#160;defining&#160;LP&#160;or&#160;QP&#160;problem&#160;to&#160;format&#160;required&#160;by&#160;<a class="rout" href="../E04/e04nqf.xml">E04NQF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04mzf.xml">E04MZF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;covariance&#160;matrix&#160;for&#160;nonlinear&#160;least&#160;squares&#160;problem</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04ycf.xml">E04YCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;determine&#160;Jacobian&#160;sparsity&#160;structure&#160;before&#160;a&#160;call&#160;of&#160;<a class="rout" href="../E04/e04vhf.xml">E04VHF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04vjf.xml">E04VJF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;estimate&#160;gradient&#160;and/or&#160;Hessian&#160;of&#160;a&#160;function</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04xaf.xml">E04XAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;Initialization&#160;routine&#160;for:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04dgf.xml">E04DGA</a>,&#160;<a class="rout" href="../E04/e04mff.xml">E04MFA</a>,&#160;<a class="rout" href="../E04/e04ncf.xml">E04NCA</a>,&#160;<a class="rout" href="../E04/e04nff.xml">E04NFA</a>,&#160;<a class="rout" href="../E04/e04uff.xml">E04UFA</a>,&#160;<a class="rout" href="../E04/e04ugf.xml">E04UGA</a>&#160;and&#160;<a class="rout" href="../E04/e04usf.xml">E04USA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04wbf.xml">E04WBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nqf.xml">E04NQF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04npf.xml">E04NPF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04vhf.xml">E04VHF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04vgf.xml">E04VGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04wdf.xml">E04WDF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04wcf.xml">E04WCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;retrieve&#160;integer&#160;optional&#160;parameter&#160;values&#160;used&#160;by:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nqf.xml">E04NQF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nxf.xml">E04NXF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04vhf.xml">E04VHF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04vrf.xml">E04VRF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04wdf.xml">E04WDF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04wkf.xml">E04WKF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;retrieve&#160;real&#160;optional&#160;parameter&#160;values&#160;used&#160;by:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nqf.xml">E04NQF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nyf.xml">E04NYF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04vhf.xml">E04VHF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04vsf.xml">E04VSF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04wdf.xml">E04WDF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04wlf.xml">E04WLF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;supply&#160;integer&#160;optional&#160;parameter&#160;values&#160;to:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nqf.xml">E04NQF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04ntf.xml">E04NTF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04vhf.xml">E04VHF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04vmf.xml">E04VMF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04wdf.xml">E04WDF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04wgf.xml">E04WGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;supply&#160;optional&#160;parameter&#160;values&#160;from&#160;external&#160;file&#160;for:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04dgf.xml">E04DGF/E04DGA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04djf.xml">E04DJF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04mff.xml">E04MFF/E04MFA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04mgf.xml">E04MGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04ncf.xml">E04NCF/E04NCA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04ndf.xml">E04NDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nff.xml">E04NFF/E04NFA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04ngf.xml">E04NGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nkf.xml">E04NKF/E04NKA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nlf.xml">E04NLF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nqf.xml">E04NQF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nrf.xml">E04NRF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04udf.xml">E04UDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04ugf.xml">E04UGF/E04UGA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04uhf.xml">E04UHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04usf.xml">E04USF/E04USA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04uqf.xml">E04UQF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04vhf.xml">E04VHF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04vkf.xml">E04VKF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04wdf.xml">E04WDF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04wef.xml">E04WEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;supply&#160;optional&#160;parameter&#160;values&#160;to,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04ugf.xml">E04UGF/E04UGA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04ujf.xml">E04UJF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;supply&#160;optional&#160;parameter&#160;values&#160;to:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04dgf.xml">E04DGF/E04DGA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04dkf.xml">E04DKF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04mff.xml">E04MFF/E04MFA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04mhf.xml">E04MHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04ncf.xml">E04NCF/E04NCA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nef.xml">E04NEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nff.xml">E04NFF/E04NFA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nhf.xml">E04NHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nkf.xml">E04NKF/E04NKA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nmf.xml">E04NMF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nqf.xml">E04NQF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nsf.xml">E04NSF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04uef.xml">E04UEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04usf.xml">E04USF/E04USA</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04urf.xml">E04URF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04vhf.xml">E04VHF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04vlf.xml">E04VLF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04wdf.xml">E04WDF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04wff.xml">E04WFF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;supply&#160;real&#160;optional&#160;parameter&#160;values&#160;to:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04nqf.xml">E04NQF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04nuf.xml">E04NUF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04vhf.xml">E04VHF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04vnf.xml">E04VNF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a class="rout" href="../E04/e04wdf.xml">E04WDF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04whf.xml">E04WHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Unconstrained&#160;minimum,&#160;function&#160;of&#160;several&#160;variables:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;first&#160;derivatives,&#160;pre-conditioned&#160;conjugate&#160;gradient&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04dgf.xml">E04DGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;function&#160;values&#160;only,&#160;simplex&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04cbf.xml">E04CBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Unconstrained&#160;minimum&#160;of&#160;a&#160;sum&#160;of&#160;squares&#160;(comprehensive):</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;first&#160;derivatives,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;combined&#160;Gauss&#8211;Newton&#160;and&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04gdf.xml">E04GDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;combined&#160;Gauss&#8211;Newton&#160;and&#160;quasi-Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04gbf.xml">E04GBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;function&#160;values&#160;only,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;combined&#160;Gauss&#8211;Newton&#160;and&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04fcf.xml">E04FCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;second&#160;derivatives,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;combined&#160;Gauss&#8211;Newton&#160;and&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04hef.xml">E04HEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Unconstrained&#160;minimum&#160;of&#160;a&#160;sum&#160;of&#160;squares&#160;(easy-to-use):</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;first&#160;derivatives,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;combined&#160;Gauss&#8211;Newton&#160;and&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04gzf.xml">E04GZF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;combined&#160;Gauss&#8211;Newton&#160;and&#160;quasi-Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04gyf.xml">E04GYF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;function&#160;values&#160;only,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;combined&#160;Gauss&#8211;Newton&#160;and&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04fyf.xml">E04FYF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;using&#160;second&#160;derivatives,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;combined&#160;Gauss&#8211;Newton&#160;and&#160;modified&#160;Newton&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../E04/e04hyf.xml">E04HYF</a></nobr></td></tr></table></div><h2 class="standard"><a class="sec" name="auxindex" id="auxindex"/>6&#160;&#160;Auxiliary Routines Associated with Library Routine Parameters</h2>
<div class="tablediv"><table class="wdrn"><tbody><tr><td class="libdoc" valign="top" align="left">E04CBK</td><td class="libdoc" valign="top" align="left">nagf_opt_uncon_simplex_dummy_monit<br/>See the description of the argument 
  MONIT in <a class="rout" href="../E04/e04cbf.xml">E04CBF</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E04FCV</td><td class="libdoc" valign="top" align="left">nagf_opt_lsq_uncon_quasi_deriv_comp_lsqlin_fun<br/>See the description of the argument 
  LSQLIN in <a class="rout" href="../E04/e04gbf.xml">E04GBF</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E04FDZ</td><td class="libdoc" valign="top" align="left">nagf_opt_lsq_dummy_lsqmon<br/>See the description of the argument 
    LSQMON in <a class="rout" href="../E04/e04fcf.xml">E04FCF</a>, <a class="rout" href="../E04/e04gdf.xml">E04GDF</a> and <a class="rout" href="../E04/e04hef.xml">E04HEF</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E04HEV</td><td class="libdoc" valign="top" align="left">nagf_opt_lsq_uncon_quasi_deriv_comp_lsqlin_deriv<br/>See the description of the argument 
  LSQLIN in <a class="rout" href="../E04/e04gbf.xml">E04GBF</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E04JCP</td><td class="libdoc" valign="top" align="left">nagf_opt_bounds_bobyqa_func_dummy_monfun<br/>See the description of the argument 
  MONFUN in <a class="rout" href="../E04/e04jcf.xml">E04JCF</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E54NFU</td><td class="libdoc" valign="top" align="left">nagf_opt_qp_dense_sample_qphess<br/>See the description of the argument 
      QPHESS in <a class="rout" href="../E04/e04nff.xml">E04NFF/E04NFA</a> and <a class="rout" href="../H/h02cbf.xml">H02CBF</a>.</td></tr><tr><td class="libdoc" valign="top" align="left">E04NFU</td><td class="libdoc" valign="top" align="left">nagf_opt_qp_dense_sample_qphess_old<br/>See the description of the argument 
      QPHESS in <a class="rout" href="../E04/e04nff.xml">E04NFF/E04NFA</a> and <a class="rout" href="../H/h02cbf.xml">H02CBF</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E54NKU</td><td class="libdoc" valign="top" align="left">nagf_opt_qpconvex1_sparse_dummy_qphx<br/>See the description of the argument 
      QPHX in <a class="rout" href="../E04/e04nkf.xml">E04NKF/E04NKA</a> and <a class="rout" href="../H/h02cef.xml">H02CEF</a>.</td></tr><tr><td class="libdoc" valign="top" align="left">E04NKU</td><td class="libdoc" valign="top" align="left">nagf_opt_qpconvex1_sparse_dummy_qphx_old<br/>See the description of the argument 
      QPHX in <a class="rout" href="../E04/e04nkf.xml">E04NKF/E04NKA</a> and <a class="rout" href="../H/h02cef.xml">H02CEF</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E04NSH</td><td class="libdoc" valign="top" align="left">nagf_opt_qpconvex2_sparse_dummy_qphx<br/>See the description of the argument 
  QPHX in <a class="rout" href="../E04/e04nqf.xml">E04NQF</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E04UDM</td><td class="libdoc" valign="top" align="left">nagf_opt_nlp1_dummy_confun<br/>See the description of the argument 
    CONFUN in <a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a> and <a class="rout" href="../E04/e04usf.xml">E04USF/E04USA</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E04UGN</td><td class="libdoc" valign="top" align="left">nagf_opt_nlp1_sparse_dummy_objfun<br/>See the description of the argument 
  OBJFUN in <a class="rout" href="../E04/e04ugf.xml">E04UGF/E04UGA</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E04UGM</td><td class="libdoc" valign="top" align="left">nagf_opt_nlp1_sparse_dummy_confun<br/>See the description of the argument 
  CONFUN in <a class="rout" href="../E04/e04ugf.xml">E04UGF/E04UGA</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">E04WDP</td><td class="libdoc" valign="top" align="left">nag_opt_nlp2_dummy_confun <br/>See the description of the argument 
  CONFUN in <a class="rout" href="../E04/e04wdf.xml">E04WDF</a>.</td></tr></tbody></table></div><h2 class="standard"><a class="sec" name="withdrawn" id="withdrawn"/>7&#160;&#160;Routines Withdrawn or Scheduled for Withdrawal</h2>
<div class="left-tablediv"><table class="wdrn"><tbody>
<tr><td class="libdoc" valign="top"><b>Withdrawn<br/>Routine</b></td><td class="libdoc" valign="top" align="center"><b>Mark of<br/>Withdrawal</b></td><td class="libdoc" valign="top"><br/><b>Replacement Routine(s)</b></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04CCF">E04CCF/E04CCA</a></td><td class="libdoc" valign="top" align="center">24</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04cbf.xml">E04CBF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04FDF">E04FDF</a></td><td class="libdoc" valign="top" align="center">19</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04fyf.xml">E04FYF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04GCF">E04GCF</a></td><td class="libdoc" valign="top" align="center">19</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04gyf.xml">E04GYF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04GEF">E04GEF</a></td><td class="libdoc" valign="top" align="center">19</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04gzf.xml">E04GZF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04HBF">E04HBF</a></td><td class="libdoc" valign="top" align="center">16</td><td class="libdoc" valign="top">No longer required</td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04HFF">E04HFF</a></td><td class="libdoc" valign="top" align="center">19</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04hyf.xml">E04HYF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04JAF">E04JAF</a></td><td class="libdoc" valign="top" align="center">19</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04jyf.xml">E04JYF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04JBF">E04JBF</a></td><td class="libdoc" valign="top" align="center">16</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04KAF">E04KAF</a></td><td class="libdoc" valign="top" align="center">19</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04kyf.xml">E04KYF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04KBF">E04KBF</a></td><td class="libdoc" valign="top" align="center">16</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04KCF">E04KCF</a></td><td class="libdoc" valign="top" align="center">19</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04kzf.xml">E04KZF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04LAF">E04LAF</a></td><td class="libdoc" valign="top" align="center">19</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04lyf.xml">E04LYF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04MBF">E04MBF</a></td><td class="libdoc" valign="top" align="center">18</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04mff.xml">E04MFF/E04MFA</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04NAF">E04NAF</a></td><td class="libdoc" valign="top" align="center">18</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04nff.xml">E04NFF/E04NFA</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04UNF">E04UNF</a></td><td class="libdoc" valign="top" align="center">22</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04usf.xml">E04USF/E04USA</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04UPF">E04UPF</a></td><td class="libdoc" valign="top" align="center">19</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04usf.xml">E04USF/E04USA</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04VCF">E04VCF</a></td><td class="libdoc" valign="top" align="center">17</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04VDF">E04VDF</a></td><td class="libdoc" valign="top" align="center">17</td><td class="libdoc" valign="top"><a class="rout" href="../E04/e04ucf.xml">E04UCF/E04UCA</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#E04ZCF">E04ZCF/E04ZCA</a></td><td class="libdoc" valign="top" align="center">24</td><td class="libdoc" valign="top">No longer required</td></tr></tbody></table></div><h2 class="standard"><a class="sec" name="references" id="references"/>8&#160;&#160;References</h2><div class="paramtext"><a name="ref098" id="ref098"/>Bard Y (1974)  <i>Nonlinear Parameter Estimation</i> Academic Press </div>
<div class="paramtext"><a name="ref223" id="ref223"/>Dantzig G B (1963)  <i>Linear Programming and Extensions</i> Princeton University Press </div>
<div class="paramtext"><a name="ref224" id="ref224"/>Fletcher R (1987)  <i>Practical Methods of Optimization</i> (2nd Edition) Wiley </div>
<div class="paramtext"><a name="ref256" id="ref256"/>Gill P E and Murray W (ed.) (1974)  <i>Numerical Methods for Constrained Optimization</i> Academic Press </div>
<div class="paramtext"><a name="ref079" id="ref079"/>Gill P E, Murray W and Wright M H (1981)  <i>Practical Optimization</i> Academic Press </div>
<div class="paramtext"><a name="ref225" id="ref225"/>Murray W (ed.) (1972)  <i>Numerical Methods for Unconstrained Optimization</i> Academic Press </div>
<div class="paramtext"><a name="ref099" id="ref099"/>Wolberg J R (1967)  <i>Prediction Analysis</i> Van Nostrand </div><hr/><div><a class="chap" href="e04conts.xml">E04 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/E04/e04intro.pdf">E04 Chapter Introduction (PDF version)</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div>
<div><hr/><a class="genint" href="../FRONTMATTER/copyright.xml">&#169; The Numerical Algorithms Group Ltd, Oxford, UK. 2011</a></div></body></html>