2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 // Copyright (C) 2010 - DIGITEO
6 // This file is distributed under the same license as the Scilab package.
9 // navet.bas : demo de icse
10 // calcul trajectoire optimale de rentree d'une navette spatiale
11 // *************************************************************
13 libn = ilib_for_link("icsenb","icsenb.o",[],"f")
14 nlink = link("./"+libn,["icsenb","icsenf"],"f")
16 exec("icse.contexte");
18 t0 = 0.d0; // instant initial
19 tf = 1.d0; // instant final
21 ermx = 1.d-6; // test d'arret absolu sur la valeur du second membre dans
22 // la resolution de l'etat
23 iu = [0,0,1]; // iu :indications sur la structure du controle
24 // iu(1)=1 si l'etat initial depend du controle constant,0 sinon
25 // iu(2)=1 si l'etat initial depend du controle variable,0 sinon
26 // iu(3)=1 si le second membre depend du controle constant,0 sinon
27 nuc = 1; // nombre de parametres independants du temps
28 nuv = 1; // nombre de parametres dependants du temps
29 ilin = 0; // indicateur de linearite :
30 // 0 pour un systeme non affine
31 // 1 pour un systeme affine dont la partie lineaire n'est pas autonome
32 // ilin=2 pour un systeme affine dont la partie lineaire est autonome
33 nti = 150; //nombre de pas de temps correspondant a dti (premier pas de temps)
35 ntf = 00; // nombre de pas de temps correspondant a dtf (second pas de temps)
36 // si l'on utilise un seul pas de temps,on doit prendre ntf=0
37 ny = 4; // dimension de l'etat a un instant donne
38 nea = 0; // nombre d'equations algebriques (eventuellement nul)
39 itmx = 10; // nombre maximal d'iterations dans la resolution de
40 // l'equation d'etat discrete a un pas de temps donne
41 nex = 1; // nombre d'experiences effectuees
42 nob = 3; // dimension du vecteur des mesures pour une experience donnee
43 // en un instant donne
44 ntob = 1; // nombre d'instants de mesure pour une experience donnee
45 ntobi = 1; // nombre d'instants de mesure correspondant a dti (premier
48 nu=nuc+nuv*(nti+ntf+1); // dimension du vecteur des parametres de controle
50 // uc(1,nuc) :controle constant
54 // uv(1,nuv*(nti+ntf)):controle variable
55 //if nuv>0 then uv(1,nuv*(nti+ntf+1))=0; end;
56 alpha0 = .20704/.029244; legu = "alpha initial : ann. cz"; // annulation cz
57 alpha0 = 17.391; legu = "alpha initial : finesse max"; // finesse maximum
58 legu = " navette americaine ."+legu;
59 if nuv>0 then uv=alpha0*ones(1,nuv*(nti+ntf+1)); end;
61 // itu(1,nitu) :tableau de travail entier reserve a
65 // dtu(1,ndtu) :tableau de travail double precision reserve
69 //dtu=[ 249.9, ..//s 1
71 // -.0061592, ..//cx1 3
72 // .621408e-3, ..//cx2 4
73 // -.207040, ..//cz0 5
76 // 3.9860119e14, ..//zmu 8
81 // echtf, ..//echtf 13
82 // 0,0,0,0,0,0,0, ..// inutilises 14 a 20
83 // 1000, ..//mise a echelle v 21
84 // 1, ..//mise a echelle gam 22
85 // 1.e5, ..//mise a echelle z 23
86 // 1, ..//mise a echelle l 24
87 // 1.e6 ]; //cpenal 25
109 y0=[7803, -1*raddeg, 121920, 0]; // etat initial
110 // (valeur arbitraire si iu(1) ou iu(2) est non nul)
112 y0=y0./dtu(1,21:24); // mise a l'echelle de y0
114 // tob(1,ntob) :instants de mesure (compatibilite avec ntob
117 binf = -20*ones(1,nu); // borne inf des parametres
118 binf(1,1) = 2500/echtf;
119 bsup = 40*ones(1,nu); // borne sup des parametres
120 bsup(1,1) = 4000/echtf;
122 obs(nob,ny) = 0; // matrice d'observation
124 //don=[762, ..//vfin 1
125 // -5*raddeg, ..//gamma final 2
126 // 24384 ]; ..//zfin 3
130 don = don./dtu(1,21:23); // mise a l'echelle
131 nomf = "icsenf"; // noms de subroutines de dynamique
132 legfb = " croissant ";
134 // changements pour calculer en temps retrograde
137 legfb = " retrograde ";
144 nap = 20; // nombre d'appels du simulateur
145 imp = 2; // niveau de debug pour optim
146 large = 100; // taille de nu au dela de laquelle on choisit un optimiseur
148 // pour les problemes de grande taille (alg='gc' dans l'appel de optim)
150 exec("icseinit.sce");
152 [co,u,g,itv,dtv]=icse(u,nomf,nap,imp);