[Scilab-users] Polynomial fitting

Clément David Clement.David at esi-group.com
Thu Apr 2 12:06:09 CEST 2020


Hello Frederico,

AFAIK there is a moc_polyfit function inside the Matlab/Octave Compatibility toolbox which might help you porting your code. Stixbox also provides a polyfit function which might be more generic toward Scilab datatypes.

Thanks,

--
Clément

> -----Original Message-----
> From: users <users-bounces at lists.scilab.org> On Behalf Of Stéphane Mottelet
> Sent: Thursday, April 2, 2020 10:48 AM
> To: users at lists.scilab.org
> Subject: Re: [Scilab-users] Polynomial fitting
> 
> 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/mail
> inglists.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 <mailto:users at lists.scilab.org>
> 	https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLm
> Zy/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


More information about the users mailing list