p = polyfit(x,y,n)
p = polyfit(x,y,n)
finds the coefficients of a polynomial p(x)
of degree n
that fits the data, p(x(i))
to y(i)
, in a least squares sense. The result p
is a row vector of length n+1
containing the polynomial coefficients in descending powers.
erf(x)
, by a polynomial in x
. This is a risky project because erf(x)
is a bounded function, while polynomials are unbounded, so the fit might not be very good.
First generate a vector of x
-points, equally spaced in the interval [0, 2.5]
; then evaluate erf(x)
at those points.
The coefficients in the approximating polynomial of degree 6 arex = (0: 0.1: 2.5)';
y = erf(x);
There are seven coefficients and the polynomial isp = polyfit(x,y,6)
p =
0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
To see how good the fit is, evaluate the polynomial at the data points with
f = polyval(p,x);
A table showing the data, fit, and error is
So, on this interval, the fit is good to between three and four digits. Beyond this interval the graph shows that the polynomial behavior takes over and the approximation quickly deteriorates.table = [x y f y-f]
table =
0 0 0.0004 -0.0004
0.1000 0.1125 0.1119 0.0006
0.2000 0.2227 0.2223 0.0004
0.3000 0.3286 0.3287 -0.0001
0.4000 0.4284 0.4288 -0.0004
...
2.1000 0.9970 0.9969 0.0001
2.2000 0.9981 0.9982 -0.0001
2.3000 0.9989 0.9991 -0.0003
2.4000 0.9993 0.9995 -0.0002
2.5000 0.9996 0.9994 0.0002
x = (0: 0.1: 5)';
y = erf(x);
f = polyval(p,x);
plot(x,y,'o',x,f,'-')
axis([0 5 0 2])
Algorithm It then uses the backslash operator, \, to solve the least squares problem
The M-file can be modified to use other functions of x as the basis functions.
conv
,poly
,polyval
,roots
,vander
(c) Copyright 1994 by The MathWorks, Inc.