Mercurial > hg > octave-lyh
view scripts/polynomial/polyfit.m @ 2311:2b5788792cad
[project @ 1996-07-11 20:18:38 by jwe]
author | jwe |
---|---|
date | Thu, 11 Jul 1996 20:18:38 +0000 |
parents | 5cffc4b8de57 |
children | 204cc7db6f4a |
line wrap: on
line source
### Copyright (C) 1996 John W. Eaton ### ### This file is part of Octave. ### ### Octave is free software; you can redistribute it and/or modify it ### under the terms of the GNU General Public License as published by ### the Free Software Foundation; either version 2, or (at your option) ### any later version. ### ### Octave is distributed in the hope that it will be useful, but ### WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ### General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### along with Octave; see the file COPYING. If not, write to the Free ### Software Foundation, 59 Temple Place - Suite 330, Boston, MA ### 02111-1307, USA. ## usage: polyfit (x, y, n) ## ## Returns the coefficients of a polynomial p(x) of degree n that ## minimizes sumsq (p(x(i)) - y(i)), i.e., that best fits the data ## in the least squares sense. function p = polyfit (x, y, n) ## Written by KH (Kurt.Hornik@ci.tuwien.ac.at) on Dec 13, 1994 ## Copyright Dept of Statistics and Probability Theory TU Wien if (nargin != 3) usage ("polyfit (x, y, n)"); endif if (! (is_vector (x) && is_vector (y) && size (x) == size (y))) error ("polyfit: x and y must be vectors of the same size"); endif if (! (is_scalar (n) && n >= 0 && ! isinf (n) && n == round (n))) error ("polyfit: n must be a nonnegative integer"); endif l = length (x); x = reshape (x, l, 1); y = reshape (y, l, 1); X = ones (l, 1); if (n > 0) tmp = (x * ones (1, n)) .^ (ones (l, 1) * (1 : n)); X = [X, tmp]; endif ## Compute polynomial coeffients, making returned value compatible ## with Matlab. [Q, R] = qr (X, 0); p = flipud (R \ (Q' * y)); if (! prefer_column_vectors) p = p'; endif endfunction