* Bug #8190 fixed - Optimization: Fixed ICSE demos
[scilab.git] / scilab / modules / optimization / demos / icse / icsegen.sci
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 // Copyright (C) 2010 - DIGITEO
5 //
6 // This file is distributed under the same license as the Scilab package.
7 //
8
9 function [co,u,g,itv,dtv]=icsegen(u,simu,nap,imp,ech,cof)
10     // Computation of the optimal control with scaling of the control and
11     // weighting of the observations
12     // Syntax
13     // [co,u,g,itv,dtv]=icsegen(u,simu,nap,imp,ech,cof)
14     //
15     // input variables :
16     // u(nu)     : initial parameters
17     // simu      : string which contains the name of the sub program which
18     //             describes the problem (second member, criterion and initial state)
19     // nap       : maximum number of calls to the simulator
20     // imp       : debug value during optimization
21     // ech(1,nu) : scaling coeff of the control
22     // cof(1,ntob*nob) : weighting coeff of the observations
23     // output variables :
24     // co        : final cost
25     // u(nu)     : final parameters
26     // g(nu)     : final gradient
27     // itv(nitv) : work area (fortran integers)
28     // dtv(ndtv) : work area (fortran double precision)
29     // Use the icot and icob macro to extract the state
30
31     if nu<large then
32         alg="qn";
33     else
34         alg="gc";
35     end
36
37     nitv  = nitu+ny+ntob;
38
39     ldtvt = ny*(nob+nuc+nuv+nti+ntf+ny+3)+ntob*(nob*nex+nob+1)+2*nu+ndtu;
40     ndtv1 = ldtvt+ny*(ny+7);
41     nui   = iu(1)*nuc+iu(2)*nuv*(nti+ntf+1);
42     ndtv2 = ldtvt+ny*(2*ntob+nu+2*ny+nuc+nuv+4)+max(nuc+nuv,nui)+nob*ntob+nob;
43     ndtv  = max(ndtv1,ndtv2);
44
45     itv         = itu;
46     itv($:nitv) = 0;
47     dtv         = [dtu,y0,tob,matrix(obs,1,ny*nob),don,ech,cof,b,fy(1,:),fu(1,:)];
48     dtv($:ndtv) = 0;
49
50     [co,u,g,itv,dtv] = optim(simu,"b",binf,bsup, u, alg, df0, ...
51     "ar",nap, "ti",itv,"td",dtv,"si","sd");
52 endfunction