Overview
| Comment: | Trying to fix parameter identification problem ... |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | origin/master | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
93079fee467bc64a07a6821d4a389863 |
| User & Date: | gawthrop@users.sourceforge.net on 2002-05-07 16:28:26.000 |
| Other Links: | branch diff | manifest | tags |
Context
|
2002-05-07
| ||
| 23:50:34 |
Preliminary support for Matlab dynamically linked shared objects: invoke with: mtt -cc sys rep mexglx ode2odes support is not yet included. check-in: 2a56bcb441 user: geraint@users.sourceforge.net tags: origin/master, trunk | |
| 16:28:26 | Trying to fix parameter identification problem ... check-in: 93079fee46 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
| 13:48:43 |
Improved clarity of code generated for -cc and -oct (except ode2odes). Octave DEFUN_DLDs now call (rather than replace) their .cc equivalents. check-in: 06c3b3d188 user: geraint@users.sourceforge.net tags: origin/master, trunk | |
Changes
Modified mttroot/mtt/lib/control/PPP/ppp_nlin_run.m
from [313a218248]
to [3008238ce6].
| ︙ | ︙ | |||
31 32 33 34 35 36 37 |
global system_name_sim i_ppp_sim x_0_sim y_sim u_sim A_u_sim simpar_sim
## Defaults
if nargin<7
extras.alpha = 0.1;
extras.criterion = 1e-5;
extras.emulate_timing = 0;
| < > > > | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
global system_name_sim i_ppp_sim x_0_sim y_sim u_sim A_u_sim simpar_sim
## Defaults
if nargin<7
extras.alpha = 0.1;
extras.criterion = 1e-5;
extras.emulate_timing = 0;
extras.max_iterations = 10;
extras.simulate = 1;
extras.v = 1e-5;
extras.verbose = 0;
endif
##Estimate if we have some adjustable parameters
estimating_parameters = (length(i_par)>0)
## Names
s_system_name = sprintf("s%s", system_name);
## System details -- defines simulation within ol interval
par = eval(sprintf("%s_numpar;", system_name));
simpar = eval(sprintf("%s_simpar;", system_name));
|
| ︙ | ︙ | |||
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
x_0_model = x_0;
[n_x,n_y,n_u] = eval(sprintf("%s_def;", system_name));
## Sensitivity system details -- defines moving horizon simulation
simpars = eval(sprintf("%s_simpar;", s_system_name));
pars = eval(sprintf("%s_numpar;", s_system_name));
x_0s = eval(sprintf("%s_state(pars);", s_system_name));
## Times
## -- within opt horizon
n_Tau = round(simpars.last/simpars.dt);
dtau = simpars.dt;
Tau = [0:n_Tau-1]'*dtau;
[n_tau,n_w] = size(w_s);
| > | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
x_0_model = x_0;
[n_x,n_y,n_u] = eval(sprintf("%s_def;", system_name));
## Sensitivity system details -- defines moving horizon simulation
simpars = eval(sprintf("%s_simpar;", s_system_name));
pars = eval(sprintf("%s_numpar;", s_system_name));
x_0s = eval(sprintf("%s_state(pars);", s_system_name));
x_0_models = x_0s;
## Times
## -- within opt horizon
n_Tau = round(simpars.last/simpars.dt);
dtau = simpars.dt;
Tau = [0:n_Tau-1]'*dtau;
[n_tau,n_w] = size(w_s);
|
| ︙ | ︙ | |||
134 135 136 137 138 139 140 |
T_ol = n_ol*dt; # Length of ol interval
t_open = [t_open;T_ol];
## Generate input to actual system
u_star_t = ppp_ustar(A_u,1,t_ol',0,0,n_u-n_U);
## Tune parameters/states
| | | | > | | | | > | | 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
T_ol = n_ol*dt; # Length of ol interval
t_open = [t_open;T_ol];
## Generate input to actual system
u_star_t = ppp_ustar(A_u,1,t_ol',0,0,n_u-n_U);
## Tune parameters/states
if (estimating_parameters==1)
## Save up the estimated parameters
par_est = pars(i_par(:,1))
p = [p; par_est'];
## Set up according to interval length
if (T_ol>T_ol_0) ## Truncate data
simpar_est.last = T_ol_0;
y_est = y_ol(1:n_t+1,:);
else
simpar_est.last = T_ol;
y_est = y_ol;
endif
simpar_pred.last = T_ol_0; # Predicted length of next interval
pars(i_ppp(:,1)) = U_old; # Update the simulation ppp weights
## Optimise
tick = time;
[pars,Par,Error,Y,its] = \
ppp_optimise(s_system_name,x_0_models,pars,simpar_est,u_star_t,y_est,i_par,extras);
II = [1:length(y_est)]; plot(II,y_est,"*", II,Y)
est_time = time-tick;
t_est = [t_est;est_time];
its_est = [its_est; its-1];
endif
## Update internal model
par(i_ppp(:,3)) = U_old; # Update the internal model ppp weights
if (estimating_parameters==1)
par(i_par(:,3)) = pars(i_par(:,1)); # Update the internal model params
endif
simpar_model.last = T_ol;
[y_model,x_model] = eval(sprintf("%s_sim(x_0_model, par, simpar_model, \
u_star_t);",system_name));
x_0 = x_model(n_ol+1,:)'; # Initial state of next interval
x_0_model = x_0;
x_0_models(1:2:(2*n_x)-1) = x_0_model;
## Compute U by optimisation
tick = time;
## Predict state at start of next interval
par(i_ppp(:,3)) = U;
[y_next,x_next] = eval(sprintf("%s_sim(x_0, par, simpar, \
u_star_t);",system_name));
x_next = x_next(n_t+1,:)'; # Initial state for next time
x_nexts(1:2:(2*n_x)-1) = x_next; # And for internal sensitivity model
## Optimize for next interval
U_old = U; # Save previous value
U = expm(A_u*T_ol)*U; # Initialise from continuation trajectory
pars(i_ppp(:,1)) = U; # Put initial value of U into the parameter vector
[U, U_all, Error, Y, its] = ppp_nlin(system_name,x_nexts,pars,simpars,u_star_tau,w_s,i_ppp,extras);
|
| ︙ | ︙ |