Vous êtes sur la page 1sur 13

❖ BAYOUD KAOUTAR

❖ AIT AMGHAR EL MAHDI

GREY-BOX
ESTIMATION
➢ À propos des données d'entrée-sortie

1. On charge les données du moteur à courant continu :

load(fullfile(matlabroot, 'toolbox', 'ident', 'iddemos',


'data', 'dcmotordata'));

2. On représente les données d’estimation sous forme d’iddata-objet :

z = iddata(y, u, 0.1, 'Name', 'DC-motor');

3. On spécifie les noms des signaux d'entrée et de sortie, l'heure de début et les
unités de temps :

z.InputName = 'Voltage';
z.InputUnit = 'V';
z.OutputName = {'Angular position', 'Angular velocity'};
z.OutputUnit = {'rad', 'rad/s'};
z.Tstart = 0;
z.TimeUnit = 's';

4. On trace les données :


Les données sont affichées dans deux fenêtres de tracé.

figure('Name', [z.Name ': Voltage input -> Angular position


output']);
plot(z(:, 1, 1)); % Trace la première paire d'entrées-sorties
(Tension -> Position angulaire).
figure('Name', [z.Name ': Voltage input -> Angular velocity
output']);
plot(z(:, 2, 1)); % Trace la deuxième paire d'entrées-sorties
(Tension -> Vitesse angulaire).
.

Figure 2 : Données d'entrée-sortie d'un moteur à courant continu.


➢ Modélisation linéaire du moteur à courant continu

1. On représente la structure du moteur à courant continu dans une fonction :


La structure du fichier doit toujours être celle qui suit :

• Les arguments de sortie :

* dx le vecteur des dérivées d'état en temps continu et des valeurs de mise


à jour d'état en temps discret.

* L'équation de sortie est y.

• Arguments introductifs :

* Les trois premiers arguments d'entrée doivent être : t(temps), x(vecteur


d'état, [] pour les systèmes statiques) et u(vecteur d'entrée, [] pour les séries
chronologiques).

* La liste ordonnée des paramètres suit. Les paramètres peuvent être des
matrices bidimensionnelles, des vecteurs colonnes ou des scalaires.

* Pour les arguments d'entrée auxiliaires, varargin

2.On représente la dynamique du moteur à courant continu à l'aide d'un|idnlgrey|


objet :

Le modèle décrit comment les entrées génère les sorties à l'aide de la ou des équations
d'état.

Nom du fichier = 'dcmotor_m' ; % Fichier décrivant la structure


du modèle.
Ordre = [2 1 2] ; % de commandes de modèles [ny nu nx].
Paramètres = [1 ; 0,28] ; % Paramètres initiaux. Np = 2.
États initiaux = [0 ; 0] ; % États initiaux.
Ts = 0 ; % Système à temps continu.
nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, ...
'Name' , 'DC-motor' );

3. On spécifie les noms d'entrée et de sortie, ainsi que les unités :

set(nlgr, 'InputName', 'Voltage', 'InputUnit', 'V',


...
'OutputName', {'Angular position', 'Angular
velocity'}, ...
'OutputUnit', {'rad', 'rad/s'},
...
'TimeUnit', 's');

4. On spécifie les noms et les unités des états et paramètres initiaux :

nlgr = setinit(nlgr, 'Name', {'Angular position' 'Angular


velocity'});
nlgr = setinit(nlgr, 'Unit', {'rad' 'rad/s'});
nlgr = setpar(nlgr, 'Name', {'Time-constant' 'Static
gain'});
nlgr = setpar(nlgr, 'Unit', {'s' 'rad/(V*s)'});

5. On visualise le modèle initial :


• On obtient des informations de base sur le modèle. Le moteur à courant continu a
2 états (initiaux) et 2 paramètres de modèle.
size(nlgr)

• On affiche les états et paramètres initiaux. Les états initiaux et les paramètres
sont des tableaux de structure. Les champs spécifient les propriétés d'un état
initial ou d'un paramètre individuel.

nlgr.InitialStates(1)
nlgr.Parameters(2)

• On récupère des informations sur tous les états initiaux ou paramètres de modèle
en un seul appel.

getinit(nlgr, 'Fixed')
getpar(nlgr, 'Min')

• On obtient des informations de base sur l'objet :

get(nlgr)

➢ Évaluation des performances du modèle initial de


moteur à courant continu
Avant d'estimer les paramètres tau et k, simulez la sortie du système avec les
suppositions de paramètres à l'aide du solveur d'équation différentielle par défaut (un
solveur Runge-Kutta 45 avec ajustement adaptatif de la longueur de pas). Les options
de simulation sont spécifiées à l'aide de la propriété de modèle "SimulationOptions".

1. On définit les tolérances d'erreur absolues et relatives sur de petites valeurs


( 1e-6et 1e-5, respectivement) :

nlgr.SimulationOptions.AbsTol = 1e-6;
nlgr.SimulationOptions.RelTol = 1e-5;

2. On compare la sortie simulée avec les données mesurées :


Compare affiche les sorties mesurées et simulées d'un ou plusieurs modèles, tandis
que predict, appelé avec les mêmes arguments d'entrée, affiche les sorties simulées.
compare(z, nlgr);

Figure 3 : Comparaison entre les sorties mesurées et les sorties simulées du modèle
initial de moteur à courant continu.
• Estimation des paramètres :

Afin de réduire les erreurs de prédiction pour les modèles de boîte grise non linéaires,
on utilise nlgreyest pour estimer les paramètres et les états initiaux. Le jeu d'options
"nlgreyestOptions" permet de configurer les options d'estimation, telles que le choix
d'affichage de la progression d'estimation.

nlgr = setinit(nlgr, 'Corrigé' , {false false}); % Estimer les états


initiaux.
opt = nlgreyestOptions( 'Affichage' , 'on' );
nlgr = nlgreyest(z, nlgr, opt);

• Évaluation des performances du modèle estimé de


moteur à courant continu
1. Passons en revue les informations sur le processus d’estimation :

Ces informations sont stockées dans la Report propriété de l'idnlgreyobjet. La


propriété contient également des informations sur la méthode d'estimation du modèle,
telles que le solveur et la méthode de recherche, l'ensemble de données et la raison de
l'arrêt de l'estimation.
nlgr.Report
fprintf('\n\nThe search termination condition:\n')
nlgr.Report.Termination

2. Évaluons la qualité du modèle en comparant les sorties simulées et mesurées :


Les ajustements sont de 98 % et 84 %, ce qui indique que le modèle estimé capture
bien la dynamique du moteur à courant continu.
compare(z, nlgr);
Figure 4 : Comparaison entre les sorties mesurées et les sorties simulées du modèle
estimé de moteur à courant continu IDNLGREY.
3. Comparons les performances du idnlgrey modèle avec un modèle ARX de
second ordre :

na = [2 2; 2 2];
nb = [2; 2];
nk = [1; 1];
dcarx = arx(z, [na nb nk]);
compare(z, nlgr, dcarx);
Figure 5 : Comparaison entre les sorties mesurées et les sorties simulées des modèles
estimés de moteur à courant continu IDNLGREY et ARX.

4. Vérifions les erreurs de prédiction :


Les erreurs de prédiction obtenues sont faibles et centrées autour de zéro (non
biaisées).
pe(z, nlgr);
Figure 6 : Erreurs de prédiction obtenues avec le modèle estimé de moteur à
courant continu IDNLGREY.

5. Vérifions les résidus («restes») :


Les résidus sont petits pour une bonne qualité du modèle et indiquent ce qui reste
inexpliqué par le modèle. Pour montrer les corrélations entre les résidus, on utilise la
commande Resid. Les autocorrélations des résidus pour les deux sorties sont
représentées dans la première colonne des graphiques. La corrélation croisée entre ces
déchets et l'entrée « Tension » est visible dans la deuxième colonne. Les corrélations
sont dans des limites acceptables.
figure('Name',[nlgr.Name ': residuals of estimated model']);
resid(z,nlgr);
Figure 7 : Résidus obtenus avec le modèle de moteur à courant continu IDNLGREY
estimé.

6. Traçons la réponse étape par étape :


Une étape d'entrée unitaire conduit à une position angulaire avec un comportement de
type rampe et à une vitesse angulaire qui se stabilise à un niveau constant.
figure('Name', [nlgr.Name ': step response of estimated
model']);
step(nlgr);
Figure 8 : Réponse échelonnée avec le modèle de moteur à courant continu
IDNLGREY estimé.
7. Examinons la covariance du modèle :
• La matrice de covariance et la variance de bruit estimées peuvent être utilisées
pour évaluer la qualité du modèle estimé. Le i -ème paramètre du modèle est
important pour expliquer la dynamique du système lors de l'utilisation de la
structure de modèle choisie, selon une « petite » valeur de l'élément diagonal (i, i)
de la matrice de covariance. Les éléments avec une faible variance de bruit
(covariance pour les systèmes à sorties multiples) sont également une bonne
indication que le modèle capture correctement les données d'estimation.
getcov(nlgr)
nlgr.NoiseVariance

• Pour plus d'informations sur le modèle estimé, on utilise present pour afficher les
états initiaux et les valeurs estimées des paramètres, ainsi que l'incertitude
estimée (écart type) pour les paramètres.

present(nlgr);
➢ Conclusion :
Les outils de base pour effectuer une modélisation non linéaire en boîte grise sont
présentés dans cet exemple. Pour en savoir plus, consultez les exemples suivants de
boîtes grises non linéaires :
❖ Écrire et utiliser des fichiers modèles C MEX .
❖ Utiliser des modèles de boîte grise non linéaires dans des situations de
modélisation plus avancées, telles que la création de modèles non linéaires à
temps continu et discret, de séries chronologiques et statiques.
❖ Gestion des paramètres qui ne sont pas scalaires.
❖ Les effets de l'utilisation de certains algorithmes.

Vous aimerez peut-être aussi