Fit Exponential Model to Data
This example shows how to fit an exponential model to data using the trust-region and Levenberg-Marquardt nonlinear least-squares algorithms.
Load the census data set.
load censusThe variables pop and cdate contain data for the population size and the year the census was taken, respectively.
Display a scatter plot of the data.
scatter(cdate,pop) xlabel("Year") ylabel("Population")

The plot shows that the population increases from year to year in a shape that resembles an exponential function.
Fit a two-term exponential model to the population data using the default trust-region fitting algorithm. Return the results of the fit and the goodness-of-fit statistics.
[exp_tr,gof_tr] = fit(cdate,pop,"exp2")exp_tr =
General model Exp2:
exp_tr(x) = a*exp(b*x) + c*exp(d*x)
Coefficients (with 95% confidence bounds):
a = 7.169e-17
b = 0.02155
c = 0
d = 0.02155
gof_tr = struct with fields:
sse: 1.2412e+04
rsquare: 0.8995
dfe: 17
adjrsquare: 0.8818
rmse: 27.0209
exp_tr contains the results of the fit, including coefficients calculated with the trust-region fitting algorithm. The goodness-of-fit statistics stored in gof_tr include the root mean squared error (RMSE) of 27.0209.
Plot the model in exp_tr together with a scatter plot of the data.
plot(exp_tr,cdate,pop) legend(["data","predicted value"]) xlabel("Year") ylabel("Population")

The plot shows that the model in exp_tr does not closely follow the census data.
Improve the fit by using the Levenberg-Marquardt fitting algorithm to calculate the coefficients.
[exp_lm,gof_lm] = fit(cdate,pop,"exp2",Algorithm="Levenberg-Marquardt")
exp_lm =
General model Exp2:
exp_lm(x) = a*exp(b*x) + c*exp(d*x)
Coefficients (with 95% confidence bounds):
a = 4.282e-17 (-1.125e-11, 1.126e-11)
b = 0.02477 (-5.67, 5.719)
c = -3.933e-17 (-1.126e-11, 1.126e-11)
d = 0.02481 (-5.696, 5.745)
gof_lm = struct with fields:
sse: 475.9498
rsquare: 0.9961
dfe: 17
adjrsquare: 0.9955
rmse: 5.2912
exp_lm contains the results of the fit, including coefficients calculated with the Levenberg-Marquardt fitting algorithm. The goodness-of-fit statistics stored in gof_lm include the RMSE of 5.2912, which is smaller than the RMSE for exp_tr. The relative sizes of the RMSEs indicate that the model stored in exp_lm fits the data more accurately than the model stored in exp_tr.
Plot the model in exp_lm together with a scatter plot of the data.
plot(exp_lm,cdate,pop) legend(["data","predicted value"]) xlabel("Year") ylabel("Population")

The plot shows that the model in exp_lm follows the census data more closely than the model in exp_tr.