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 :

Affichage de plusieurs courbes dans un même graphe [Débutant]


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien aéronautique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Technicien aéronautique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Affichage de plusieurs courbes dans un même graphe
    Bonsoir à tous,

    J'ai un petit problème sur l'affichage de plusieurs courbes sur un même graphe. J'ai fais un code sur la représentation d'une propagation d'une onde sur un fil et je dois afficher 10 courbes représentant 10 étapes de l'évolution de celle-ci. J'ai réussi à faire un graphe avec les 10 courbes mais le problème est que les courbes sont identiques. Je pense que les différentes variables que je demande à tracer évolue avec le temps or j'aimerai les figer à un instant t. Si quelqu'un aurait une solution à mon problème je suis tout ouïe, et pour des questions supplémentaires aussi.
    Les codes suivants sont utiles pour le fonctionnement du fichier onde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function Y=Alpha(X,xp,amax,L)
        Y=(X>=0).*(X<=xp).*((amax/xp).*X)+(X>xp).*(X<=L).*((amax/(L-xp)).*(L-X));
    end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function Y=Beta(X,xmin,xmax,bmax)
        Y=(X>=xmin).*(X<=xmax).*bmax;
    end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function A=matrice(I,c,Dt,Dx)
        A=sparse(I+1,I+1); %matrice creuse, seuls les termes non-nuls seront stockés (les termes non définis seront égaux a 0)
        for i=2:I
            b=(c*Dt/Dx)^2;
            A(i,i)=2*(1-b);
            A(i,i-1)=b;
            A(i,i+1)=b;
            %les 4 lignes suivantes ne sont pas obligatoires car U(1)=0 et U(I+1)=0, on aurait donc pu laisser ces 4 termes a* 0 (ou n'importe quelle autre valeur, cf partie 1 question 2)
        end
    end
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    %------------------------------
    %      Initialisation
    %------------------------------
     
    L=1;
    c=100; % Vitesse de propagation en m/s
    CFL=0.99;
    I=1000;
    xmin=0;
    xmax=L;
    xp=0.5*L;
    amax=0.01;
    bmax=0;
    P=0.00001; % temps de pause en secondes
     
    %------------------------------
    %      Paramêtres déduits
    %------------------------------
     
    Dx=L/I;
    Dt=CFL*Dx/c;
    X=(0:Dx:L)';
    T0=L/c;
    T=12*T0;
    N=round(T/Dt);
     
    %------------------------------
    %   Instant d'affichage
    %------------------------------
     
    Taff1=0;
    Taff2=T0/25;
    Taff3=4*T0/25;
    Taff4=7*T0/25;
    Taff5=10*T0/25;
    Taff6=6*T0;
    Taff7=7*T0;
    Taff8=8*T0;
    Taff9=9*T0;
    Taff10=10*T0;
     
    %------------------------------
    %   Assemblage de la matrice
    %------------------------------
     
    A=matrice(I,c,Dt,Dx);
     
    %------------------------------
    %       Initialisation
    %------------------------------
     
    V=Alpha(X,xp,amax,L);
    U=V+Dt.*Beta(X,xmin,xmax,bmax);
     
    plot(X,V);
    pause(P)
    clf();
    plot(X,U);
    pause(P)
     
    for n=1:N
        W=A*U-V;
        if n==1
            clf()
            plot(X,W)
            pause(P)
        end
        if mod(n,4)
            clf()
            plot(X,W)
            pause(P)
        end
    %     il faut stocker U avant le changement de variables (ou V apres)
    %     en transformant les n en temps (n*Dt je pense) tester quand t=Taff
    %     idée: les Taff en n peuvent etre mis dans une matrice et tester
    %     a chaque fois le dernier élément dispo
        V=U;
        U=W;
    end
     
    ut1 = Taff1;
    ut2 = Taff2;
    ut3 = Taff3;
    ut4 = Taff4;
    ut5 = Taff5;
    ut6 = Taff6;
    ut7 = Taff7;
    ut8 = Taff8;
    ut9 = Taff9;
    ut10 = Taff10;
     
    for t=1:N
        W=A*U-V;
       switch t
           case ut1
               figure(2)
               plot(X,W)
           case ut2
               figure(2)
               plot(X,W)
           case ut3
               figure(2)
               plot(X,W)
           case ut4
               figure(2)
               plot(X,W)
           case ut5
               figure(2)
               plot(X,W)
           case ut6
               figure(2)
               plot(X,W)
           case ut7
               figure(2)
               plot(X,W)
           case ut8
               figure(2)
               plot(X,W)
           case ut9
               figure(2)
               plot(X,W)
           case ut10
               figure(2)
               plot(X,W)
       end
       V=U;
       U=W;
    end
    Merci d'avance,

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    je n'ai pas compris la question. Pourquoi ne pas stocker les résultats dans un tableau? Il me semble que tu fais 2 fois la même boucle for.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien aéronautique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Technicien aéronautique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Et bien en fait, je ne sais pas comment on stocke des données dans un tableau et puis je pensais faire une boucle pour l'animation et l'autre pour le tracer des graphes car j'ai essayé de tout mettre dans une boucle mais cela n'a pas marcher. voilà

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Un exemple pour ta première boucle pour stocker les valeurs dans des tableaux:

    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
    %Pre-allocation des tableaux
    V = zeros(N+1,length(X));
    U = zeros(N+1,length(X));
    W = zeros(N,length(X));
    
    V(1,:)=Alpha(X,xp,amax,L);
    U(1,:)=V(1,:)+Dt.*Beta(X,xmin,xmax,bmax).';
     
    plot(X,V(1,:));
    pause(P)
    clf();
    plot(X,U);
    pause(P)
     
    for n=1:N
        W(n,:)=A*U(n,:).'-V(n,:).';
        if n==1
            clf()
            plot(X,W(n,:))
            pause(P)
        end
        if mod(n,4)
            clf()
            plot(X,W(n,:))
            pause(P)
        end
    %     il faut stocker U avant le changement de variables (ou V apres)
    %     en transformant les n en temps (n*Dt je pense) tester quand t=Taff
    %     idée: les Taff en n peuvent etre mis dans une matrice et tester
    %     a chaque fois le dernier élément dispo
        V(n+1,:)=U(n,:);
        U(n+1,:)=W(n,:);
    end
    J'ai stocké des résultats dans des vecteurs lignes donc il faut parfois faire des transposées (.') pour les multiplications de matrices.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien aéronautique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Technicien aéronautique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    ah d'accord, bon je teste ça et je reviens vers toi pour te tenir au courant.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien aéronautique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Technicien aéronautique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bon j'ai testé et j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Error usine +
    Matrix dimensions must agree 
     
    Error in onde (line 59)
    U (1,:)=V(1,:)+Dt*Beta (X,xmin,xmax,bmax);
    Pourrais t on m'éclairer?

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    : Matrix dimensions must agree.

    C'était le sens de ma dernière remarque, cette erreur est corrigée dans le code que j'ai mis.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien aéronautique
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Technicien aéronautique

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bon c'est bon, je suis arrivé à faire ce que je devais faire. Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Plusieurs courbes dans un même graphe
    Par usul3 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/07/2011, 15h54
  2. Réponses: 1
    Dernier message: 15/07/2009, 16h12
  3. affichage de plusieurs images dans une même figure
    Par kawther dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 20/02/2009, 18h45
  4. Affichage de plusieurs courbes dans un meme "axes"
    Par DOC doc doc dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 11/09/2007, 11h04
  5. Réponses: 1
    Dernier message: 14/07/2007, 14h19

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