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-boun...@lists.scilab.org> On Behalf Of Stéphane Mottelet > Sent: Thursday, April 2, 2020 10:48 AM > To: users@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@lists.scilab.org <mailto:users@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 _______________________________________________ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users