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 :

tracé de résultat


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut tracé de résultat
    Bonjour, je dois tracer une courbe avec les valeurs d'une variable placée dans une boucle, mais quand je plot, il ne me retourne que la dernière valeur calculée.
    Comment faire pour garder en mémoire toutes valeurs précédentes ?

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            xm_nvo=(sum (x_v*w))/sum(w);
            xp=xm_nvo;
            plot(xm, 'r')

  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 : 40
    Localisation : France

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

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

    Le code que tu nous montre ne nous aide pas beaucoup puisque tu traces la variable 'xm' et on ne voit pas comment elle est calculée...

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Oups pardon !
    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
     
    VT=0.5
    N=100
    x_v est un vecteur 1*3
    w est un vecteur 3*1
     
    for i=1:N;
        if d(i)<VT;
            xm=(sum (x_v*w))/sum(w);
            xp=xm;
        else
            fprintf ('output (%d) failed\n',i);
            w(i,:)=[];
            x_v(:,i)=[];
            N=N-1;
            xm_nvo=(sum (x_v*w))/sum(w);
            xp=xm_nvo;
        end
    end
     
    plot (xp, 'r')
    Voilà je crois que j'ai tout dit !

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Place à l'aide d'une boucle, toutes tes valeurs dans un vecteur, tu pourras ensuite tracer correctement ta courbe

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    C'est pour faire ça que j'ai tout mis dans xp, sauf que les valeurs sont écrasées à chaque itération.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 202
    Points : 96
    Points
    96
    Par défaut
    Salut,

    C'est pour faire ça que j'ai tout mis dans xp, sauf que les valeurs sont écrasées à chaque itération.

    Oui effectivement tu ecrases xp à chaque fois, puisque tu redéfinis xp à chaque itération.
    Pour incrémenter xp au fur et à mesure de ta boucle, il faut que tu précise que le nouveau xp se mets à la ligne correspondant à ton i:


    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
    VT=0.5
    N=100
    x_v est un vecteur 1*3
    w est un vecteur 3*1
     
    cp=0;
    for i=1:N;
    cp=cp+1;
        if d(i)<VT;
            xm=(sum (x_v*w))/sum(w);
            xp(cp,:)=xm;
        else
            fprintf ('output (%d) failed\n',i);
            w(i,:)=[];
            x_v(:,i)=[];
            N=N-1;
            xm_nvo=(sum (x_v*w))/sum(w);
            xp(cp,:)=xm_nvo;
        end
    end
     
    plot (xp, 'r')
    Moi j'aime bien Matlab...mais j'ai pas l'impression que ça soit réciproque......

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    J'ai testé ce code, et je ne sors rien du tout !
    Et le graphe est vide...

  8. #8
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Que vaut la variable xp à la fin de ton code?
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Bonjour,

    Une autre question en passant concernant ton code. Comment peux-tu vider un vecteur qui n'existe pas ?

    w et x_v sont des vecteurs 3*1 et 1*3. Or dans ta boucle, tu vas de i=1 à i=100.

    Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    w(i,:)=[];
    x_v(:,i)=[];
    n'ont aucun sens.


    Autre point : ton premier sum ne sert à rien. La multiplication d'un vecteur ligne avec un vecteur colonne donne un scalaire.


  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Mon xp devrait être un vecteur formé par tous les résultats issus du calcul xm_nvo= (...).

    Je vous envoie le programme en entier, ce sera peut-être plus compréhensible que des explications en toutes lettres (enfin j'espère )

    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
    [x]= xlsread ('Classeur1.xls');
     
    w= [1; 1; 0.85];
    VT=2;
    M=size(x,1);
    t=0:0.04:10;
     
    for k=1:M; t=1:0.1:100;
    x_v=x(k,:);
    d=sort(abs(diff([x_v x_v(:,1)],1,2)));
    N=size(d,2);
    end
     
    for i=1:N;
        if d(i)<VT;
            xm=(sum (x_v*w))/sum(w);
            xp=xm;
        else
            fprintf ('output (%d) failed\n',i);
            w(i,:)=[];
            x_v(:,i)=[];
            N=N-1;
            xm_nvo=(sum (x_v*w))/sum(w);
            xp=xm_nvo;
        end
    end
     
    plot (xp, 'r')
    Classeur1 est un tableau (M*N)
    M=100
    N=3

    En fait, ce que je veux faire, c'est une moyenne pondérée des coefficients pour chaque ligne de ma matrice.

    w représente le poids de chaque sortie.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Le programme en entier ne nous aide pas beaucoup si tu nous ne donne pas plus d'information.

    Qui a-t-il dans ta variable x ? Quelle est sa taille ? ordre de grandeur des valeurs ?

    si tu peux nous mettre quelques lignes de ce fichier ca serait pas mal.

    Et surtout que cherches-tui à faire. Un code c'est bien beau mais si on ne sait pas ce que tu veux faire, ca nous aide pas. Enfin si on voit ce que tu veux faire mais ca serait bien que tu le précises avant qu'on ne passe quelques minutes à chercher ;-)

    PS: utilise la balise code sur ton/tes messages et indente ton code ca t'aidera...

    edit : t'es devin t'as répondu à mes questions avant mon post !

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Heu c'est quoi ton histoire d'output failed et de sort ?

    Si tu veux faire la moyenne pondéré de tes 3 coef, t'as pas besoin de tout ca ou alors j'ai pas compris ce que tu cherches à faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %x=fix(rand(100,3)*10);
    %ou
    x= xlsread ('Classeur1.xls');
     
    w=[1 1 0.85]';
     
    for i=1:100
        xp(i)=sum(x(i,:)*w)/sum(w);
    end
     
    plot(xp)

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    En fait les sorites doivent toutes tourner autour d'une certaine valeur, ici 12.
    Donc dès qu'une valeur s'en éloigne trop, je dois déclarer que la sortie est erronée et qu'on l'exclut pour le reste des calculs.
    Par exemple, si à l'instant t=3 (donc 3e ligne), la sortie 2 a pour valeur 15, l'algorithme doit la déclarer défaillante et dire que désormais, le poids de la sortie est 0 et ne plus considérer que les sorties 1 et 3.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Ha ben voilà, c'est un peu plus clair maintenant.

    tu te compliques la vie avec ton algorithme.

    Il suffit de regarder si un des éléments de ta ligne est plus grand que 12. Si c'est le cas, tu passes w à 0 et non pas à [] qui est l'élément vide.

    Si il n'y a pas de valeur éronnée, tu gardes le tout.

    Voici un exemple avec des valeurs bidons.
    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
     
    x=[5 7 9;10 9 7;15 9 8;9 15 7; 6 8 15];
    M=size(x,1);
     
    for i=1:M
     w=[1 1 0.85]';
     
            if sum(x(i,:)>12)<0
     
            xp(i)=sum(x(i,:)*w)/sum(w);
     
            else
            [num ind]=find(x(i,:)>12);
     
            w(ind)=0;
            xp(i)=sum(x(i,:)*w)/sum(w);
     
            end
    end

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Tu es magique !!
    Merci pour tout !!

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Pas de quoi mais essaye de bien comprendre le code ;-)
    C'est plus important que tout...

  17. #17
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par Merel Voir le message
    Voici un exemple avec des valeurs bidons.
    La même chose en une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = [5 7 9;10 9 7;15 9 8;9 15 7; 6 8 15];
    w = [1;1;0.85];
     
    xp = x.*(x<=12)*w./sum((x<=12)*w,2);
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Le dernier sum est même inutile puisqu'il s'agit d'un calcul matriciel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = [5 7 9;10 9 7;15 9 8;9 15 7; 6 8 15];
    w = [1;1;0.85];
     
    xp = x.*(x<=12)*w./((x<=12)*w);

  19. #19
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par Merel Voir le message
    Le dernier sum est même inutile puisqu'il s'agit d'un calcul matriciel.
    C'était juste pour voir si tu suivais
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Le résultat de Print ne s'affiche pas...
    Par Red Bull dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2006, 18h56
  2. [requête]donner résultat que si + de n lignes...
    Par Titia765 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 10/06/2003, 12h02
  3. Réponses: 3
    Dernier message: 18/05/2003, 00h16
  4. Réponses: 4
    Dernier message: 28/09/2002, 00h00
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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