feat (report): Progress on report.
This commit is contained in:
parent
36806f9af5
commit
5d40900390
7 changed files with 3019 additions and 189 deletions
228
doc/remarques.typ
Normal file
228
doc/remarques.typ
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
La phrase "it is less computationally intensive... the compiler". est mal dite;
|
||||
tu peux dire que c'est la methode classique, par exemple, implementee pour
|
||||
simulink et aussi Zelus.
|
||||
|
||||
Rmq:
|
||||
|
||||
- Les methodes numeriques (centralisees) les premieres ont ete faites
|
||||
pour resoudre un probleme initial. dx/dt = f (x(t)) t et x(0) = x0 ou x est un
|
||||
vecteur.
|
||||
|
||||
- La "simulation distribuee" (cad faisant intervenir plusieurs solveurs)
|
||||
existe aussi mais pose d'autres problemes: efficacite, convergence. Elle est
|
||||
plus difficile a implementer.
|
||||
|
||||
- Sundials CVODE a une methode centralisee mais avec une implementation de
|
||||
manipulation des vecteurs qui peut etre parallele, cad que tous les calculs de
|
||||
vecteur/matrice peuvent se faire en parallele. On ne l'utilise pas dans Zelus.
|
||||
|
||||
p2.
|
||||
"we cannot necessarily use "pre"...": a mon avis, le lecteur ne peut pas
|
||||
comprendre ce que tu ecris ici. A mon avis, tu peux dire ce qui marche (si je ne
|
||||
me trompe pas, pouvoir internaliser le solveur au modele et donc le composer
|
||||
avec un observateur qui contient son propre solveur) et ce qui est a faire (si
|
||||
je comprends, pouvoir ecrire directement assert dans le code et la compilation
|
||||
pour pouvoir co-simuler le modele et ses differents observateurs/assertions.
|
||||
Pour le "pre", c'est un point que tu peux mentionner plus loin dans le rapport
|
||||
lorsque le lecteur a plus de contexte et de matiere sur ce que tu as fait.
|
||||
|
||||
Il n'y a pas de numero en bas des pages dans ton texte. Il en faut. Impossible
|
||||
de savoir ou on est sinon.
|
||||
|
||||
section 2. Tu parles de streams (Nat -> V) alors que tu donnes une semantique
|
||||
avec des etats. C'est bizarre. Tu ecris pre(s) alors que l'on ne sait pas ce que
|
||||
c'est. le
|
||||
|
||||
```ocaml
|
||||
let rec (o, s) = M.f_step(i, M.s0 -> pre(s))
|
||||
```
|
||||
|
||||
n'est pas du caml valide.
|
||||
|
||||
Que veux-tu dire ? Quel est le type de Simulate(M) ? Je pensais (cf. page
|
||||
d'apres) que tu voudrais ecrire:
|
||||
|
||||
```ocaml
|
||||
simulate(M): list(I) -> list(O)
|
||||
```
|
||||
|
||||
Le listing 1 ne correspond pas a la page precedente (ou l'inverse). Pourquoi ?
|
||||
|
||||
Page d'apres (5 ?).
|
||||
|
||||
Je ne suis pas fan de l'exemple sincos_discrete() tel que tu l'as ecrit car il
|
||||
diverge. Il laisse soupconner que l'on ne peut pas ecrire de schemas numeriques
|
||||
avec des streams. C'est faux, en general.
|
||||
|
||||
En somme, le code listing 2 est un mauvais programme. Il y a une raison
|
||||
mathematique liee a l'analyse des poles; je te montrerai a mon retour. Si tu
|
||||
veux garder cet exemple de sin/cos, il faut mettre deux integrateurs differents,
|
||||
un forward et un backward.
|
||||
|
||||
Ou alors, il faut faire un discours (plus long) pour expliquer pourquoi c'est
|
||||
mieux d'ecrire la forme a temps continu, que justement, elle permet de ne pas se
|
||||
casser la tete pour savoir ou et quand mettre un pre. Mais c'est un peu
|
||||
orthogonal a ce que tu veux raconter.
|
||||
|
||||
Discrete models -> Discrete-time models.
|
||||
Continuous models -> Continuous-time models.
|
||||
|
||||
Tu pourras ensuite dire que tu confonds les deux.
|
||||
|
||||
2.2 la raison de la divergence n'est pas la. Si tu prends un schema backward +
|
||||
forward, ca ne diverge pas. Par contre, si tu prends Van der Pol en discret, pas
|
||||
fixe, avec un pas trop petit ou trop petit, tu tombes sur nan. Regarde. J'avais
|
||||
fait l'exemple (regarde sur le depot; ou refais le).
|
||||
|
||||
Rmq: sin/cos n'est pas un super exemple pour justifier l'interet de Zelus (ou du
|
||||
temps continu en general) car ce systeme est lineaire. Un schema numerique pas
|
||||
fixe (donc programmable directement en synchrone) marche bien. C'est plutot
|
||||
quand la dynamique est compliquee, non lineaire, qu'il te faut un schema
|
||||
numerique plus elabore et que l'expression directe d'un modele a temps continu
|
||||
se justifie. La modelisation d'evenement en etat (zero-crossing) le justifie
|
||||
aussi. Le cas classique, c'est le modele bang-bang. Tu veux detecter les
|
||||
instants ou la temperature passe un seuil. Avec un modele de temps pas fixe, tu
|
||||
ne peux pas.
|
||||
|
||||
avant de donner CNode(...), dit ce qu'est le probleme.
|
||||
Qu'est ce qu'un modele M ?
|
||||
|
||||
```ocaml
|
||||
model (i) = o where
|
||||
der s = f_der i s
|
||||
der o = f_out i s
|
||||
```
|
||||
|
||||
2.3. Tu n'as pas dit/defini ce qu'etait un "initial value problem". Le faire
|
||||
(sinon, on ne comprends pas).
|
||||
|
||||
"the integr node from Listing 2 is another example of a numerical solver
|
||||
(albeit not a very good one)"
|
||||
|
||||
A mon avis, inutile. Que veux-tu dire que tu n'as pas deja dit (on peut calculer
|
||||
une approximation de `(der(x)/dt)(t)` a des instants `n * h` (`n in Nat`) par
|
||||
`(x - pre(x))/h`?
|
||||
|
||||
|
||||
"Of particular interest is the fact that numerical ODE solvers compute
|
||||
approximations sequentially. "
|
||||
|
||||
Ca depend. Les solveurs a memoire (dits "multi-pas"). Les solveurs sans memoire
|
||||
tels que RK, non. A mon avis, tu peux commencer par exempliquer ce que calcule
|
||||
un solveur: etant donne le IVP, l'objectif est de calculer une solution
|
||||
[0, tmax] -> V. En pratique, il ne calcule pas toute la solution. Il calcule une
|
||||
suite de solution pour [0, h0][h0, h1][h1, h2], etc. Relis l'article de
|
||||
Chapoutot et al., de memoire, c'est tres bien explique. Sinon, il y a les livres
|
||||
jaunes dans l'etagere de mon bureau.
|
||||
|
||||
"This sequential process gives way to a synchronous interpretation of an ODE
|
||||
solver as a discrete node."
|
||||
|
||||
Qu'est-ce qu'un "discrete node" ?
|
||||
|
||||
IVP(Y, Y'). Aurait du arriver bien plus tot.
|
||||
|
||||
dy /dt (t) = f t (y(t))
|
||||
y(0) = y0
|
||||
|
||||
donner l'horizon de temps (par defaut, +infty ?).
|
||||
|
||||
Je prendrais une autre lettre que "s". (on note s pour "state" en general). "o",
|
||||
pour "output" ?
|
||||
|
||||
La notation pointee est un peu troublante (en math, on la confond avec la
|
||||
multiplication. Utiliser une police ad-hoc pour h et u de sorte que s_0.u ne
|
||||
soit pas ambigu.
|
||||
|
||||
mets des numeros de ligne dans ton texte stp. Il y a un style latex pour ca. Ou
|
||||
au moins des no. de page.
|
||||
|
||||
"The ODE solver does not itself introduce discontinuities; the only
|
||||
discontinuities in the system are those introduced by the input signal."
|
||||
|
||||
Avant de dire cela, tu ne parles par d'entrees. Pour le moment, ton systeme
|
||||
n'est pas "hybride". C'est une ODE. Tu ne donnes pas d'hypotheses sur f. En
|
||||
faut-il ? Lesquelles ?
|
||||
|
||||
"The simulation of a continuous-time system with an ODE solver is now itself a
|
||||
synchronous node:"
|
||||
|
||||
c'est un point de vue. Puisque la simulation d'un modele a temps continu calcule
|
||||
une suite de solutions approchees, ne pourrait-on pas la voir elle meme comme
|
||||
une machine synchrone qui...
|
||||
|
||||
page suivante.
|
||||
|
||||
Plutot que Signal(V), j'utiliserais un autre nom. Tu as deja un langage qui
|
||||
manipule des signaux, non ?
|
||||
|
||||
Superdense(V) ? En reference aux travaux de Pnueli et al. Puis Edward Lee et al.
|
||||
Puis Caspi et al.
|
||||
|
||||
Superdence(V) = R+ -> Nat -> V avec, a cote, une fonction qui pour chaque t in
|
||||
R+, donne le nombre de sauts (relire les articles; j'ai oublie le nom de cette
|
||||
fonction). step(t) in Nat.
|
||||
|
||||
est-ce tres different de
|
||||
|
||||
Nat -> R+ -> V avec a cote, une fonction qui indique le temps qui s'ecoule pour
|
||||
chaque n in Nat ?
|
||||
|
||||
Dans un des articles de Edward Lee, il explique le type des signaux pour le
|
||||
temps continu. Regarde son livre (vert) sur mon etagere.
|
||||
|
||||
Le texte de cette page (8 ?) est un peu confus.
|
||||
|
||||
est-ce que les bouts de fonctions sont collees les uns aux autres ?
|
||||
|
||||
none a le sens de "not yet" ? Comment recolles-tu les morceaux ?
|
||||
|
||||
(h0, u0) (h1, u1) ... (hn, un)
|
||||
|
||||
est-ce equivalent a :
|
||||
|
||||
(h0, u0) none (h1, u1) none none (hn, un) ?
|
||||
|
||||
A ce stade, tu n'as pas dit ce qu'etait $italic("CNode")(I, O, S_M, S'_M)$. A
|
||||
quoi ca ressemble ?
|
||||
|
||||
Les elements du listing 4 doivent etre donnes dans le texte en maths. Le code
|
||||
caml doit etre mis aussi dans le listing 4. Je comprends bien mieux le code que
|
||||
les explications ! Sois plus precis dans le texte, ca aidera a comprendre.
|
||||
|
||||
utiliser hmax plutot que h pour ivp. Eviter les surcharges de noms autant que
|
||||
possible.
|
||||
|
||||
Plutot que "discrete node", utiliser "synchronous machine" ? Le terme "machine"
|
||||
est un terme technique des annees 60/70. Cf. articles historiques sur les
|
||||
automates et les "sequential machines". Tu peux dire, qui se caraterise par un
|
||||
etat initial, une fonction step lisant une entree et produisant une sortie,
|
||||
(plus une fonction reset) si tu veux.
|
||||
|
||||
"Since time is logical in discrete nodes". Un peu trop pedant (et obscur) a mon
|
||||
avis. On manipule des suites de valeurs; il n'y a donc pas de temps reel ou
|
||||
physique. Le temps est juste la succession des valeurs.
|
||||
|
||||
Le paragraphe "The question of discrete events..." est un peu confus. Donne un
|
||||
exemple. E.g., un timer: un controleur ouvre un robinet pendant 4s; une lumiere
|
||||
doit clignoter en alternant allume/eteint 1s/2s. ce sont des cas ou il y a des
|
||||
evenements en temps, cad en reference a la variable t (der t = 1 init 0).
|
||||
D'autres evenements ne sont pas des evenements en temps. E.g., une roue qui
|
||||
tourne (e.g. volant moteur). Compter le nombre de tours de roue par seconde avec
|
||||
un capteur. Le schema general est dit de "Zero-crossing". Etc. La balle qui
|
||||
rebondit, etc. Tu en trouveras d'autres !
|
||||
|
||||
|
||||
La suite est pas mal. Il faut expliquer (et possiblement donner le code, au
|
||||
moins en annexe) pour 2.5, 2.6, 2.7.
|
||||
|
||||
Ca prend forme. Tu peux donner l'intuition de la compilation. Dans le source, on
|
||||
melange les der, present, up, etc. et le compilo., apres une analyse statique
|
||||
(qui va verifier des proprietes et donc rejeter certains programmes), va
|
||||
produire les differentes fonctions necessaires a la simulation qui alterne des
|
||||
phases d'integration (le temps ronronne) et des pas discrets (reactions
|
||||
instantanees).
|
||||
|
||||
Super. Continue ! --Marc
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue