IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Résoudre un système d'équations différentielles


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Résoudre un système d'équations différentielles
    Bonjour

    Je suis débutant en Matlab , j’aimerais résoudre le système d'équations différentielles suivant ( avec A,B,C,D,E,F,G sont des constantes ) et les valeurs de (Ta) sont données sur un fichier Excel en fonction du temps .
    A (d(Tm)/dt ) = B(Tm – Ta) +C(Ti – Tm)
    D (d(Ti)/dt ) = P – E(Ti –Tm)
    dV/dt = 20 - Ti
    P = F(20 – Ti) + (G/Ti)V
    Merci pour votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    salut, ton vecteur d'inconnues est X=(Tm, Ti, V).
    Il faut écrire ton EDO de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    d(Tm)/dt = blabla
    d(Ti)/dt = blabla
    d(V)/dt = blabla
    ensuite tu fais appel à ode45, ode15s

    doc ode45, doc ode15s etc...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour

    Le problème c’est que (Ta) varie avec le temps et cette variation est donnée sur un fichier Excel (1ère colonne pour le temps , le 2ème pour la valeur de Ta) ; je ne sais pas comment faire pour prendre en considération cette variation

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    salut, l'idée est de chargé ton tableau excel dans une matrice A (par exemple) à N lignes et 2 colonnes (le temps et TA). Ensuite tu passes cette matrice comme paramètre à ta fonction ode45 (ode15s ou autre)

    pour récupérer la "bonne valeur" de TA tu regardes le temps t de la matrice A qui se rapproche le plus du temps courant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    index=min(abs(t-A(:,1)));
    t est le temps (donné par ton intégrateur) et A(:,1) contient tous les temps de TA

    puis, le bon TA est

    et c'est dans la poche.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    bon, en gros voici le code (non testé !!)

    fichier system.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    function xdot=system(t,x,Ex)
    % calcul xdot=f(t,x)
    % t est le temps
    % x est le vecteur d'etat (x=(Tm, Ti, V)')
    % Ex est la matrice qui vient d'excel (N lignes, 2 colonnes)
     
    % quelques constantes
    A=1; B=1; C=1; D=1; E=1; F=1; G=1;
     
    % la sortie doit etre un vecteur colonne
    xdot=zeros(size(x,1),1);
     
    % quelques variables temporaires
    index=min(abs(t-Ex(:,1)));
    Ta=Ex(index,2);
    P=F*(20.-x(2))+G*x(3)/x(2);
     
    xdot(1)=(B*(x(1)-Ta)+C*(x(2)-x(1)))/A;
    xdot(2)=(P-E*(x(2)-x(1)))/D;
    xdot(3)=20.-x(2);
    fichier main.m

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Ex=load('ton_fichier_excel');
    x0=[1;2;3]; % la condition initiale, vecteur colonne
    t0=0; % temps initial
    tfin=2; temps final;
     
    % x est une matrice à N lignes et 3 colonnes (1e colonne pour Tm, 2e colonne pour Ti, 3e colonne pour V)
    [t,x]=ode45(@system,[t0 tfin],x0,[],Ex);
    ça devrait marcher...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour

    D'abord merci pour vos réponses elles m'ont grandement aidé, cepandant aprés avoir repris votre idée Matlab me génère à chaque exécution le code d'erreur suivant : " ??? Error using ==> system
    Function 'system' is not defined for variables of class 'double'. "

    Voila je ne vois pas trop comment résoudre ce probleme je vous renvoie les codes Matlab que j'ai modifié suivant m'on probleme.
    merci pour votre aide


    fichier system.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function xdot=system(t,x,Ex)
    % calcul xdot=f(t,x)
    % t est le temps
    % x est le vecteur d'etat (x=(Tm, Ti, V)')
    % Ex est la matrice qui vient d'excel (N lignes, 2 colonnes)
     
     
     
    % la sortie doit etre un vecteur colonne
    xdot=zeros(size(x,1),1);
     
    % quelques variables temporaires
    index=min(abs(t-Ex(:,1)));
    Ta = Ex(index,2);
     
    %equation a résoudre 
    d(y1)=(4.403*10^-5)*(y(2)-y(1))+(1.260*10^-4)*(Ta-y(1));
    dy(2)=(218.414*10^-5)*(y(1)-y(2))+93.289*10^-5*(y(3)-y(2));
    dy(3)=(408.173*10^-7)*(y(2)-y(3))+(33.583*10^-7)*(10-y(3))+10^-6;
    fichier main.m


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Ex = xlsread('test')                             % test = tableau excel de 2 colonnes
    x0=[10;15;20]; % la condition initiale, vecteur colonne
    t0=0; % temps initial
    tfin=10; temps final;
     
    % x est une matrice à N lignes et 3 colonnes (1e colonne pour Tm, 2e colonne pour Ti, 3e colonne pour V)
    [t,x]=ode15s(@system,[t0 tfin],x0,[],Ex);

  7. #7
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Salut,

    Pour ce qui est de l'erreur, tu doit changer le nom de ta fonction, parceque Matlab possède déjà une fonction qui s'appelle system, ce qui crée une confusion.
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Ah OK, je ne savais pas.
    Merci de l'info.

Discussions similaires

  1. résoudre un système d'équation
    Par niniii dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/04/2009, 02h45
  2. Réponses: 6
    Dernier message: 08/12/2008, 15h31
  3. Réponses: 7
    Dernier message: 19/05/2008, 13h24
  4. Réponses: 2
    Dernier message: 07/06/2007, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo