File: navet.sce

package info (click to toggle)
scilab 2.4-1
  • links: PTS
  • area: non-free
  • in suites: potato, slink
  • size: 55,196 kB
  • ctags: 38,019
  • sloc: ansic: 231,970; fortran: 148,976; tcl: 7,099; makefile: 4,585; sh: 2,978; csh: 154; cpp: 101; asm: 39; sed: 5
file content (135 lines) | stat: -rw-r--r-- 5,106 bytes parent folder | download | duplicates (3)
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//                navet.bas : demo de icse
//  calcul trajectoire optimale de rentree d'une navette spatiale
//  *************************************************************
//
// Copyright INRIA
exec('icse.contexte');
// les doubles slash introduisent des commentaires
//
t0=0.d0;    // instant initial
tf=1.d0;    // instant final
dtf=0;
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=1;      // nombre de parametres independants du temps
nuv=1;      // nombre de parametres dependants du temps
ilin=0;     // 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=150;    //nombre de pas de temps correspondant a dti (premier pas de temps)
dti=tf/nti;
ntf=00;     // 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=3;      // dimension du vecteur des mesures pour une experience donnee
            // en un instant donne
ntob=1;     // nombre d'instants de mesure pour une experience donnee
ntobi=1;    // 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
echtf=2000;
uc=[2500/echtf];
//  uv(1,nuv*(nti+ntf)):controle variable
//if nuv>0, uv(1,nuv*(nti+ntf+1))=0; end;
 alpha0=.20704/.029244; legu='alpha initial : ann. cz';  //annulation cz
 alpha0=17.391;         legu='alpha initial : finesse max';//finesse maximum
legu=' navette americaine .'+legu;
if nuv>0, uv=alpha0*ones(1,nuv*(nti+ntf+1)); 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
raddeg=%pi/180;
//dtu=[ 249.9,         ..//s      1
//      .078540,       ..//cx0    2
//     -.0061592,      ..//cx1    3
//      .621408e-3,    ..//cx2    4
//     -.207040,       ..//cz0    5
//      .029244,       ..//cz1    6
//       83388,        ..//zm     7
//     3.9860119e14,   ..//zmu    8
//     6378166,        ..//rt     9
//     1.2,            ..//ro0   10
//     6700,           ..//h     11
//     raddeg,         ..//      12
//     echtf,          ..//echtf 13
//     0,0,0,0,0,0,0,  ..// inutilises    14 a 20
//     1000,           ..//mise a echelle v    21
//     1,              ..//mise a echelle gam  22
//     1.e5,           ..//mise a echelle z    23
//     1,           ..//mise a echelle l       24
//     1.e6      ];      //cpenal              25
dtu=[ 249.9,         ..
      .078540,       ..
     -.0061592,      ..
      .621408e-3,    ..
     -.207040,       ..
      .029244,       ..
       83388,        ..
     3.9860119e14,   ..
     6378166,        ..
     1.2,            ..
     6700,           ..
     raddeg,         ..
     echtf,          ..
     0,0,0,0,0,0,0,  ..
     1000,           ..
     1,              ..
     1.e5,           ..
     1,           ..
     1.e6      ];      //cpenal              25
//
y0=[7803, -1*raddeg, 121920, 0]; // etat initial
//          (valeur arbitraire si iu(1) ou iu(2) est non nul)
y0=y0./dtu(1,21:24);   //mise a l'echelle de y0
//  tob(1,ntob)        :instants de mesure (compatibilite avec ntob
//                      et ntobi)
tob=[1];
binf=-20*ones(1,nu);//  borne inf des parametres
binf(1,1)=2500/echtf;
bsup=40*ones(1,nu);// borne sup des parametres
bsup(1,1)=4000/echtf;
//
obs(nob,ny)=0; // matrice d'observation
//
//don=[762,            ..//vfin         1
//     -5*raddeg,      ..//gamma final  2
//     24384    ];     ..//zfin         3
don=[762,            ..
     -5*raddeg,      ..
     24384    ];
don=don./dtu(1,21:23);      // mise a l'echelle
nomf='icsenf';   // noms de subroutines de dynamique
legfb=' croissant ';
// changements pour calculer en temps retrograde
retro=1;
if retro>0;
legfb=' retrograde '; ..
  don1=don; ..
  don=y0(1,1:3); ..
  y0(1,1:3)=don1; ..
  nomf='icsenb' ; end ;
//
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,nomf,nap,imp);