A quoi ça sert ? Et bien boucle permet de tracer des trajectoires pour un système non linéaire bouclé. Il trace alors la trajectoire du système, la trajectoire des observations, l’écart entre ces 2 trajectoires, et la commande. Et on peut même rajouter du bruit. Le TD concernant le modèle (biologique) de compétition utilise cette macro et permet de mieux se rendre compte de ce que fait cette macro.
boucle prend comme arguments uniquement la fonction fct, et éventuellement la variance du bruit que l’on souhaite ajouter. Mais en fait, boucle fait appel à un grand nombre de variables globales, qui sont : le point d’équilibre xe, la commande ue, les matrices du système linéarisé autour du point d’équilibre f, g (la matrice de commande) et h (la matrice des mesures), et les matrices de gain de commande k et d’observation l. On retrouve les mêmes variables globales que pour obscont1.
Cette macro renvoie la dimension et les vecteurs de base du sous-espace controlable de la paire (A,B) grâce à l’appel [n,base]=contr(A,B).
Rappelons que si on note V=U(:,1:n), alors V’*A*V et V’*B donnent la partie controlable de la paire (A,B).
Cette macro renvoie une fonction corrrespondant à une version bouclée du système qu’on lui donne en unique argument. Mais l’unicité de l’argument cache le fait que obscont1 fait appel à un grand nombre de variables globales, qui sont : le point d’équilibre xe, la commande ue, les matrices du système linéarisé autour du point d’équilibre f, g (la matrice de commande) et h (la matrice des mesures), et les matrices de gain de commande k et d’observation l.
L’appel se fait par [fctboucle]=obscont1(fct).
Cette macro permet de placer les pôles, c’est-à-dire qu’à partir des arguments f, g et pole, elle renvoie la matrice k telle que f-g*k ait pole pour spectre. Ce qui permet donc de trouver la matrice de gain de commande à partir des pôles désirés.
L’appel est donc : k=ppol(f,g,pole).
Notons que pour placer les pôles d’un observateur, il faut utiliser la transposition. En effet, on a tout simplement l=ppol(f’,h’,pole)’, en notant ’ la transposition et h la matrice des mesures.
On a vu qu’avec un système dynamique linéaire, le point origine 0 peut ne pas être
asymptotiquement stable. Nous allons essayer de le rendre asymptotiquement stable à
l’aide d’une commande en feedback u = −K ∗ X qui ramènera le système vers le point
origine.
On utilise donc le système dynamique
| (1) |
Les paramètres de ce système ont sous Scilab les noms A_lincom, B_lincom et K_lincom.
Nous allons utiliser la macro lincom. Comme précédemment, son chargement en mémoire se
fait à l’aide de la fonction linsys(), et l’initialisation des paramètres se fait grâce à
lin_init().
Nous avons vu dans la partie “Systèmes Dynamiques” un modèle de compétition. Nous allons à présent compléter la simulation en bouclant ce système.
On modélise la dynamique de deux populations vivant sur une même ressource par un système d’équations :
| (2) |
où 1/u est le niveau de ressources et r,s,k,l,a,b des paramètres que l’on peut faire varier (attention
: ces paramètres sont notés r_compet, s_compet, etc... sous Scilab. Seule u possède le même
nom u).