<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><br>
    </p>
    <p>Hello Paul,</p>
    <p>Rewriting the function as follows:</p>
    <p>function f=target(x)<br>
          val_lin = lineaire(x,1,2);<br>
          val_rac = racine(x,10,6);<br>
      //        f = abs(val_lin - val_rac); <br>
          f = sqrt((val_lin - val_rac)^2); <br>
          disp(f)<br>
          if ~isreal(f) then pause; end<br>
      endfunction</p>
    <p>will show you that at a certain iteraton 'x=-2' so
      "racine(x,10,6)" returns a complex number and in turn sqrt() does,
      when abs() returned the modulus (I added a 'pause' so you can play
      with the variables).</p>
    <p>Regards,</p>
    <p>Paul<br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 01/15/2017 06:04 PM,
      <a class="moz-txt-link-abbreviated" href="mailto:paul.carrico@free.fr">paul.carrico@free.fr</a> wrote:<br>
    </div>
    <blockquote cite="mid:4ccec3f1dd562124523b7f9b02bbe5d8@free.fr"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">Hi Stephane,</div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace"> </div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">You're right, I forgot my basis :-)</div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace"> </div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">Nevertheless when I re-write the target function
        as the following, it fails after some iterations and I do not
        understand the origin (??)</div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace"> </div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">Paul</div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace"> </div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">#######################################</div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">
        <pre><span>function</span> <span>f</span><span>=</span><span>target</span><span>(</span><span>x</span><span>)</span>
    <span>val_lin</span> <span>=</span> <span>lineaire</span><span>(</span><span>x</span><span>,</span><span>1</span><span>,</span><span>2</span><span>)</span><span>;</span>
    <span>val_rac</span> <span>=</span> <span>racine</span><span>(</span><span>x</span><span>,</span><span>10</span><span>,</span><span>6</span><span>)</span><span>;</span>
<span>//        f = abs(val_lin - val_rac); </span>
    <span>f</span> <span>=</span> <span>sqrt</span><span>(</span><span>(</span><span>val_lin</span> <span>-</span> <span>val_rac</span><span>)</span><span>^</span><span>2</span><span>)</span><span>;</span> 
    <span>printf</span><span>(</span><span>"</span><span>f = %g\n</span><span>"</span><span>,</span><span>f</span><span>)</span><span>;</span>
