[Scilab-users] Polynomial fitting

Stéphane Mottelet stephane.mottelet at utc.fr
Thu Apr 2 10:48:07 CEST 2020


Hello Frederico,

Le 02/04/2020 à 10:27, Federico Miyara a écrit :
>
> Dear All,
>
> 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.
>
> I found the following thread 
> http://mailinglists.scilab.org/Polynomic-regression-td4030799.html 
> <https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/mailinglists.scilab.org/Polynomic-regression-td4030799.html> 
> explaining that one can use the backslash, for instance for a 3rd 
> degree polynomial, where x and y are column vectors:
>
> X = [ones(x), x, x.^2, x.^3]
> A = X\y;
>
> (I changed the order of powers to get the coefficients ready for horner)
>
> I implemented a polyfit function using the basic theory of polynomial 
> regression and I find it is faster by a factor of 1.5-2 than the 
> previously mentioned method.

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.

S.

>
> The basic algorithm I use is (n = desired degree):
>
> // Initialize matrix X
> X = ones(length(x), n+1);
> // Compute Vandermonde's matrix
> for k =2:n+1
>    X(:,k) = X(:,k-1).*x;
> end
> // Apply the Moore-Penrose pseudoinverse matrix and
> // multiply by the dependent data vector to get the
> // least squares approximation of the polynomial
> // coefficients
> A = inv(X'*X)*X'*y;
>
> 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.
>
> Regards,
>
> Federico Miyara
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users

-- 
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
http://www.utc.fr/~mottelet

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20200402/41782232/attachment.htm>


More information about the users mailing list