Graphics Programs Reference
In-Depth Information
We change variables:
p
=
C
+
Bx.
Now we simply do a least-squares fit using this equation; that is, a
straight line. We could use the backslash notation that we used to fit
the parabola but, for variety, let's use the
polyfit
function. A straight
line is a polynomial of degree 1. The following code takes the logarithm
of the population data and fits a straight line to it:
>> logp = log(P);
>> c = polyfit(year,logp,1)
c=
0.0430 -68.2191
The vector
c
contains
B
and
C
, in that order. We use the polynomial
evaluation function
polyval
to calculate the fitted population over a fine
year grid:
>> year_fine = (year(1):0.5:year(length(year)))';
>> logpfit = polyval(c,year_fine);
And we display the results on linear and logarithmic
y
-scales:
subplot(221)
plot(year,P,':o',year_fine,exp(logpfit))
subplot(222)
semilogy(year,P,':o',year_fine,exp(logpfit))
The single straight line cannot fit all the data. The right hand plot
indicates that there were two growth factors,
B
: one prior to 1870 and
one after. Let's do another fit using only the data after 1870:
ind = find(year>1870);
logp = log(P(ind));
c = polyfit(year(ind),logp,1);
logpfit = polyval(c,year_fine);
clf subplot(221)
plot(year,P,':o',year_fine,exp(logpfit))
subplot(222)
semilogy(year,P,':o',year_fine,exp(logpfit))
