% varpro_example.m
% Sample problem illustrating the use of varpro.m
%
% Observations y(t) are given at 10 values of t.
%
% The model for this function y(t) is
%
% eta(t) = c1 exp(-alpha2 t)*cos(alpha3 t)
% + c2 exp(-alpha1 t)*cos(alpha2 t)
%
% The linear parameters are c1 and c2, and the
% nonlinear parameters are alpha1, alpha2, and alpha3.
%
% The two nonlinear functions in the model are
%
% Phi1(alpha,t) = exp(-alpha2 t)*cos(alpha3 t),
% Phi2(alpha,t) = exp(-alpha1 t)*cos(alpha2 t).
%
% Dianne P. O'Leary and Bert W. Rust, September 2010
disp('****************************************')
disp('Sample problem illustrating the use of varpro.m')
% Data observations y(t) were taken at these times:
t = [0;.1;.22;.31;.46;.50;.63;.78;.85;.97];
y = [ 6.9842; 5.1851; 2.8907; 1.4199; -0.2473;
-0.5243; -1.0156; -1.0260; -0.9165; -0.6805];
% The weights for the least squares fit are stored in w.
w = [ 1.0; 1.0; 1.0; 0.5; 0.5; 1.0; 0.5; 1.0; 0.5; 0.5];
% Set varpro options to display the progress of the iteration
% and to check the correctness of the derivative formulas.
options = optimset('Display','iter','DerivativeCheck','on');
% Set the initial guess for alpha and call varpro to estimate
% alpha and c.
alphainit = [0.5; 2; 3]; % initial guess
tic
[alpha,c,wresid,resid_norm,y_est,Regression] = ...
varpro(y,w,alphainit,2,@(alpha)adaex(alpha,t),[],[],options);
toc
% The data y(t) were generated using the parameters
% alphatrue = [1.0; 2.5; 4.0], ctrue = [6; 1].
% Noise was added to the data, so these parameters do not provide
% the best fit. The computed solution is:
% Linear Parameters:
% 5.8416357e+00 1.1436854e+00
% Nonlinear Parameters:
% 1.0132255e+00 2.4968675e+00 4.0625148e+00
% Note that there are many sets of parameters that fit the data well.
% Display some regression diagnostics.
Regression
disp('Correlation matrix')
disp(Regression.CorMx)
disp('End of sample problem.')
disp('****************************************')