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 :

traçage des courbes superposées dans deux figures dans une boucle


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 177
    Par défaut traçage des courbes superposées dans deux figures dans une boucle
    bonjour
    j'ai un problème avec la fonction plot (et probablement hold);
    je veux tracer les réponses temporelles et fréquentielles d'une fonction de transfert à paramètres variables dans une boucle, je veux avoir deux figures (l'une par step et l'autre par bode) pour différentes valeurs de paramètres
    j'ai essayé ce code qui ne marche pas (je vous le montre pour vous approcher l'idée)
    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
     
    k=input('Gain statique= ');
    xi=input('Facteur d''amortissement= ');
    wn=input('Pulsation propre= ');
     
    for i=1:length(k)
     
        num=k(i);
     
        den=[1/(wn^2) 2*xi/wn 1];
    G=tf(num,den);
     
    if i==1 
    figure(1)
    end
    bode(G);
    hold on
     
    if i==1
    figure(2)
    end
    step(G);
     hold on
     
    end
    ça me pose aucun problème si je le fais dans deux boucles séparées (une pour step et une pour bode) mais je veux les combiner dans une seule (pensez au cas général).
    merci d'avnce

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Est-ce que c'est normal que tes 2 IF contiennent la même condition (i==1)?

    Sinon pense à indenter ton code (Ctrl+A puis Ctrl+I) ca sera plus facile à lire.

    Duf

  3. #3
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Qu'est ce que tu entends par ne marche pas ? Moi ce code s'exécute chez moi et affiche une figure avec deux axes et une figure avec un axe

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 177
    Par défaut
    Est-ce que c'est normal que tes 2 IF contiennent la même condition (i==1)
    l'ouverture des deux fenêtres doit se faire une seule fois ( à la première itération ) pour ne pas écraser les anciennes figures, puis je trace les réponses correspondantes à chaque itération (enfin, je cherche une solution)

    Sinon pense à indenter ton code (Ctrl+A puis Ctrl+I) ca sera plus facile à lire.
    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
     
    k=[1 2 3];
    xi=0.3;
    wn=2.5;
     
    for i=1:length(k)
     
        num=k(i);
     
        den=[1/(wn^2) 2*xi/wn 1];
        G=tf(num,den);
     
        if i==1
            figure(1)
        end
        bode(G);
        hold on
     
        if i==1
            figure(2)
        end
        step(G);
        hold on
     
    end
    je ne sais pas si tu as compris mon problème DUF

    Qu'est ce que tu entends par ne marche pas ? Moi ce code s'exécute chez moi et affiche une figure avec deux axes et une figure avec un axe
    ça m'étonne, en exécutant le code précédent il me trace une seule courbe sur chaque figure et retourne cette erreur
    ??? Error using ==> wrfc.plot.check_hold at 39
    Cannot superpose plots of different types or sizes.

    Error in ==> Untitled at 15
    bode(G);
    je vais reformuler mon problème;

    prenez ce code

    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
    k=[1 2 3];
    xi=0.3;
    wn=2.5;
    figure(1)
    for i=1:length(k)
     
        num=k(i);
     
        den=[1/(wn^2) 2*xi/wn 1];
        G=tf(num,den);
     
        bode(G);
        hold on
     
    end
     
    figure(2)
    for i=1:length(k)
     
        num=k(i);
     
        den=[1/(wn^2) 2*xi/wn 1];
        G=tf(num,den);
     
        step(G);
        hold on
     
    end
    je chercher une solution avec une seule boucle for qui rend le même résultat que ce dernier code. J'espère que c'est claire maintenant.
    Merci pour votre suivi

  5. #5
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    En effet j'avais pas tout bien compris...

    Je pense qu'il te suffit de supprimer les IF, lors des boucles suivantes si les figures existent elles seront simplement activées à tour de rôle ce qui te permettra de faire les tracés dans les bonnes figures.

    Ce qui devrait donner:
    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
     
    k=[1 2 3];
    xi=0.3;
    wn=2.5;
     
    for i=1:length(k)
     
        num=k(i);
     
        den=[1/(wn^2) 2*xi/wn 1];
        G=tf(num,den);
     
        figure(1)
        bode(G);
        hold on
     
        figure(2)
        step(G);
        hold on
     
    end

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 177
    Par défaut

    j'avais l'idée que figure(1) ouvre une figure "vide" à chaque fois

  7. #7
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Non justement, figure ouvrirait une figure à chaque fois alors que figure(1) spécifie d'ouvrir la figure numéro 1 donc si elle existe il se contente de l'activer.

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

Discussions similaires

  1. Deux YLABEL dans un figure à deux graphiques
    Par macErmite dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/06/2015, 12h08
  2. calquer deux figures dans une seule figure
    Par sala75 dans le forum Images
    Réponses: 2
    Dernier message: 27/06/2013, 14h30
  3. Lier deux champs dans deux tables ?
    Par Olivierc dans le forum Access
    Réponses: 3
    Dernier message: 28/04/2006, 23h13
  4. Réponses: 22
    Dernier message: 29/01/2005, 11h29
  5. Rediriger deux pages dans deux frames
    Par Tapioca dans le forum ASP
    Réponses: 6
    Dernier message: 06/07/2004, 16h27

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