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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    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
    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 éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    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
    Membre régulier
    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
    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 éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    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 éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    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
    Membre régulier
    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
    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);

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