summaryrefslogtreecommitdiff
path: root/modules/optimization/demos/icse/seros.sce
blob: 3a53973b2b562f325dfa33b3512d0d788de625f8 (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
93
94
//
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) ????-2008 - INRIA
// Copyright (C) 2010 - DIGITEO - Yann COLLETTE
//
// This file is distributed under the same license as the Scilab package.
//

//                sero.bas : demo de icse
//  calcul coefficients optimaux du modele simplifie 5ht-plaquette
//  **************************************************************

libn  = ilib_for_link("icsest","icsest.f",[],"f");
nlink = link("./"+libn,"icsest","f");

// contexte : tue les variables de nom reserve
exec("icse.contexte");

t0   = 0.d0;  // instant initial
tf   = 18.d1; // instant final
dti  = 1;     // premier pas de temps
dtf  = 2;     // second pas de temps
ermx = 1.d-9; // 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  = 7;     // nombre de parametres independants du temps
nuv  = 0;     // 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 = 80;     // nombre de pas de temps correspondant a dti (premier pas de temps)
ntf = 50;     // 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 = 8;      // nombre d'experiences effectuees
nob = 2;      // dimension du vecteur des mesures pour une experience donnee
// en un instant donne
ntob  = 9;    // nombre d'instants de mesure pour une experience donnee
ntobi = 6;    // nombre d'instants de mesure correspondant a dti (premier
// pas de temps)

// ne pas modifier l'instruction suivante
nu = nuc+nuv*(nti+ntf+1); // dimension du vecteur des parametres de controle

//  uc(1,nuc)          :controle constant
ucref = [2.d-4,1.d-3,1.d-2,5.d-3,2.d-2,1.5d-1,3.d-2];
uc    = .1*ucref;

//  uv(1,nuv*(nti+ntf)):controle variable
//if nuv>0, uv(1,nuv*(nti+ntf))=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.d0];

//  y0(ny)              :etat initial
//  (inutile si iu(1) ou iu(2) est non nul)
y0 = [4.d1,0.d0,0.d0,0.d0];

//  tob(1,ntob)        :instants de mesure (compatibilite avec ntob
//                      et ntobi)
tob  = [1.d1,2.d1,3.d1,4.d1,6.d1,8.d1,1.1d2,1.6d2,1.8d2];
binf = 1.d-17*ones(1,nu); // borne inf des parametres
bsup = 1.d1*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(ny,ny)      = 0; // derivee de la dynamique par rapport a l'etat
// fu(ny,nuc+nuv) = 0; // derivee de la dynamique par rapport au controle
obs = [0,1,1,1;0,1,0,1]; // matrice d'observation obs(nob,ny)

//  don(nex*ntob*nob)  :mesures prealablement entrees dans le fichier
//                      sero.mes.Il s'agit de donnees simulees avec
//                      uc=[2.d-4,1.d-3,1.d-2,1.d-7,1.d-6,1.d-9,1.d-7]
don = read("sero.mes",1,nex*ntob*nob,"(5d15.7)");

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("icseinit.sce");

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