%% Fit Fourier Models Using the fit Function
% This example shows how to use the fit function to fit a Fourier model to data.
% The Fourier library model is an input argument to the fit and fittype functions. Specify the model type fourier followed by the number of terms, e.g., 'fourier1' to 'fourier8' .
% This example fits the El Nino-Southern Oscillation (ENSO) data. The ENSO data consists of monthly averaged atmospheric pressure differences between Easter Island and Darwin, Australia. This difference drives the trade winds in the southern hemisphere.
% The ENSO data is clearly periodic, which suggests it can be described by a Fourier series. Use Fourier series models to look for periodicity.
%% Fit a Two-Term Fourier Model
% Load some data and fit an two-term Fourier model.

load enso;
f = fit(month,pressure,'fourier2')
plot(f,month,pressure)

% The confidence bounds on a2 and b2 cross zero. For linear terms, you cannot be sure that these coefficients differ from zero, so they are not helping with the fit. This means that this two term model is probably no better than a one term model.
%
%% Measure Period
% The w term is a measure of period. 2*pi/w converts to the period in months, because the period of sin() and cos() is 2*pi .

w = f.w
2*pi/w

% w is very close to 12 months, indicating a yearly period. Observe this looks correct on the plot, with peaks approximately 12 months apart.
%
%% Fit an Eight-Term Fourier Model

f2 = fit(month,pressure,'fourier8')
plot(f2,month,pressure)

%
%% Measure Period

w = f2.w
(2*pi)/w

% With the f2 model, the period w is approximately 7 years.
%
%% Examine Terms
% Look for the coefficients with the largest magnitude to find the most important terms.
% a7 and b7 are the largest. Look at the a7 term in the model equation: a7*cos(7*x*w). 7*w == 7/7 = 1 year cycle. a7 and b7 indicate the annual cycle is the strongest.
% Similarly, a1 and b1 terms give 7/1, indicating a seven year cycle.
% a2 and b2 terms are a 3.5 year cycle (7/2). This is stronger than the 7 year cycle because the a2 and b2 coefficients have larger magnitude than a1 and b1.
% a3 and b3 are quite strong terms indicating a 7/3 or 2.3 year cycle.
% Smaller terms are less important for the fit, such as a6, b6, a5, and b5.
% Typically, the El Nino warming happens at irregular intervals of two to seven years, and lasts nine months to two years. The average period length is five years. The model results reflect some of these periods.
%% Set Start Points
% The toolbox calculates optimized start points for Fourier fits, based on the current data set. Fourier series models are particularly sensitive to starting points, and the optimized values might be accurate for only a few terms in the associated equations. You can override the start points and specify your own values.
% After examining the terms and plots, it looks like a 4 year cycle might be present. Try to confirm this by setting w. Get a value for w, where 8 years = 96 months.

w = (2*pi)/96

%
% Find the order of the entries for coefficients in the model ('f2') by using the coeffnames function.

coeffnames(f2)

%
% Get the current coefficient values.

coeffs = coeffvalues(f2)

%
% Set the last coefficient, w, to 0.065.

coeffs(:,18) = w

%
% Set the start points for coefficients using the new value for w.

f3 = fit(month,pressure,'fourier8', 'StartPoint', coeffs);

%
% Plot both fits to see that the new value for w in f3 does not produce a better fit than f2 .

plot(f3,month,pressure)
hold on
plot(f2, 'b')
hold off
legend( 'Data', 'f3', 'f2')

%
%% Find Fourier Fit Options
% Find available fit options using fitoptions(modelname), where modelname is the model type fourier followed by the number of terms, e.g., 'fourier1' to 'fourier8' .

fitoptions('fourier8')

% If you want to modify fit options such as coefficient starting values and constraint bounds appropriate for your data, or change algorithm settings, see the options for NonlinearLeastSquares on the fitoptions reference page.
% Copyright 2015 The MathWorks, Inc.