[matlab] Coder la méthode DMC (Dynamic Matrix Control)
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

[matlab] Coder la méthode DMC (Dynamic Matrix Control)



  1. #1
    invite860b8653

    [matlab] Coder la méthode DMC (Dynamic Matrix Control)


    ------

    Bonjour tout le monde,

    je viens vous demander de l'aide suite à une grosse impasse dans un projet que j'ai à réaliser sur matlab.
    L'objectif est de créer un programme permettant d'appliquer la méthode DMC (Dynamic Matrix Control) à un réacteur dont on peut contrôler la positon d'une vanne 3 voies régulant les arrivées d'eau chaude et d'eau froide dans la double enveloppe d'un réacteur dont on souhaite réguler la température. Simulink est utilisé.

    L'algorithme (très simplifié) est le suivant :
    - on impose une première valeur à u (position de la vanne) : on mesure une température dans le réacteur
    - on s'en sert pour calculer :
    - la différence entre le vecteur de prédiction des sorties et le vecteur de référence
    - la prédiction de sortie basée sur les entrées passées
    - le résidu entre la prédiction et la sortie mesurée
    - on en déduit un delta_u, d'où la prochaine position de la vanne à partir de laquelle on remesure une température dans le réacteur

    on utilise dans l’algorithme la pile polonaise inversée. L'algorithme a été à priori relu et corrigé plusieurs fois.

    Le souci rencontré est le suivant : on peut à priori demander une régulation de température entre 280 K (Tf) et 360 K (Tc). Lors de la durée de la régulation, la position de la vanne oscille très fortement, en faisant osciller également la température mesurée dans le réacteur. Dans les premiers intervalles de temps la température augmente ou diminue à partir de Tinitial (autour de 320K), puis la position de la vanne oscille et la température oscille également en s'éloignant de la valeur de référence. Ce phénomène se passe quelle que soit la température de référence imposée.

    Auriez-vous une idée de l'origine de ce problème ? Je peux si jamais fournir les fichiers sources du projet par mp.

    Merci d'avance !

    -----

  2. #2
    Paraboloide_Hyperbolique

    Re : [matlab] Coder la méthode DMC (Dynamic Matrix Control)

    Bonsoir,

    A priori je dirais que vous êtes victime d'une instabilité numérique. Si je comprend bien votre problème, vous essayez de résoudre numériquement l'équation différentielle:



    Où :

    T(u) est la dépendance de la température avec l'ouverture de la vanne.
    f(u) est la fonction décrivant comment la température varie quand l'ouverture de la vanne varie (la partie de votre programme permettant de prédire la variation de température en fonction de la variation d'ouverture de la vanne).

    Si mon interprétation est correcte, vous devriez réduire la valeur de votre delta_u à chaque pas de temps. N'essayez pas de corriger la température en un seul pas de temps avec le delta_u que vous fournit le résidu entre la prédiction et la sortie mesurée. Prenez par exemple 10% de cette valeur (ou moins) et voyez si vous parvenez à éliminer les oscillations observées.

  3. #3
    invite860b8653

    Re : [matlab] Coder la méthode DMC (Dynamic Matrix Control)

    Bonsoir,

    tout d'abord merci pour votre réponse rapide.

    Je ne pense pas pouvoir agir sur le delta u, car celui ci est imposé par l'algorithme DMC, que je vais essayer de détailler (en simplifiant) ici :
    - on construit deux matrices A et B à l'aide des coefficients de réponse indicielle (réponse du procédé à un échelon)
    - la valeur à l'instant k de delta_u(k) est fonction de a et d'un vecteur e(k)
    - ce vecteur e(k) est fonction de B, de y_ss (valeur stationnaire de la sortie avant l'échelon),d'un vecteur formé de deltas_u (d'où l'utilisation de la pile polonaise), de la température de consigne et du résidu

    Il semblerait que le souci soit lorsqu'on atteint Tmesurée= tref : il faudrait que delta_u(k) = 0 pour maintenir la position de la vanne, or cela ne semble pas être le cas

  4. #4
    Paraboloide_Hyperbolique

    Re : [matlab] Coder la méthode DMC (Dynamic Matrix Control)

    Bonjour,

    Dans ce cas, pouvez-vous jouez sur le pas de temps et le réduire ?

    Par ailleurs, numériquement vous n'aurez jamais exactement delta_u(k) = 0. Il faudrait alors l'imposer quand |Tmesuré - Tref| < tolérance donnée (par exemple, 0,1°C).

  5. A voir en vidéo sur Futura
  6. #5
    invite860b8653

    Re : [matlab] Coder la méthode DMC (Dynamic Matrix Control)

    Artificiellement on peut avoir pour la première itération delta_u=0 (en imposant une Tref égale à la première température mesurée). Cependant la courbe de température diverge toujours après quelques itérations.
    Pour le pas de temps, nous avons essayé de le réduire mais sans succès... L'algorithme a été refait à la main en même temps que matlab a été débugué itération par itération, pour l'instant nous n'avons pas identifié la source du problème.
    Peut-être est-ce la méthode en elle-même qui diverge ?

  7. #6
    Chanur

    Re : [matlab] Coder la méthode DMC (Dynamic Matrix Control)

    Bonjour,
    tu n'as pas précisé : quand tu dis que l'algo a été refait à la main, il divergeait ? il donnait les mêmes valeurs que Matlab ? Ou pas ?
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. Méthode iterative par matlab
    Par inviteccb0e881 dans le forum Physique
    Réponses: 3
    Dernier message: 08/07/2017, 23h59
  2. [Matlab] Traduire la méthode de la Sécante
    Par invite78f958b1 dans le forum Programmation et langages, Algorithmique
    Réponses: 14
    Dernier message: 30/03/2014, 14h56
  3. Méthode de lagrange sous matlab
    Par invite385eddfd dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 30/12/2011, 13h54
  4. Methode de Jacobi(Matlab)
    Par invite2c0f979d dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 08/03/2008, 00h36
  5. Méthode de quasi-newton avec matlab
    Par rogeg dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 12/01/2007, 19h12