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@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
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users