Section: Optimization and Curve Fitting
polyfit
routine has the following syntax
p = polyfit(x,y,n)
where x
and y
are vectors of the same size, and
n
is the degree of the approximating polynomial.
The resulting vector p
forms the coefficients of
the optimal polynomial (in descending degree) that fit
y
with x
.
polyfit
routine finds the approximating polynomial
such that
is minimized. It does so by forming the Vandermonde matrix
and solving the resulting set of equations using the backslash
operator. Note that the Vandermonde matrix can become poorly
conditioned with large n
quite rapidly.
--> x = linspace(0,1,20); --> y = sin(2*pi*x); --> plot(x,y,'r-')
The resulting plot is shown here
Next, we fit a third degree polynomial to the sine, and use
polyval
to plot it
--> p = polyfit(x,y,3) p = <double> - size: [1 4] Columns 1 to 3 21.91704187823533800 -32.87556281735300701 11.18972672341396901 Columns 4 to 4 -0.11560289214815114 --> f = polyval(p,x); --> plot(x,y,'r-',x,f,'ko');
The resulting plot is shown here
Increasing the order improves the fit, as
--> p = polyfit(x,y,11) p = <double> - size: [1 12] Columns 1 to 3 1.2464387511303785e+01 -6.8554131311258885e+01 1.3005554655396099e+02 Columns 4 to 6 -7.1093974663600378e+01 -3.8281376437475764e+01 -1.4122219880724931e+01 Columns 7 to 9 8.5101772697717465e+01 -5.6416637185701446e-01 -4.1286145175046236e+01 Columns 10 to 12 -2.9396624377344871e-03 6.2832467411045743e+00 -1.2608708173169825e-09 --> f = polyval(p,x); --> plot(x,y,'r-',x,f,'ko');
The resulting plot is shown here