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 :

Equations différentielles couplées


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Equations différentielles couplées
    Bonjour,

    J'ai un petit problème pour une résolution simple d'un système de 7 EDO couplés.
    En simplifiant au max, j'ai un truc du genre :
    di/dt= ......
    dy/dt=.... + 3i(t-T)...
    J'ai essayé de résoudre avec ode23 et les autres mais je ne vois pas comment faire pour que le temps passe de t à t-T avec T connu.
    Me suis-je fais comprendre ?
    Merci pour votre aide.

  2. #2
    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
    Bonjour,

    pouvez vous nous montré ce que vous avez fait? pour bien comprendre votre probleme.
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    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
    22
    23
    24
    25
    26
    27
    28
    29
    function dy=hote(t,y)
    dy=zeros(7,1);
    gamma=0.008; % taux de renouvellement en j^-1
    alpha=0.1; % 1/alpha = durée de virémie en j
    beta=0.4; % 1/béta = durée de la période de latence en j
    mu=4; % 1/mu = durée de vie du vecteur en j
    T=1; % durée extrinsèque en j
    if t<0
        dy=zeros(7,1);
        return
    else
        dy(1)=-lambdah(y(7))*y(1)+gamma*y(4);
        dy(2)=lambdah(y(7))*y(1)-beta*y(2);
        dy(3)=beta*y(2)-alpha*y(3);
        dy(4)=alpha*y(3)-gamma*y(4);
        dy(5)=-lambdav(y(3))*y(5)-mu*y(5)+mu;
        dy(6)=lambdav(y(3))*y(5)-exp(-mu*T)*lambdav(???)*(t-T)-mu*y(6);
        dy(7)=exp(-mu*T)*lambdav(???)*(t-T)-mu*y(7);
    end
     
    function y=lambdah(x)
    alpha=0.1; % 1/alpha = durée de virémie en j
    nh=5; % nbre total de contacts infectieux entre vecteur et hote pdt un tps t
    y=alpha*nh*x;
     
    function y=lambdav(x)
    mu=2; % 1/mu = durée de vie du vecteur en j
    nv=5; % nbre de contacts entre vecteurs et hotes pendant un tps t
    y=mu*nv*x;
    Le problème c'est pour dy(6) et dy(7) car il faut que le x du lambdav soit y(3) au temps (t-T) car du coup ça va pas quand je fais ode45...
    Me suis-je fais comprendre ? !! lol
    Merci

  4. #4
    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
    Bonsoir,
    je ne sais pas s'il y a une methode directe ou fonction déjà faite pour fair le decalage temporel, mais bon, j'ai trouvé une solution qui n'est pas de tout optimale.
    dans le programme pricipale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    t3=[];y3=[];
    save('hote','t3','y3');
    [t,y] = ode45(@hote,[-12 12],[0 1 1 2 1 0 0]); % par ex
    delete('hote.mat');
    et la fonction hote:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    function dy=hote(t,y)
    load('hote');
    y3=[y3 y(3)];t3=[t3 t];
    dy=zeros(7,1);
    gamma=0.008; % taux de renouvellement en j^-1
    alpha=0.1; % 1/alpha = durée de virémie en j
    beta=0.4; % 1/béta = durée de la période de latence en j
    mu=4; % 1/mu = durée de vie du vecteur en j
    T=1; % durée extrinsèque en j
    yt_T=0;
    if t > T
      [c,I]=min(abs(t3-t+T));
      yt_T=y3(I);
    end
    if t<0
    dy=zeros(7,1);
    return
    else
    dy(1)=-lambdah(y(7))*y(1)+gamma*y(4);
    dy(2)=lambdah(y(7))*y(1)-beta*y(2);
    dy(3)=beta*y(2)-alpha*y(3);
    dy(4)=alpha*y(3)-gamma*y(4);
    dy(5)=-lambdav(y(3))*y(5)-mu*y(5)+mu;
    dy(6)=lambdav(y(3))*y(5)-exp(-mu*T)*lambdav(yt_T)*(t-T)-mu*y(6);
    dy(7)=exp(-mu*T)*lambdav(yt_T)*(t-T)-mu*y(7);
    end
    save('hote','y3','t3');
    
    function y=lambdah(x)
    alpha=0.1; % 1/alpha = durée de virémie en j
    nh=5; % nbre total de contacts infectieux entre vecteur et hote pdt un tps t
    y=alpha*nh*x;
    
    function y=lambdav(x)
    mu=2; % 1/mu = durée de vie du vecteur en j
    nv=5; % nbre de contacts entre vecteurs et hotes pendant un tps t
    y=mu*nv*x;
    ca prend beaucoup de temps
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup !
    Pouvez-m'expliquer comment ça marche, j'ai un peu du mal à comprendre votre programme ? !
    load('hote'); à quoi ça sert ?
    [c,I]=min(abs(t3-t+T));qu'est-ce que le c ? et le I ?
    save('hote','y3','t3');

    qu'est-ce que hote.mat ?

    Merci d'avance.

  6. #6
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par lea6969
    Merci beaucoup !
    Pouvez-m'expliquer comment ça marche, j'ai un peu du mal à comprendre votre programme ? !
    load('hote'); à quoi ça sert ?
    [c,I]=min(abs(t3-t+T));qu'est-ce que le c ? et le I ?
    save('hote','y3','t3');

    qu'est-ce que hote.mat ?

    Merci d'avance.
    [c,I]=min ...

    Là t'exagère, dans matlab tu fais help min çà te dit que c sera le minimum de tes argument et I l'indice

    [c,I]=min(A) renverra dans c le minimum de A et I est tel que A(I)==c
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Mais je ne comprends pas pourquoi y3(I) serait la valeur de y(3) au temps t-T
    ???
    Je vois pas le rapport avec le minimum des valeurs de t3-t+T ? !

    sinon pour load et save, je pense avoir compris, ça permet de sauver les valeurs obtenues aux différents temps t afin de les incrémenter dans y3.

  8. #8
    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
    Bonjour,
    save et load servent à sauver et charger les valeurs de "y" et "t" traitées pour pouvoir trouver le "t" le plus proche de "t-T" et "y" correspondant.

    l'utilisation de "min(abs(t3-t+T))" est pour determiner l'indice de "t" le plus proche de "t-T", d'où la minimisation de t3-(t-T)= t3-t+T
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

Discussions similaires

  1. equation diff. modele simulink et modele sous matlab
    Par amnmhk dans le forum Simulink
    Réponses: 1
    Dernier message: 16/12/2014, 19h57
  2. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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