* Bug #8190 fixed - Optimization: Fixed ICSE demos
[scilab.git] / scilab / modules / optimization / demos / icse / icsua.sci
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 // Copyright (C) 2010 - DIGITEO - Yann COLLETTE
5 //
6 // This file is distributed under the same license as the Scilab package.
7 //
8
9 function [co,u,g,itv,dtv,cof]=icsua(u,simu,nap,imp)
10     // Computation of the optimal control with weighting of the initial control
11     // and arithmetic weighting of the observations.
12     // A scaling brings all the components of the control to 1.
13     // The initially null componants stay null.
14     // Only works if the lower bound is positive.
15     // Weighting formula :
16     // cof(i,j)=nex / (abs(ob(1,j,i)) + ... + abs(ob(nex,j,i)) )
17     // Syntax
18     // [co,u,g,itv,dtv,cof]=icsua(u,simu,nap,imp)
19
20     // input variables :
21     // u(nu)     : initial parameters
22     // nap       : maximum number of call to the simulator
23     // imp       : debug value during optimization
24     // output variables :
25     // co            : final cost
26     // u(nu)         : final parameters
27     // g(nu)         : finale gradient
28     // itv(nitv)     : work area (fortran integers)
29     // dtv(ndtv)     : work area (fortran double precision)
30     // cof(nob,ntob) : weighting coefficient of the cost
31     // Use the macros icot and icob to extract the state
32
33     df0 = 1;
34     if min(binf) <=0 then
35         error("call to icsua with binf not strictly positive");
36     end
37     for i=1:nu
38         u(1,i)=max( [binf(1,i),min([u(1,i),bsup(1,i)])] )
39     end
40     ech  = u;
41     binf = binf./u;
42     bsup = bsup./u;
43     u    = ones(1,nu);
44     ico  = 1;
45     yob  = 0.d0*ones(nob,ntob);
46     ob   = don;
47     [cof] = call("icscof",ico,1,"i",ntob,2,"i",nex,3,"i",...
48     nob,4,"i",yob,5,"d",ob,6,"d","sort",[1,nob*ntob],7,"d");
49     [co,u,g,itv,dtv] = icsegen(u,simu,nap,imp);
50     u = ech.*u;
51 endfunction