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 :

légende dans une boucle [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut légende dans une boucle
    Bonjour,

    Voici mon script Matlab (il est aussi en pièce jointe), ce sera plus facile d'expliquer ensuite mon problème :

    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
    Tw=450; % température de la surface chauffante en Kelvin
    R0=[2.5e-3:2e-4:5e-3]; % initialisation du rayon de la goutte en mètre
    tau=[0]; % initialisation du temps caractéristique d'évaporation en seconde
    R=[0]; % initialisation du rayon en m
     
    figure(1)
    for j=1:length(R0)
       tau(j)=(2^(11/4))*[(3*mu)/(rho_v*g)]^(1/4)*[(Lv*rho*a)/(k*(Tw-Td))]^(3/4)*(R0(j)^(1/2));
       for i=1:length(t)
          R(i,j)=R0(j)*[1-(t(i)/tau(j))]^2; % calcul du rayon
        end
        hold all
        plot(t(:),R(:,j));
        cc(j)=cellstr(num2str(R0(j))); %légende de chaque courbe tracée
    end
    legend(cc)
    Dans ce script, on fixe la température du mur Tw et on fait varier les rayons initiaux R0. Pour chaque R0, on regarde l'évolution du rayon R en fonction du temps t et on trace cette évolution.

    Mon problème est le suivant : pour chaque courbe tracée, je cherche à écrire (dans la légende) R0 = ... m

    J'ai pensé à inscrire quelque part dans le script : 'R0 = %f m', num2str(R0(j)) mais ça ne fonctionne pas !
    Je ne sais ni comment écrire ceci proprement, ni même où l'insérer dans le script...

    Serait-il possible d'avoir un peu d'aide s'il vous plaît ?

    Merci par avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir et bienvenue sur le forum,

    Il suffit de faire une simple concaténation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cc(j)=cellstr(['R0 = ' num2str(R0(j))]);
    Ou sans l'inclure dans la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cc = cellfun(@(x) ['R0 = ' num2str(x)],num2cell(R0),'UniformOutput',false)

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    La même chose en utilisant STRCAT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cc = strcat({'R0 = '},num2str(R0(:)));
    Sinon, sous MATLAB, les crochets ont une signification différente de celle des mathématiques. Il ne faut s'en servir que pour la concaténation de valeurs :

    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
    Tw = 450; % température de la surface chauffante en Kelvin
    R0 = 2.5e-3:2e-4:5e-3; % initialisation du rayon de la goutte en mètre
    R = zeros(length(t),length(R0)); % initialisation du rayon en m
     
    figure(1)
    hold on
     
    for j=1:length(R0)
     
        tau = 2^(11/4)*((3*mu)/(rho_v*g))^(1/4)*((Lv*rho*a)/(k*(Tw-Td)))^(3/4)*(R0(j)^(1/2));
     
        for i=1:length(t)
            R(i,j)=R0(j)*(1-(t(i)/tau))^2; % calcul du rayon
        end
     
        plot(t(:),R(:,j));
     
    end
     
    cc = strcat({'R0 = '},num2str(R0(:)));
    legend(cc)

  4. #4
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut
    Merci beaucoup à vous deux pour vos réponses ultra-rapides ! Mon script fonctionne maintenant !

    Du coup, il me reste une question...
    Je cherche à tracer deux fonctions différentes tau1 et tau2 sur le même graphe mais il faut que les intervalles des fonctions ne se recoupent pas...

    Voici le script pour être plus claire :

    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
    R0=2e-5;            % rayon initial de la goutte en m
    Tw1=[323:1:372];     % initialisation du vecteur température de la surface en Kelvin
    Tw2=[373:1:1000]
    tau1=[0];            % initialisation du temps caractéristique d'évaporation en s
    tau2=[0];
     
    figure;
    for i=1:length(Tw1)
        tau1(i)=abs([2/(3*770*((Tw1(i)-Td)^2.78))]*rho*Lv*[(3*a*(R0^2))^(1/3)])
    end
     
    for j=1:length(Tw2)
        tau2(j)=(2^(11/4))*[(3*mu)/(rho_v*g)]^(1/4)*[(Lv*rho*a)/(k*(Tw2(j)-Td))]^(3/4)*(R0^(1/2));
    end
     
    plot(Tw1,tau1,'b')
    hold on
    plot(Tw2,tau2,'g')
    hold off
    Dans ce sript :
    tau1 en fonction de Tw1 ne doit être tracée que pour Tw1 compris entre 0K et 372K, et les ordonnées doivent être comprises entre 0 et 50 sec
    tau2 en fonction de Tw2 tracée pour Tw2 au-delà de 373K et les ordonnées doivent être comprises entre 0 et 100 sec

    J'arrive à restreindre l'axe des abscisses mais je ne vois pas comment "couper" les fonctions en ordonnée... Je vous mets en pièces jointes ce que j'obtiens, mon script et ce que je souhaite obtenir...

    En vous remerciant à nouveau par avance !
    Images attachées Images attachées   
    Fichiers attachés Fichiers attachés

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si ce n'est que pour l'affichage, une solution serait d'utiliser la fonction fplot.
    Je te laisse regarder la documentation doc fplot

  6. #6
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut
    Merci beaucoup pour votre aide !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/03/2015, 05h53
  2. légende dans une boucle
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 2
    Dernier message: 11/03/2012, 22h53
  3. [legend] Légende dans une boucle
    Par guefrachi dans le forum MATLAB
    Réponses: 1
    Dernier message: 02/02/2011, 17h53
  4. Tracé de courbes et légende dans une boucle for
    Par abzi46 dans le forum MATLAB
    Réponses: 3
    Dernier message: 23/10/2009, 17h29
  5. [legend] Légende dans une boucle
    Par L1011 dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/05/2008, 14h48

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