function sDriveCart_identify ()
## usage: sDriveCart_identify ()
##
##
## Identify the Drive/cart friction
## $Id$
system_name = "sDriveCart"; # Name of this system
input_name = sprintf("%s_input.dat", system_name);
## disp("Create programs");
## system(sprintf("mtt -q -c -s -stdin %s ode2odes out", system_name)); # Create sim. code
## system(sprintf("mtt -q -c -s -stdin %s numpar m", system_name)); # Create sim. code
## system(sprintf("mtt -q -c -s -stdin %s def m", system_name)); # Create sim. code
## Optimisation parameters
crite = 1e-5; # Convergence criterion
alpha = 0.5; # Step reduction factor
max = 30; # Maximum iterations
View = 1 # View the optimisation process
## Parameters
global mtt_n_parameters
mtt_n_parameters = 0;
eval(sprintf("%s_numpar;", system_name));
alpha = 0.75;
criterion = 1e-9;
max_iterations = 20;
## Real data
disp("Loading data");
load -force data_020999.dat;
[N_data,M_data] = size(data_020999);
M = 10;
t = data_020999(1:M:N_data,1);
u = data_020999(1:M:N_data,2);
y = data_020999(1:M:N_data,3)/100; # convert from cm to m
gset grid
gset title ""
gset xlabel "Time (sec)"
tu = [t u];
ty = [t y];
gplot tu title "input (V)", ty title "output (m)"
psfig("sDriveCart_yu");
y_s = [u y]; # u is first o/p of system.
## Start time at zero
t = t-t(1)*ones(size(t));
T_last = 40;
DT = t(2)-t(1);
tu = [t u u u u]; # Put same signal on all inputs (only
# first used
save -ascii junk.dat tu
## zap the octave comments
system(sprintf("grep -v \'#\' junk.dat > %s; rm -f junk.dat", input_name));
## Set up theta
control = [1 0 0 0]; # Initial control parameters
unused = 0; # Unused parameter slot
r_c = 0;
parameters = [r_c m_c unused unused unused];
i_r = 4+1;
i_m = 4+2;
state = [0 unused unused 0 0];
i_v = 4+5+4;
i_x = 4+5+5;
i_i = 4+5+1;
theta_0 = [control parameters state]';
## Weighting function - select output, not input
weight = ones(size(t))*[0 1];
## Estimate r only
free = [i_r i_i i_v i_x];
disp("Estimate cart friction ...");
[theta,Theta,Error,Y] = mtt_optimise(system_name,y_s,theta_0,"time",\
free,weight,crite,max,alpha,View);
## Plot results
# ix = [its Theta(i_x,:)'];
# iv = [its Theta(i_v,:)'];
# ii = [its Theta(i_i,:)'];
# gplot \
# ix with linespoints title "x_0",\
# iv with linespoints title "p_0",\
# ii with linespoints title "i_0"
# psfig("sDriveCart_ident_x");
[N_th,M_th] = size(Theta);
its = [0:M_th-1]';
gset grid
gset title ""
gset xlabel "Iterations"
ir = [its Theta(i_r,:)'];
gplot ir with linespoints title "r"
psfig("sDriveCart_ident_r");
r_c = theta(i_r)
endfunction