1、function p,S,mu = polyfit(x,y,n)%POLYFIT Fit polynomial to data.% P = POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of% degree N that fits the data Y best in a least-squares sense. P is a% row vector of length N+1 containing the polynomial coefficients in% descending powers, P(1)*XN + P
2、(2)*X(N-1) +.+ P(N)*X + P(N+1).% P,S = POLYFIT(X,Y,N) returns the polynomial coefficients P and a% structure S for use with POLYVAL to obtain error estimates for% predictions. S contains fields for the triangular factor (R) from a QR% decomposition of the Vandermonde matrix of X, the degrees of free
3、dom% (df), and the norm of the residuals (normr). If the data Y are random,% an estimate of the covariance matrix of P is (Rinv*Rinv)*normr2/df,% where Rinv is the inverse of R.% P,S,MU = POLYFIT(X,Y,N) finds the coefficients of a polynomial in% XHAT = (X-MU(1)/MU(2) where MU(1) = MEAN(X) and MU(2)
4、= STD(X). This% centering and scaling transformation improves the numerical properties% of both the polynomial and the fitting algorithm.% Warning messages result if N is = length(X), if X has repeated, or% nearly repeated, points, or if X might need centering and scaling.% Class support for inputs
5、X,Y:% float: double, single% See also POLY, POLYVAL, ROOTS.% Copyright 1984-2005 The MathWorks, Inc.% $Revision: 5.17.4.7 $ $Date: 2005/12/12 23:26:23 $% The regression problem is formulated in matrix format as:% y = V*p or% 3 2% y = x x x 1 p3% p2% p1% p0% where the vector p contains the coefficien
6、ts to be found. For a% 7th order polynomial, matrix V would be:% V = x.7 x.6 x.5 x.4 x.3 x.2 x ones(size(x);if isequal(size(x),size(y)error(MATLAB:polyfit:XYSizeMismatch,.X and Y vectors must be the same size.)endx = x(:);y = y(:);if nargout 2mu = mean(x); std(x);x = (x - mu(1)/mu(2);end% Construct
7、Vandermonde matrix.V(:,n+1) = ones(length(x),1,class(x);for j = n:-1:1V(:,j) = x.*V(:,j+1);end% Solve least squares problem.Q,R = qr(V,0);ws = warning(off,all); p = R(Q*y); % Same as p = Vy;warning(ws);if size(R,2) size(R,1)warning(MATLAB:polyfit:PolyNotUnique, .Polynomial is not unique; degree = nu
8、mber of data points.)elseif condest(R) 1.0e10if nargout 2warning(MATLAB:polyfit:RepeatedPoints, .Polynomial is badly conditioned. Add points with distinct Xn . values or reduce the degree of the polynomial.);elsewarning(MATLAB:polyfit:RepeatedPointsOrRescale, .Polynomial is badly conditioned. Add po
9、ints with distinct Xn . values, reduce the degree of the polynomial, or try centeringn . and scaling as described in HELP POLYFIT.);endendr = y - V*p;p = p.; % Polynomial coefficients are row vectors by convention.% S is a structure containing three elements: the triangular factor from a% QR decomposition of the Vandermonde matrix, the degrees of freedom and% the norm of the residuals.S.R = R;S.df = max(0,length(y) - (n+1);S.normr = norm(r);