Discrétisation équation

cs_aducros Messages postés 2 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 13 juin 2010 - 18 mai 2010 à 22:11
cs_aducros Messages postés 2 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 13 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 ?

La programmation envisagée est en Java.

Merci pour vos conseils.

2 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
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...
0
cs_aducros Messages postés 2 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 13 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]

Réf.
http://fr.wikipedia.org/wiki/M%C3%A9thodes_de_Runge-Kutta

Quand on a compris le principe, on trouve ça plutôt simple !
0
Rejoignez-nous