Index: mttroot/mtt/lib/control/PPP/ppp_optimise.m ================================================================== --- mttroot/mtt/lib/control/PPP/ppp_optimise.m +++ mttroot/mtt/lib/control/PPP/ppp_optimise.m @@ -27,10 +27,13 @@ ############################################################### ## Version control history ############################################################### ## $Id$ ## $Log$ + ## Revision 1.10 2002/05/13 16:01:09 gawthrop + ## Addes Q weighting matrix + ## ## Revision 1.9 2002/05/08 10:14:21 gawthrop ## Idetification now OK (Moved data range in ppp_optimise by one sample interval) ## ## Revision 1.8 2002/04/23 17:50:39 gawthrop ## error --> err to avoid name clash with built in function @@ -124,20 +127,25 @@ if (N_y!=n_y) mess = sprintf("n_y (%i) in data not same as n_y (%i) in model", n_y,N_y); error(mess); endif + + if ( (N_data-n_data)<1 ) + error(sprintf("y_0 (%i) must be shorter than y (%i)", n_data, N_data)); + endif ## Use the last part of the simulation to compare with data + ## And shift back by one data point y = y(N_data-n_data:N_data-1,:); y_par = y_par(N_data-n_data:N_data-1,:); ##Evaluate error, cost derivative J and cost second derivative JJ err = 0; J = zeros(n_th,1); JJ = zeros(n_th,n_th); - + for i = 1:n_y E = y(:,i) - y_0(:,i); # Error in ith output err = err + Q(i)*(E'*E); # Sum the squared error over outputs y_par_i = y_par(:,i:n_y:n_y*n_th); # sensitivity function (ith output) J = J + Q(i)*y_par_i'*E; # Jacobian