cs_aducros
Messages postés2Date d'inscriptionmercredi 24 mars 2010StatutMembreDernière intervention13 juin 2010
-
18 mai 2010 à 22:11
cs_aducros
Messages postés2Date d'inscriptionmercredi 24 mars 2010StatutMembreDernière intervention13 juin 2010
-
13 juin 2010 à 11:41
Bonjour,
Je souhaiterais savoir comment discrétiser l'équation linéaire suivante :
X'(t) = A.X(t) + B.U(t)
X est le vecteur d'état du système
X' est le vecteur d'état dérivé
A est la matrice d'état du système
B est la matrice des entrées
U est le vecteur des entrées
Cette équation d'état est utilisée pour représenter l'évolution dynamique des systèmes en automatique.
La discrétisation envisagée se base sur la méthode d'intégration numérique de Runge Kutta d'ordre 4 plutôt que la méthode d'Euler.
Comment exprimer alors cette équation discrétisée ?
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 31 mai 2010 à 18:42
Tu devrais peut être préciser ta question, donne nous un morceau de code, dis nous ce que tu n'arrives pas à faire et pose des question concrètes. Tu peux aussi expliquer ce qu'est la méthode de Runge Kutta ou donner un lien vers un site qui l'explique.
Là, je t'aurais bien répondu mais je ne vois pas ce que tu veux...
cs_aducros
Messages postés2Date d'inscriptionmercredi 24 mars 2010StatutMembreDernière intervention13 juin 2010 13 juin 2010 à 11:41
La solution au problème réside dans la mise en oeuvre de la méthode de Runge Kutta pour l'intégration des équations différentielles.
Il faut exprimer chaque équation différentielle du système sous la forme suivante :
dxi/dt = Fj(x1,x2,x3, ..., xn), les xi sont les composantes du vecteur d'état x. Les fonctions Fj sont définies par exemple par des méthodes de classe qui vont calculer chaque nouvelles valeurs.
Pour ma part, la difficulté résidait dans la compréhension/mise en oeuvre des fonctions Fj à partir de l'équation générale avec un système à plusieurs variables.
Exemple de fonction Fj
public double fonct_lng_u(double u, double w, double q, double t, double p, double g) {return (a11*u+a12*w+a13*q+a14*t+b11*p+b12*g);}
Les aij,bij sont les coefficients des matrices A,B et les autres éléments ceux des vecteurs X et U
Il faut aussi écrire une méthode integreRK4 qui va mettre en oeuvre l'algo et ceci sera calculé à chaque pas d'horloge (incrément dt).
void integreRK4() extrait de la méthode
?_t : valeur des variables à l'instant t
?_tdt : valeur des variables à l'instant t+dt
double du1 = fonct_lng_u(u_t, w_t, q_t, t_t, p_t, g_t);
...
double du_moy = 1.0/6.0 * (du1 + 2 * du2 + 2 * du3 + du4);// moyenne des 4 pentes sur la tranche de temps [t, t+dt]
double u_tdt = u_t + dt * du_moy;// nouvelle valeur intégrée sur la tranche de temps [t, t+dt]