summaryrefslogtreecommitdiff
path: root/modules/optimization/demos/icse/lqv.sce
blob: 3e03c5c59d1877cdb25d79126de6dc59c8dd2ee0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) ????-2008 - INRIA
// Copyright (C) 2010 - DIGITEO - Yann COLLETTE
// Copyright (C) 2010 - DIGITEO - Allan CORNET
//
// This file is distributed under the same license as the Scilab package.
//

//                     lqv.bas : demo of icse
//  *************************************************************
//

exec("SCI/modules/optimization/demos/icse/icse.contexte");  // context

t0   = 0;     // instant initial
tf   = 20;    // instant final
dti  = 1;     // premier pas de temps
dtf  = 1;     // second pas de temps
ermx = 1.d-6; // test d'arret absolu sur la valeur du second membre dans
// la resolution de l'etat
iu = [0,0,1]; //  iu   :indications sur la structure du controle
//    iu(1)=1 si l'etat initial depend du controle constant,0 sinon
//    iu(2)=1 si l'etat initial depend du controle variable,0 sinon
//    iu(3)=1 si le second membre depend du controle constant,0 sinon
nuc  = 5;     // nombre de parametres independants du temps
nuv  = 1;     // nombre de parametres dependants du temps
ilin = 2;     // indicateur de linearite :
// 0 pour un systeme non affine
// 1 pour un systeme affine dont la partie lineaire n'est pas autonome
// ilin=2 pour un systeme affine dont la partie lineaire est autonome
nti = 10;     // nombre de pas de temps correspondant a dti (premier pas de temps)
ntf = 10;     // nombre de pas de temps correspondant a dtf (second pas de temps)
// si l'on utilise un seul pas de temps,on doit prendre ntf=0
ny   = 4;     // dimension de l'etat a un instant donne
nea  = 0;     // nombre d'equations algebriques (eventuellement nul)
itmx = 10;    // nombre maximal d'iterations dans la resolution de
// l'equation d'etat discrete a un pas de temps donne
nex = 1;      // nombre d'experiences effectuees
nob = 2;      // dimension du vecteur des mesures pour une experience donnee
// en un instant donne
ntob  = 10;   // nombre d'instants de mesure pour une experience donnee
ntobi = 5;    // nombre d'instants de mesure correspondant a dti (premier
// pas de temps)

nu = nuc + nuv * (nti + ntf + 1); // dimension du vecteur des parametres de controle

//  uc(1,nuc)          :controle constant
uc = 0*ones(1,nuc);

//  uv(1,nuv*(nti+ntf+1)):controle variable
if nuv>0 then uv(1,nuv*(nti+ntf+1))=0; end;

//  itu(1,nitu)        :tableau de travail entier reserve a
//                      l'utilisateur
itu = [0];

//  dtu(1,ndtu)        :tableau de travail double precision reserve
//                      a l'utilisateur
dtu = [0];

//  y0(ny)             :etat initial
//          (valeur arbitraire si iu(1) ou iu(2) est non nul)
y0 = ones(1,ny);

//  tob(1,ntob)        :instants de mesure (compatibilite avec ntob
//                      et ntobi)
tob  = 2*(1:10);
binf = -10*ones(1,nu); // borne inf des parametres
bsup =     ones(1,nu); // borne sup des parametres

//  termes utiles pour une dynamique lineaire ou une observation quadratique
b(1,ny) = 0;                    // terme constant d'une dynamique lineaire
fy      = 0.1*ones(ny,ny);      // derivee de la dynamique par rapport a l'etat
fu       =    ones(ny,nuc+nuv); // derivee de la dynamique par rapport au controle

obs(nob,ny) = 0; // matrice d'observation
obs         = ones(nob,ny);

don=0*ones(1,nex*ntob*nob);

nap   = 20;  // nombre d'appels du simulateur
imp   = 2;   // niveau de debug pour optim
large = 100; // taille de nu au dela de laquelle on choisit un optimiseur
// pour les problemes de grande taille (alg='gc' dans l'appel de optim)

exec("SCI/modules/optimization/demos/icse/icse.contexte");  // context

[co,u,g,itv,dtv] = icse(u,"icsemc",nap,imp);

endfunction