<span>endfunction</span></pre>
      </div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace"> </div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">######################################</div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">Console message:</div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">*********** qnbd (with bound cstr) ****************<br>
        dimension= 1, epsq= 0.2220446049250313E-15, verbosity level:
        imp= 3<br>
        max number of iterations allowed: iter= 1000<br>
        max number of calls to costf allowed: nap= 1000<br>
        ------------------------------------------------<br>
        f = 23.6393<br>
        f = 25.1965<br>
        f = 22.0911<br>
        qnbd : iter= 1 f= 0.2363932D+02<br>
        qnbd : nbre fact 1 defact 0 total var factorisees 1<br>
        rlbd tp= 0.6440E+02 tmax= 0.1000E+11 dh0/dt=-0.6027E+00<br>
        f = 21.6468<br>
        f = 23.1924<br>
        f = 20.111<br>
        es t= 0.3318E+01 h=-0.1992E+01 dh/dt=-0.5981E+00
        dfh/dt=-0.6005E+00 dt 0.3E+01<br>
        f = 4<br>
        f = 6.47214<br>
        f = 6<br>
        al_parameters,'qn','ar',nocf,niter,imp=3)<br>
        !--error 98 <br>
        La variable retournée par la fonction Scilab passée en argument
        n'est pas valide.<br>
        at line 36 of exec file called by : <br>
        RFACE/Rosembrock/fonctions_test.sce', -1<br>
        <br>
        t= 0.6440E+02 h=-0.1992E+01 dh/dt=-0.5981E+00 dfh/dt= 0.0000E+00
        dt 0.6E+02<br>
        qnbd : indqn= 0</div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace"> </div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace"> </div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace"> </div>
      <div class="pre" style="margin: 0; padding: 0; font-family:
        monospace">Le 2017-01-15 12:59, Stéphane Mottelet a écrit :
        <blockquote type="cite" style="padding: 0 0.4em; border-left:
          #1010ff 2px solid; margin: 0">Hello <br>
          <br>
          Your target function is not differrentiable (Because of the
          absolute<br>
          value). That explains why optim has some difficulties. Using a
          square<br>
          instead should give the advantage to optim against
          nelder-mead.<br>
          <br>
          S.<br>
          <br>
          <br>
          <br>
          <blockquote type="cite" style="padding: 0 0.4em; border-left:
            #1010ff 2px solid; margin: 0">Le 15 janv. 2017 à 11:39, <a
              moz-do-not-send="true" href="mailto:paul.carrico@free.fr">paul.carrico@free.fr</a>
            a écrit :<br>
            <br>
            Hi all<br>
            <br>
            Well, from a "macro" point of view, gradient based methods
            (order 1 method) should be more efficient than Nelder-Mead
            one (order 0) especially  for 1D topic, shouldn't be?<br>
            <br>
            In the case here bellow, when I use 'Optim' it is not the
            case in comparison to 'NelderMead'... I don'y know what I'm
            doing wrong but I decide to frop off 'optim' in favor tp
            Nelder-Mead - nevertheless the later method requires much
            more iterations :-(<br>
            <br>
            I'll be interested by some feedback on such topic, either in
            the mailing list (or in MP in order to not pollute it).<br>
            <br>
            Paul<br>
            ########################################"<br>
            'optim'<br>
            ########################################<br>
            mode(0)<br>
            <br>
            function f=lineaire(x, a2, b2)<br>
                f = a2*x+b2;<br>
            endfunction<br>
            <br>
            function g=racine(x, a1, b1)<br>
                g = sqrt(a1*x) + b1;<br>
            endfunction<br>
            <br>
            function f=target(x)<br>
                val_lin = lineaire(x,1,2);<br>
                val_rac = racine(x,10,6);<br>
                f = abs(val_lin - val_rac);<br>
            endfunction<br>
            <br>
            // Cost function :<br>
            function [f, g, ind]=cost(x, ind)<br>
                f = target(x);<br>
            //    g = numderivative(target, x.');<br>
            //    g = numderivative(target, x.',0.1,order = 2);<br>
                g = numderivative(target, x.',order = 2);  // better but
            why ??? h automatic works better ???<br>
            //    g = numderivative(target, x.',order = 4);<br>
            //    g = numderivative(target, x.',0.1, order = 4);<br>
            endfunction<br>
            <br>
            // optimisation avec optim<br>
                initial_parameters = [50]<br>
                lower_bounds = [0];<br>
                upper_bounds = [1000];<br>
                nocf = 1000;      // number of call of f<br>
                niter = 1000;    // number of iterations<br>
                [fopt, xopt, gopt, work, iters, evals, err] =
optim(cost,'b',lower_bounds,upper_bounds,initial_parameters,'qn','ar',nocf,niter,imp=3);<br>
                xopt<br>
                fopt<br>
                err<br>
            <br>
            // traçage courbes<br>
            x = linspace(0,50,1000)';<br>
            plot_raci = racine(x,10,6);<br>
            plot_lin = lineaire(x,1,2);<br>
            <br>
            scf(1);<br>
            drawlater();<br>
            xgrid(3);<br>
            f = gcf();<br>
            //f<br>
            f.figure_size = [1000, 1000];<br>
            f.background = color(255,255,255);<br>
            a = gca();<br>
            //a<br>
            a.font_size = 2;<br>
            a.x_label.text = "X axis" ;<br>
            a.x_location="bottom";<br>
            a.x_label.font_angle=0;<br>
            a.x_label.font_size = 4;<br>
            a.y_label.text = "Y axis";<br>
            a.y_location="left";<br>
            a.y_label.font_angle=-90;<br>
            a.Y_label.font_size = 4;<br>
            a.title.text = "Title";<br>
            a.title.font_size = 5;<br>
            a.line_style = 1;<br>
            <br>
            // début des courbes<br>
            plot(x,plot_lin);<br>
            e1 = gce();<br>
            p1 = e1.children;<br>
            p1.thickness = 1;<br>
            p1.line_style = 1;<br>
            p1.foreground = 3;<br>
            <br>
            plot(x,plot_raci);<br>
            e2 = gce();<br>
            p2 = e2.children;<br>
            p2.thickness = 1;<br>
            p2.line_style = 1;<br>
            p2.foreground = 2;<br>
            drawnow();<br>
            <br>
            #######################################<br>
            Nelder Mead<br>
            #######################################<br>
            mode(0)<br>
            <br>
            function f=lineaire(x, a2, b2)<br>
                f = a2*x+b2;<br>
            endfunction<br>
            <br>
            function g=racine(x, a1, b1)<br>
                g = sqrt(a1*x) + b1;<br>
            endfunction<br>
            <br>
            function [f, index]=target(x, index)<br>
                val_lin = lineaire(x,1,2);<br>
                val_rac = racine(x,10,6);<br>
                f = abs(val_lin - val_rac);<br>
            endfunction<br>
            <br>
            // optimisation avec optim<br>
                initial_parameters = [50]<br>
                lower_bounds = [0];<br>
                upper_bounds = [1000];<br>
            <br>
            nm = neldermead_new ();<br>
            nm = neldermead_configure(nm,"-numberofvariables",1);<br>
            nm = neldermead_configure(nm,"-function",target);<br>
            nm = neldermead_configure(nm,"-x0",initial_parameters);<br>
            nm = neldermead_configure(nm,"-maxiter",1000);<br>
            nm = neldermead_configure(nm,"-maxfunevals",1000);<br>
            nm = neldermead_configure(nm,"-tolfunrelative",10*%eps);<br>
            nm = neldermead_configure(nm,"-tolxrelative",10*%eps);<br>
            nm = neldermead_configure(nm,"-method","box");<br>
            nm = neldermead_configure(nm,"-boundsmin",lower_bounds);<br>
            nm = neldermead_configure(nm,"-boundsmax", upper_bounds);<br>
            nm = neldermead_search(nm);<br>
            nm = neldermead_restart(nm);<br>
            xopt = neldermead_get(nm,"-xopt")<br>
            fopt = neldermead_get(nm,"-fopt")<br>
            nm = neldermead_destroy(nm);<br>
            <br>
            // traçage courbes<br>
            x = linspace(0,50,1000)';<br>
            a1 = 10; b1 = 6;  // b1 > b2 here<br>
            a2 = 1; b2 = 2;<br>
            <br>
            plot_raci = racine(x,a1,b1);<br>
            plot_lin = lineaire(x,a2,b2);<br>
            <br>
            scf(1);<br>
            drawlater();<br>
            xgrid(3);<br>
            f = gcf();<br>
            //f<br>
            f.figure_size = [1000, 1000];<br>
            f.background = color(255,255,255);<br>
            a = gca();<br>
            //a<br>
            a.font_size = 2;<br>
            a.x_label.text = "X axis" ;<br>
            a.x_location="bottom";<br>
            a.x_label.font_angle=0;<br>
            a.x_label.font_size = 4;<br>
            a.y_label.text = "Y axis";<br>
            a.y_location="left";<br>
            a.y_label.font_angle=-90;<br>
            a.Y_label.font_size = 4;<br>
            a.title.text = "Title";<br>
            a.title.font_size = 5;<br>
            a.line_style = 1;<br>
            <br>
            // début des courbes<br>
            plot(x,plot_lin);<br>
            e1 = gce();<br>
            p1 = e1.children;<br>
            p1.thickness = 1;<br>
            p1.line_style = 1;<br>
            p1.foreground = 3;<br>
            <br>
            plot(x,plot_raci);<br>
            e2 = gce();<br>
            p2 = e2.children;<br>
            p2.thickness = 1;<br>
            p2.line_style = 1;<br>
            p2.foreground = 2;<br>
            drawnow();<br>
            _______________________________________________<br>
            users mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:users@lists.scilab.org">users@lists.scilab.org</a><br>
            <a moz-do-not-send="true"
              href="http://lists.scilab.org/mailman/listinfo/users"
              target="_blank" rel="noreferrer">http://lists.scilab.org/mailman/listinfo/users</a></blockquote>
          <br>
          _______________________________________________<br>
          users mailing list<br>
          <a moz-do-not-send="true" href="mailto:users@lists.scilab.org">users@lists.scilab.org</a><br>
          <a moz-do-not-send="true"
            href="http://lists.scilab.org/mailman/listinfo/users"
            target="_blank" rel="noreferrer">http://lists.scilab.org/mailman/listinfo/users</a></blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:users@lists.scilab.org">users@lists.scilab.org</a>
<a class="moz-txt-link-freetext" href="http://lists.scilab.org/mailman/listinfo/users">http://lists.scilab.org/mailman/listinfo/users</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Paul BIGNIER
Development engineer
-----------------------------------------------------------
Scilab Enterprises
143bis rue Yves Le Coz - 78000 Versailles, France
Phone: +33.1.80.77.04.68
<a class="moz-txt-link-freetext" href="http://www.scilab-enterprises.com">http://www.scilab-enterprises.com</a></pre>
  </body>
</html>