diff options
Diffstat (limited to 'help/en_US/scilab_en_US_help/lsqnonlin.html')
-rw-r--r-- | help/en_US/scilab_en_US_help/lsqnonlin.html | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/help/en_US/scilab_en_US_help/lsqnonlin.html b/help/en_US/scilab_en_US_help/lsqnonlin.html new file mode 100644 index 0000000..fb058f4 --- /dev/null +++ b/help/en_US/scilab_en_US_help/lsqnonlin.html @@ -0,0 +1,181 @@ +<html><head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>lsqnonlin</title> + <style type="text/css" media="all"> + @import url("scilab_code.css"); + @import url("xml_code.css"); + @import url("c_code.css"); + @import url("style.css"); + </style> + </head> + <body> + <div class="manualnavbar"> + <table width="100%"><tr> + <td width="30%"> + <span class="previous"><a href="lsqlin.html"><< lsqlin</a></span> + + </td> + <td width="40%" class="center"> + <span class="top"><a href="section_19f4f1e5726c01d683e8b82be0a7e910.html">FOSSEE Optimization Toolbox</a></span> + + </td> + <td width="30%" class="next"> + <span class="next"><a href="lsqnonneg.html">lsqnonneg >></a></span> + + </td> + </tr></table> + <hr /> + </div> + + + + <span class="path"><a href="index.html">FOSSEE Optimization Toolbox</a> >> <a href="section_19f4f1e5726c01d683e8b82be0a7e910.html">FOSSEE Optimization Toolbox</a> > lsqnonlin</span> + + <br /><br /> + <div class="refnamediv"><h1 class="refname">lsqnonlin</h1> + <p class="refpurpose">Solves a non linear data fitting problems.</p></div> + + +<div class="refsynopsisdiv"><h3 class="title">Calling Sequence</h3> + <div class="synopsis"><pre><span class="default">xopt</span><span class="default"> = </span><span class="functionid">lsqnonlin</span><span class="default">(</span><span class="default">fun</span><span class="default">,</span><span class="default">x0</span><span class="default">)</span> +<span class="default">xopt</span><span class="default"> = </span><span class="functionid">lsqnonlin</span><span class="default">(</span><span class="default">fun</span><span class="default">,</span><span class="default">x0</span><span class="default">,</span><span class="default">lb</span><span class="default">,</span><span class="default">ub</span><span class="default">)</span> +<span class="default">xopt</span><span class="default"> = </span><span class="functionid">lsqnonlin</span><span class="default">(</span><span class="default">fun</span><span class="default">,</span><span class="default">x0</span><span class="default">,</span><span class="default">lb</span><span class="default">,</span><span class="default">ub</span><span class="default">,</span><span class="default">options</span><span class="default">)</span> +<span class="default">[</span><span class="default">xopt</span><span class="default">,</span><span class="default">resnorm</span><span class="default">] = </span><span class="functionid">lsqnonlin</span><span class="default">( ... )</span> +<span class="default">[</span><span class="default">xopt</span><span class="default">,</span><span class="default">resnorm</span><span class="default">,</span><span class="default">residual</span><span class="default">] = </span><span class="functionid">lsqnonlin</span><span class="default">( ... )</span> +<span class="default">[</span><span class="default">xopt</span><span class="default">,</span><span class="default">resnorm</span><span class="default">,</span><span class="default">residual</span><span class="default">,</span><span class="default">exitflag</span><span class="default">] = </span><span class="functionid">lsqnonlin</span><span class="default">( ... )</span> +<span class="default">[</span><span class="default">xopt</span><span class="default">,</span><span class="default">resnorm</span><span class="default">,</span><span class="default">residual</span><span class="default">,</span><span class="default">exitflag</span><span class="default">,</span><span class="default">output</span><span class="default">,</span><span class="default">lambda</span><span class="default">,</span><span class="default">gradient</span><span class="default">] = </span><span class="functionid">lsqnonlin</span><span class="default">( ... )</span></pre></div></div> + +<div class="refsection"><h3 class="title">Parameters</h3> + <dl><dt><span class="term">fun :</span> + <dd><p class="para">a function, representing the objective function and gradient (if given) of the problem</p></dd></dt> + <dt><span class="term">x0 :</span> + <dd><p class="para">a vector of double, contains initial guess of variables.</p></dd></dt> + <dt><span class="term">lb :</span> + <dd><p class="para">a vector of double, contains lower bounds of the variables.</p></dd></dt> + <dt><span class="term">ub :</span> + <dd><p class="para">a vector of double, contains upper bounds of the variables.</p></dd></dt> + <dt><span class="term">options :</span> + <dd><p class="para">a list containing the parameters to be set.</p></dd></dt> + <dt><span class="term">xopt :</span> + <dd><p class="para">a vector of double, the computed solution of the optimization problem.</p></dd></dt> + <dt><span class="term">resnorm :</span> + <dd><p class="para">a double, objective value returned as the scalar value i.e. sum(fun(x).^2).</p></dd></dt> + <dt><span class="term">residual :</span> + <dd><p class="para">a vector of double, solution of objective function i.e. fun(x).</p></dd></dt> + <dt><span class="term">exitflag :</span> + <dd><p class="para">The exit status. See below for details.</p></dd></dt> + <dt><span class="term">output :</span> + <dd><p class="para">The structure consist of statistics about the optimization. See below for details.</p></dd></dt> + <dt><span class="term">lambda :</span> + <dd><p class="para">The structure consist of the Lagrange multipliers at the solution of problem. See below for details.</p></dd></dt> + <dt><span class="term">gradient :</span> + <dd><p class="para">a vector of doubles, containing the Objective's gradient of the solution.</p></dd></dt></dl></div> + +<div class="refsection"><h3 class="title">Description</h3> + <p class="para">Search the minimum of a constrained non-linear least square problem specified by :</p> + <p class="para"><span><img src='./_LaTeX_lsqnonlin.xml_1.png' style='position:relative;top:20px;width:341px;height:48px'/></span></p> + <p class="para">The routine calls fmincon which calls Ipopt for solving the non-linear least square problem, Ipopt is a library written in C++.</p> + <p class="para">The options allows the user to set various parameters of the Optimization problem. +It should be defined as type "list" and contains the following fields. +<ul class="itemizedlist"><li>Syntax : options= list("MaxIter", [---], "CpuTime", [---],"GradObj", "on");</li> +<li>MaxIter : a Scalar, containing the Maximum Number of Iteration that the solver should take.</li> +<li>CpuTime : a Scalar, containing the Maximum amount of CPU Time that the solver should take.</li> +<li>GradObj : a string, representing the gradient function is on or off.</li> +<li>Default Values : options = list("MaxIter", [3000], "CpuTime", [600], "GradObj", "off");</li></ul></p> + <p class="para">The exitflag allows to know the status of the optimization which is given back by Ipopt. +<ul class="itemizedlist"><li>exitflag=0 : Optimal Solution Found</li> +<li>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</li> +<li>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</li> +<li>exitflag=3 : Stop at Tiny Step.</li> +<li>exitflag=4 : Solved To Acceptable Level.</li> +<li>exitflag=5 : Converged to a point of local infeasibility.</li></ul></p> + <p class="para">For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/</p> + <p class="para">The output data structure contains detailed informations about the optimization process. +It has type "struct" and contains the following fields. +<ul class="itemizedlist"><li>output.iterations: The number of iterations performed during the search</li> +<li>output.constrviolation: The max-norm of the constraint violation.</li></ul></p> + <p class="para">The lambda data structure contains the Lagrange multipliers at the end +of optimization. In the current version the values are returned only when the the solution is optimal. +It has type "struct" and contains the following fields. +<ul class="itemizedlist"><li>lambda.lower: The Lagrange multipliers for the lower bound constraints.</li> +<li>lambda.upper: The Lagrange multipliers for the upper bound constraints.</li></ul></p> + <p class="para"></p></div> + +<div class="refsection"><h3 class="title">Examples</h3> + <div class="programlisting"><table border="0" width="100%"><tr><td width="98%"><pre class="scilabcode"><span class="scilabcomment">//A simple non-linear least square example taken from leastsq default present in scilab</span> +<span class="scilabfkeyword">function</span> <span class="scilabinputoutputargs">y</span><span class="scilaboperator">=</span><span class="scilabfunctionid">yth</span><span class="scilabopenclose">(</span><span class="scilabinputoutputargs">t</span><span class="scilabdefault">, </span><span class="scilabinputoutputargs">x</span><span class="scilabopenclose">)</span> +<span class="scilabinputoutputargs">y</span> <span class="scilaboperator">=</span> <span class="scilabinputoutputargs">x</span><span class="scilabopenclose">(</span><span class="scilabnumber">1</span><span class="scilabopenclose">)</span><span class="scilaboperator">*</span><a class="scilabcommand" href="scilab://exp">exp</a><span class="scilabopenclose">(</span><span class="scilaboperator">-</span><span class="scilabinputoutputargs">x</span><span class="scilabopenclose">(</span><span class="scilabnumber">2</span><span class="scilabopenclose">)</span><span class="scilaboperator">*</span><span class="scilabinputoutputargs">t</span><span class="scilabopenclose">)</span> +<span class="scilabfkeyword">endfunction</span> +<span class="scilabcomment">// we have the m measures (ti, yi):</span> +<span class="scilabid">m</span> <span class="scilaboperator">=</span> <span class="scilabnumber">10</span><span class="scilabdefault">;</span> +<span class="scilabid">tm</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.25</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.5</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.75</span><span class="scilabdefault">,</span> <span class="scilabnumber">1.0</span><span class="scilabdefault">,</span> <span class="scilabnumber">1.25</span><span class="scilabdefault">,</span> <span class="scilabnumber">1.5</span><span class="scilabdefault">,</span> <span class="scilabnumber">1.75</span><span class="scilabdefault">,</span> <span class="scilabnumber">2.0</span><span class="scilabdefault">,</span> <span class="scilabnumber">2.25</span><span class="scilabdefault">,</span> <span class="scilabnumber">2.5</span><span class="scilabopenclose">]</span><span class="scilaboperator">'</span><span class="scilabdefault">;</span> +<span class="scilabid">ym</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.79</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.59</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.47</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.36</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.29</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.23</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.17</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.15</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.12</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.08</span><span class="scilabopenclose">]</span><span class="scilaboperator">'</span><span class="scilabdefault">;</span> +<span class="scilabcomment">// measure weights (here all equal to 1...)</span> +<span class="scilabid">wm</span> <span class="scilaboperator">=</span> <a class="scilabcommand" href="scilab://ones">ones</a><span class="scilabopenclose">(</span><span class="scilabid">m</span><span class="scilabdefault">,</span><span class="scilabnumber">1</span><span class="scilabopenclose">)</span><span class="scilabdefault">;</span> +<span class="scilabcomment">// and we want to find the parameters x such that the model fits the given</span> +<span class="scilabcomment">// data in the least square sense:</span> +<span class="scilabcomment">//</span> +<span class="scilabcomment">// minimize f(x) = sum_i wm(i)^2 ( yth(tm(i),x) - ym(i) )^2</span> +<span class="scilabcomment">// initial parameters guess</span> +<span class="scilabid">x0</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">1.5</span> <span class="scilabdefault">;</span> <span class="scilabnumber">0.8</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabcomment">// in the first examples, we define the function fun and dfun</span> +<span class="scilabcomment">// in scilab language</span> +<span class="scilabfkeyword">function</span> <span class="scilabinputoutputargs">y</span><span class="scilaboperator">=</span><span class="scilabfunctionid">myfun</span><span class="scilabopenclose">(</span><span class="scilabinputoutputargs">x</span><span class="scilabdefault">, </span><span class="scilabinputoutputargs">tm</span><span class="scilabdefault">, </span><span class="scilabinputoutputargs">ym</span><span class="scilabdefault">, </span><span class="scilabinputoutputargs">wm</span><span class="scilabopenclose">)</span> +<span class="scilabinputoutputargs">y</span> <span class="scilaboperator">=</span> <span class="scilabinputoutputargs">wm</span><span class="scilaboperator">.*</span><span class="scilabopenclose">(</span> <span class="scilabfunctionid">yth</span><span class="scilabopenclose">(</span><span class="scilabinputoutputargs">tm</span><span class="scilabdefault">,</span> <span class="scilabinputoutputargs">x</span><span class="scilabopenclose">)</span> <span class="scilaboperator">-</span> <span class="scilabinputoutputargs">ym</span> <span class="scilabopenclose">)</span> +<span class="scilabfkeyword">endfunction</span> +<span class="scilabcomment">// the simplest call</span> +<span class="scilabopenclose">[</span><span class="scilabid">xopt</span><span class="scilabdefault">,</span><span class="scilabid">resnorm</span><span class="scilabdefault">,</span><span class="scilabid">residual</span><span class="scilabdefault">,</span><span class="scilabid">exitflag</span><span class="scilabdefault">,</span><span class="scilabid">output</span><span class="scilabdefault">,</span><span class="scilabid">lambda</span><span class="scilabdefault">,</span><span class="scilabid">gradient</span><span class="scilabopenclose">]</span> <span class="scilaboperator">=</span> <span class="scilabid">lsqnonlin</span><span class="scilabopenclose">(</span><span class="scilabfunctionid">myfun</span><span class="scilabdefault">,</span><span class="scilabid">x0</span><span class="scilabopenclose">)</span> +<span class="scilabcomment">// Press ENTER to continue</span></pre></td><td valign="top"><a href="scilab://scilab.execexample/"><img src="ScilabExecute.png" border="0"/></a></td><td valign="top"><a href="scilab://scilab.editexample/"><img src="ScilabEdit.png" border="0"/></a></td><td></td></tr></table></div></div> + +<div class="refsection"><h3 class="title">Examples</h3> + <div class="programlisting"><table border="0" width="100%"><tr><td width="98%"><pre class="scilabcode"><span class="scilabcomment">//A basic example taken from leastsq default present in scilab with gradient</span> +<span class="scilabfkeyword">function</span> <span class="scilabinputoutputargs">y</span><span class="scilaboperator">=</span><span class="scilabfunctionid">yth</span><span class="scilabopenclose">(</span><span class="scilabinputoutputargs">t</span><span class="scilabdefault">, </span><span class="scilabinputoutputargs">x</span><span class="scilabopenclose">)</span> +<span class="scilabinputoutputargs">y</span> <span class="scilaboperator">=</span> <span class="scilabinputoutputargs">x</span><span class="scilabopenclose">(</span><span class="scilabnumber">1</span><span class="scilabopenclose">)</span><span class="scilaboperator">*</span><a class="scilabcommand" href="scilab://exp">exp</a><span class="scilabopenclose">(</span><span class="scilaboperator">-</span><span class="scilabinputoutputargs">x</span><span class="scilabopenclose">(</span><span class="scilabnumber">2</span><span class="scilabopenclose">)</span><span class="scilaboperator">*</span><span class="scilabinputoutputargs">t</span><span class="scilabopenclose">)</span> +<span class="scilabfkeyword">endfunction</span> +<span class="scilabcomment">// we have the m measures (ti, yi):</span> +<span class="scilabid">m</span> <span class="scilaboperator">=</span> <span class="scilabnumber">10</span><span class="scilabdefault">;</span> +<span class="scilabid">tm</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.25</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.5</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.75</span><span class="scilabdefault">,</span> <span class="scilabnumber">1.0</span><span class="scilabdefault">,</span> <span class="scilabnumber">1.25</span><span class="scilabdefault">,</span> <span class="scilabnumber">1.5</span><span class="scilabdefault">,</span> <span class="scilabnumber">1.75</span><span class="scilabdefault">,</span> <span class="scilabnumber">2.0</span><span class="scilabdefault">,</span> <span class="scilabnumber">2.25</span><span class="scilabdefault">,</span> <span class="scilabnumber">2.5</span><span class="scilabopenclose">]</span><span class="scilaboperator">'</span><span class="scilabdefault">;</span> +<span class="scilabid">ym</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.79</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.59</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.47</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.36</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.29</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.23</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.17</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.15</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.12</span><span class="scilabdefault">,</span> <span class="scilabnumber">0.08</span><span class="scilabopenclose">]</span><span class="scilaboperator">'</span><span class="scilabdefault">;</span> +<span class="scilabcomment">// measure weights (here all equal to 1...)</span> +<span class="scilabid">wm</span> <span class="scilaboperator">=</span> <a class="scilabcommand" href="scilab://ones">ones</a><span class="scilabopenclose">(</span><span class="scilabid">m</span><span class="scilabdefault">,</span><span class="scilabnumber">1</span><span class="scilabopenclose">)</span><span class="scilabdefault">;</span> +<span class="scilabcomment">// and we want to find the parameters x such that the model fits the given</span> +<span class="scilabcomment">// data in the least square sense:</span> +<span class="scilabcomment">//</span> +<span class="scilabcomment">// minimize f(x) = sum_i wm(i)^2 ( yth(tm(i),x) - ym(i) )^2</span> +<span class="scilabcomment">// initial parameters guess</span> +<span class="scilabid">x0</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">1.5</span> <span class="scilabdefault">;</span> <span class="scilabnumber">0.8</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabcomment">// in the first examples, we define the function fun and dfun</span> +<span class="scilabcomment">// in scilab language</span> +<span class="scilabfkeyword">function</span> <span class="scilabopenclose">[</span><span class="scilabinputoutputargs">y</span><span class="scilabdefault">, </span><span class="scilabinputoutputargs">dy</span><span class="scilabopenclose">]</span><span class="scilaboperator">=</span><span class="scilabfunctionid">myfun</span><span class="scilabopenclose">(</span><span class="scilabinputoutputargs">x</span><span class="scilabdefault">, </span><span class="scilabinputoutputargs">tm</span><span class="scilabdefault">, </span><span class="scilabinputoutputargs">ym</span><span class="scilabdefault">, </span><span class="scilabinputoutputargs">wm</span><span class="scilabopenclose">)</span> +<span class="scilabinputoutputargs">y</span> <span class="scilaboperator">=</span> <span class="scilabinputoutputargs">wm</span><span class="scilaboperator">.*</span><span class="scilabopenclose">(</span> <span class="scilabfunctionid">yth</span><span class="scilabopenclose">(</span><span class="scilabinputoutputargs">tm</span><span class="scilabdefault">,</span> <span class="scilabinputoutputargs">x</span><span class="scilabopenclose">)</span> <span class="scilaboperator">-</span> <span class="scilabinputoutputargs">ym</span> <span class="scilabopenclose">)</span> +<span class="scilabid">v</span> <span class="scilaboperator">=</span> <span class="scilabinputoutputargs">wm</span><span class="scilaboperator">.*</span><a class="scilabcommand" href="scilab://exp">exp</a><span class="scilabopenclose">(</span><span class="scilaboperator">-</span><span class="scilabinputoutputargs">x</span><span class="scilabopenclose">(</span><span class="scilabnumber">2</span><span class="scilabopenclose">)</span><span class="scilaboperator">*</span><span class="scilabinputoutputargs">tm</span><span class="scilabopenclose">)</span> +<span class="scilabinputoutputargs">dy</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabid">v</span> <span class="scilabdefault">,</span> <span class="scilaboperator">-</span><span class="scilabinputoutputargs">x</span><span class="scilabopenclose">(</span><span class="scilabnumber">1</span><span class="scilabopenclose">)</span><span class="scilaboperator">*</span><span class="scilabinputoutputargs">tm</span><span class="scilaboperator">.*</span><span class="scilabid">v</span><span class="scilabopenclose">]</span> +<span class="scilabfkeyword">endfunction</span> +<span class="scilabid">options</span> <span class="scilaboperator">=</span> <a class="scilabcommand" href="scilab://list">list</a><span class="scilabopenclose">(</span><span class="scilabstring">"</span><span class="scilabstring">GradObj</span><span class="scilabstring">"</span><span class="scilabdefault">,</span> <span class="scilabstring">"</span><span class="scilabstring">on</span><span class="scilabstring">"</span><span class="scilabopenclose">)</span> +<span class="scilabopenclose">[</span><span class="scilabid">xopt</span><span class="scilabdefault">,</span><span class="scilabid">resnorm</span><span class="scilabdefault">,</span><span class="scilabid">residual</span><span class="scilabdefault">,</span><span class="scilabid">exitflag</span><span class="scilabdefault">,</span><span class="scilabid">output</span><span class="scilabdefault">,</span><span class="scilabid">lambda</span><span class="scilabdefault">,</span><span class="scilabid">gradient</span><span class="scilabopenclose">]</span> <span class="scilaboperator">=</span> <span class="scilabid">lsqnonlin</span><span class="scilabopenclose">(</span><span class="scilabfunctionid">myfun</span><span class="scilabdefault">,</span><span class="scilabid">x0</span><span class="scilabdefault">,</span><span class="scilabopenclose">[</span><span class="scilabopenclose">]</span><span class="scilabdefault">,</span><span class="scilabopenclose">[</span><span class="scilabopenclose">]</span><span class="scilabdefault">,</span><span class="scilabid">options</span><span class="scilabopenclose">)</span></pre></td><td valign="top"><a href="scilab://scilab.execexample/"><img src="ScilabExecute.png" border="0"/></a></td><td valign="top"><a href="scilab://scilab.editexample/"><img src="ScilabEdit.png" border="0"/></a></td><td></td></tr></table></div></div> + +<div class="refsection"><h3 class="title">Authors</h3> + <ul class="itemizedlist"><li class="member">Harpreet Singh</li></ul></div> + <br /> + + <div class="manualnavbar"> + <table width="100%"> + <tr><td colspan="3" class="next"><a href="http://bugzilla.scilab.org/enter_bug.cgi?product=Scilab%20software&component=Documentation%20pages" class="ulink">Report an issue</a></td></tr> +<tr> + <td width="30%"> + <span class="previous"><a href="lsqlin.html"><< lsqlin</a></span> + + </td> + <td width="40%" class="center"> + <span class="top"><a href="section_19f4f1e5726c01d683e8b82be0a7e910.html">FOSSEE Optimization Toolbox</a></span> + + </td> + <td width="30%" class="next"> + <span class="next"><a href="lsqnonneg.html">lsqnonneg >></a></span> + + </td> + </tr></table> + <hr /> + </div> + </body> +</html> |