function [Phi,dPhi,Ind] = adaex(alpha,t)
% function [Phi,dPhi,Ind] = adaex(alpha,t)
% This is a sample user-defined function to be used by varpro.m.
%
% The model for this sample problem is
%
% eta(t) = c1 exp(-alpha2 t)*cos(alpha3 t)
% + c2 exp(-alpha1 t)*cos(alpha2 t)
% = c1 Phi1 + c2 Phi2.
%
% Given t and alpha, we evaluate Phi, dPhi, and Ind.
%
% Dianne P. O'Leary and Bert W. Rust, September 2010.
% Evaluate Phi1 = exp(-alpha2 t)*cos(alpha3 t),
% Phi2 = exp(-alpha1 t)*cos(alpha2 t),
% at each of the data points in t.
Phi(:,1) = exp(-alpha(2)*t).*cos(alpha(3)*t);
Phi(:,2) = exp(-alpha(1)*t).*cos(alpha(2)*t);
% The nonzero partial derivatives of Phi with respect to alpha are
% d Phi_1 / d alpha_2 ,
% d Phi_1 / d alpha_3 ,
% d Phi_2 / d alpha_1 ,
% d Phi_2 / d alpha_2 ,
% and this determines Ind.
% The ordering of the columns of Ind is arbitrary but must match dPhi.
Ind = [1 1 2 2
2 3 1 2];
% Evaluate the four nonzero partial derivatives of Phi at each of
% the data points and store them in dPhi.
dPhi(:,1) = -t .* Phi(:,1);
dPhi(:,2) = -t .* exp(-alpha(2)*t).*sin(alpha(3)*t);
dPhi(:,3) = -t .* Phi(:,2);
dPhi(:,4) = -t .* exp(-alpha(1)*t).*sin(alpha(2)*t);