<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hello Frederico,<br>
    </p>
    <div class="moz-cite-prefix">Le 02/04/2020 à 10:27, Federico Miyara
      a écrit :<br>
    </div>
    <blockquote type="cite"
      cite="mid:208747ef-5ed7-4d7f-3883-391c60c2a804@fceia.unr.edu.ar">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <br>
      <font face="Courier New">Dear All,<br>
        <br>
        Trying to convert an old Matlab script to Scilab I miss the
        function polyfit, which computes the coefficients of a
        polynomial that fits x-y data using the least square method.<br>
        <br>
        I found the following thread <a moz-do-not-send="true"
href="https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/mailinglists.scilab.org/Polynomic-regression-td4030799.html">http://mailinglists.scilab.org/Polynomic-regression-td4030799.html</a>
        explaining that one can use the backslash, for instance for a
        3rd degree polynomial, where x and y are column vectors:<br>
        <br>
        X = [</font><font face="Courier New">ones(x), </font><font
        face="Courier New">x, </font><font face="Courier New">x.^2, </font><font
        face="Courier New"> </font><font face="Courier New"> </font><font
        face="Courier New">x.^3</font><font face="Courier New">]<br>
        A = X\y; <br>
        <br>
        (I changed the order of powers to get the coefficients ready for
        horner)<br>
        <br>
        I implemented a polyfit function using the basic theory of
        polynomial regression and I find it is faster </font><font
        face="Courier New">by a factor of 1.5-2 </font><font
        face="Courier New">than the previously mentioned method.<br>
      </font></blockquote>
    <p><font face="Courier New">Yeah, but really badly conditionned
        compared to the above method which is based on orthogonal
        tranformations (X=Q*R factorization). With your below method you
        solve a linear system with X'*X matrix which has a condition
        number which is the square of the condition number of the R
        matrix issued from the Q*R factorization of X.</font></p>
    <p><font face="Courier New">S.<br>
      </font></p>
    <blockquote type="cite"
      cite="mid:208747ef-5ed7-4d7f-3883-391c60c2a804@fceia.unr.edu.ar"><font
        face="Courier New"> <br>
        The basic algorithm I use is (n = desired degree):<br>
        <br>
        // Initialize matrix X<br>
        X = ones(length(x), n+1);<br>
        // Compute Vandermonde's matrix<br>
        for k =2:n+1<br>
           X(:,k) = X(:,k-1).*x;<br>
        end<br>
        // Apply the Moore-Penrose pseudoinverse matrix and<br>
        // multiply by the dependent data vector to get the<br>
        // least squares approximation of the polynomial<br>
        // coefficients<br>
        A = inv(X'*X)*X'*y;<br>
        <br>
        I've seen some discussion regarding the need for a polyfit
        function in Scilab. The main argument against such a function is
        that it is unnecessary since it is a particular case of the
        backslash division. This is true, but the above example shows
        that users' implementations are not always optimized, and as it
        is such a frequent problem, it would be nice to have a native
        polyfit (or whatever it may be called) function. <br>
        <br>
        Regards,<br>
        <br>
        Federico Miyara<br>
      </font> <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-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="https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users">https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users</a>
</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
<a class="moz-txt-link-freetext" href="http://www.utc.fr/~mottelet">http://www.utc.fr/~mottelet</a>
</pre>
  </body>
</html>