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 :

[plot] problème d'affichage


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2011
    Messages : 48
    Par défaut [plot] problème d'affichage
    Bonjour,
    le programme suivant ne m'affiche à la fin qu'un seul point alors que je veux en afficher n=5:
    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
     
    clc,
    clear all,
    close all, 
    %declaration des constantes
    g=9.8;
    Tsup=0.8;%temps de support
    z=0.8;%hauteur du centre de masse considérée constante pour un modele LIP
    a=10;
    b=1;
    Tc=sqrt(z/g);
    X0=0;
    Y0=0;
    pas=0.002;
    sx=[0.0 0.3 0.3 0.3 0];%longueur des pas
    sy=[0.2 0.2 0.2 0.2 0.2];%largeur des pas
    sx(6)=0;
    sy(6)=0;
    %Initialisation
    %Etape2:
    CI1=[-0.151,0.467];
     
    pxm0=0;
    pym0=0;
     
    pxmp=0;
    pymp=0;
     
    pxprevious=0;
    pyprevious=0;
    n=length(sx);
    px=zeros(1,n);
    py=zeros(1,n);
     
    pxm=zeros(1,n);%la position modifiée du pied selon x 
    pym=zeros(1,n);%la position modifiée du pied selon y
    xd=zeros(1,n);
    yd=zeros(1,n);
    vxd=zeros(1,n);
    vyd=zeros(1,n);
     
    x1=zeros(1,n);
    vx1=zeros(1,n);
    y1=zeros(1,n);
    vy1=zeros(1,n);
    %à verifier les deux equation prochaines.
    xbar=zeros(1,n);
    ybar=zeros(1,n);
    vxbar=zeros(1,n);
    vybar=zeros(1,n);
    t=0;
     
    n=5;
    %etape3:conditions initiales
    %integration de l'equation de la dynamique
    %selon x:
    x10=(CI1(1)-pxm0)*cosh(0/Tc)+Tc*CI1(2)*sinh(0/Tc)+pxm0;
    vx10=((CI1(1)-pxm0)/Tc)*sinh(0/Tc)+CI1(2)*cosh(0/Tc);
    %selon y:
    y10=(CI1(1)-pym0)*cosh(0/Tc)+Tc*CI1(2)*sinh(0/Tc)+pym0;
    vy10=((CI1(1)-pym0)/Tc)*sinh(0/Tc)+CI1(2)*cosh(0/Tc);
     
    xi=x10;
    yi=y10;
    vxi=vx10;
    vyi=vy10;
    C=cosh(Tsup/Tc);
    S=sinh(Tsup/Tc);
     
    %la primitive de marche initiale
    xbar0=sx(1)/2;
    ybar0=1*sy(1)/2;%(-1)^(r)ddans ce cas est egale à 1 car r=0;
     
    %Etape3:
    for r=1:n
        for t=t:pas:t+Tsup
        %selon x:
        x1=(xi-pxmp)*cosh(t/Tc)+Tc*vxi*sinh(t/Tc)+pxmp;%la valeure finale de la position x du pied (ou la solution selon x)
        vx1=((xi-pxmp)/Tc)*sinh(t/Tc)+vxi*cosh(t/Tc);%la valeure finale de la vitesse selon x du pied
        xi=x1;
        vxi=vx1;
        %selon y:
        y1=(yi-pymp)*cosh(t/Tc)+Tc*vyi*sinh(t/Tc)+pymp;
        vy1=((yi-pymp)/Tc)*sinh(t/Tc)+vyi*cosh(t/Tc);
        yi=y1;
        vyi=vy1;
        C=cosh(t/Tc);
        S=sinh(t/Tc);
        D=a*((C-1)^2)+b*(S/Tc)^2;
     
    %Etape6:les caracteristiques de la primitive de marche suivante 
    %Ajouter une condition
     
            xbar(r)=sx(r+1)/2;
            ybar(r)=(-1)^(r)*sy(r+1)/2;    
            vxbar(r)=(cosh(t/Tc)+1)/((Tc*sinh(t/Tc))*xbar(r));
            vybar(r)=(cosh(t/Tc)-1)/((Tc*sinh(t/Tc))*ybar(r));
     
     
    %Etape7:calcul de l'etat cible
            xd(r)=px(r)+xbar(r);
            vxd(r)=vxbar(r);
            yd(r)=py(r)+ybar(r);
            vyd(r)=vybar(r);
     
    %Etape8:calcul de la position modifiée du pied
    pxm(r)=-((a*C-1)/D)*(xd(r)-C*xi-Tc*S*vxi)-(b*S/Tc*D)*(vxd(r)-(S/Tc)*xi-C*vxd(r));
    pym(r)=-((a*C-1)/D)*(yd(r)-C*yi-Tc*S*vyi)-(b*S/Tc*D)*(vyd(r)-(S/Tc)*yi-C*vyd(r));
     
    pxmp=pxm(r);
    pymp=pym(r);
     
        end 
    hold on,
    plot(pxm,pym,'r+'), grid on; 
     
    end

  2. #2
    Membre expérimenté
    Profil pro
    Doctorant
    Inscrit en
    Mars 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 147
    Par défaut
    Tu devrais peut être vérifier que ce que tu veux tracer est bon.
    Enlève la boucle et vérifie les données une à une.

    Matersss

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Par défaut
    en fait tu traces bien 5 points, mais ils sont tous les 5 au même endroit en (0,0)

    ton code est faux, tu fais des divisions par 0 du coup t'as des NaN
    notamment ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            vxbar(r)=(cosh(t/Tc)+1)/((Tc*sinh(t/Tc))*xbar(r));
            vybar(r)=(cosh(t/Tc)-1)/((Tc*sinh(t/Tc))*ybar(r));
    à t = 0, ceci n'est pas très défini...

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2011
    Messages : 48
    Par défaut
    merci pour vos réponses .
    donc j'ai suivi vos conseils et j'ai modifié mon programme durant toute la nuit mais cette fois-ci il m'affiche que deux points avec des coordonnées énormes (10^6).
    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
     
    clc,
    clear all,
    close all, 
    %declaration des constantes
    g=9.8;
    Tsup=0.8;%temps de support
    z=0.8;%hauteur du centre de masse considérée constante pour un modele LIP
    a=10;
    b=1;
    Tc=sqrt(z/g);
    X0=0;
    Y0=0;
    pas=0.002;
    sx=[0.0 0.3 0.3 0.3 0];%longueur des pas
    sy=[0.2 0.2 0.2 0.2 0.2];%largeur des pas
    sx(6)=0;
    sy(6)=0;
    %Initialisation
    %Etape2:
    CI1=[-0.151,0.467];
     
    pxm0=0;
    pym0=0;
     
    pxmp=0;
    pymp=0;
     
    pxprevious=0;
    pyprevious=0;
    n=length(sx);
    px=zeros(1,n);
    py=zeros(1,n);
     
    pxm=zeros(1,n);%la position modifiée du pied selon x 
    pym=zeros(1,n);%la position modifiée du pied selon y
    xd=zeros(1,n);
    yd=zeros(1,n);
    vxd=zeros(1,n);
    vyd=zeros(1,n);
     
    x1=zeros(1,n);
    vx1=zeros(1,n);
    y1=zeros(1,n);
    vy1=zeros(1,n);
    %à verifier les deux equation prochaines.
    xbar=zeros(1,n);
    ybar=zeros(1,n);
    vxbar=zeros(1,n);
    vybar=zeros(1,n);
    t=0;
     
    n=5;
    %etape3:conditions initiales
    %integration de l'equation de la dynamique
    %selon x:
    x10=(CI1(1)-pxm0)*cosh(0/Tc)+Tc*CI1(2)*sinh(0/Tc)+pxm0;
    vx10=((CI1(1)-pxm0)/Tc)*sinh(0/Tc)+CI1(2)*cosh(0/Tc);
    %selon y:
    y10=(CI1(1)-pym0)*cosh(0/Tc)+Tc*CI1(2)*sinh(0/Tc)+pym0;
    vy10=((CI1(1)-pym0)/Tc)*sinh(0/Tc)+CI1(2)*cosh(0/Tc);
     
    xi=x10;
    yi=y10;
    vxi=vx10;
    vyi=vy10;
    C=cosh(Tsup/Tc);
    S=sinh(Tsup/Tc);
    r=1;
    %la primitive de marche initiale
    xbar0=sx(1)/2;
    ybar0=1*sy(1)/2;%(-1)^(r)ddans ce cas est egale à 1 car r=0;
     
    %Etape3:
    for r=1:n
        for t=Tsup:pas:t+Tsup
        %selon x:
        x1=(xi-pxmp)*cosh(t/Tc)+Tc*vxi*sinh(t/Tc)+pxmp;%la valeure finale de la position x du pied (ou la solution selon x)
        vx1=((xi-pxmp)/Tc)*sinh(t/Tc)+vxi*cosh(t/Tc);%la valeure finale de la vitesse selon x du pied
        xi=x1;
        vxi=vx1;
        %selon y:
        y1=(yi-pymp)*cosh(t/Tc)+Tc*vyi*sinh(t/Tc)+pymp;
        vy1=((yi-pymp)/Tc)*sinh(t/Tc)+vyi*cosh(t/Tc);
        yi=y1;
        vyi=vy1;
        C=cosh(t/Tc);
        S=sinh(t/Tc);
        D=a*((C-1)^2)+b*(S/Tc)^2;
     
    %Etape6:les caracteristiques de la primitive de marche suivante 
    %Ajouter une condition
     
            xbar(r)=sx(r+1)/2;
            ybar(r)=(-1)^(r)*sy(r+1)/2;    
            vxbar(r)=(cosh(t/Tc)+1)/((Tc*sinh(t/Tc))*xbar(r));
            vybar(r)=(cosh(t/Tc)-1)/((Tc*sinh(t/Tc))*ybar(r));
     
     
    %Etape7:calcul de l'etat cible
            xd(r)=px(r)+xbar(r);
            vxd(r)=vxbar(r);
            yd(r)=py(r)+ybar(r);
            vyd(r)=vybar(r);
     
    %Etape8:calcul de la position modifiée du pied
    pxm(r)=-((a*C-1)/D)*(xd(r)-C*xi-Tc*S*vxi)-(b*S/Tc*D)*(vxd(r)-(S/Tc)*xi-C*vxd(r));
    pym(r)=-((a*C-1)/D)*(yd(r)-C*yi-Tc*S*vyi)-(b*S/Tc*D)*(vyd(r)-(S/Tc)*yi-C*vyd(r));
    pxmp=pxm(r);
    pymp=pym(r);
    end 
    figure(1)
    hold on    
    plot(pxm,pym,'r+'), grid on;  
    hold off,

  5. #5
    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 remarque de Dombrai est toujours valide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    pxm =
     
      1.0e+006 *
     
        7.2184       NaN       NaN       NaN       NaN         0
     
    pym =
     
      1.0e+006 *
     
       -8.8564       NaN       NaN       NaN       NaN         0

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2011
    Messages : 48
    Par défaut
    je crois que maintenant le problème est dans la fonction plot :
    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
     
    clc,
    clear all,
    close all, 
    %declaration des constantes
    g=9.8;
    Tsup=0.8;%temps de support
    z=0.8;%hauteur du centre de masse considérée constante pour un modele LIP
    a=10;
    b=1;
    Tc=sqrt(z/g);
    X0=0;
    Y0=0;
    pas=0.02;
    sx=[0.0 0.3 0.3 0.3 0];%longueur des pas
    sy=[0.2 0.2 0.2 0.2 0.2];%largeur des pas
    sx(6)=0;
    sy(6)=0;
    %Initialisation
    %Etape2:
    CI1=[-0.151,0.467];
     
    pxm0=0;
    pym0=0;
     
    pxmp=0;
    pymp=0;
     
    pxprevious=0;
    pyprevious=0;
    n=length(sx);
    px=zeros(1,n);
    py=zeros(1,n);
     
    xi=zeros(1,n);
    yi=zeros(1,n);
    vxi=zeros(1,n);
    vyi=zeros(1,n);
     
    pxm=zeros(1,n);%la position modifiée du pied selon x 
    pym=zeros(1,n);%la position modifiée du pied selon y
    xd=zeros(1,n);
    yd=zeros(1,n);
    vxd=zeros(1,n);
    vyd=zeros(1,n);
     
    x1=zeros(1,n);
    vx1=zeros(1,n);
    y1=zeros(1,n);
    vy1=zeros(1,n);
    %à verifier les deux equation prochaines.
    xbar=zeros(1,n);
    ybar=zeros(1,n);
    vxbar=zeros(1,n);
    vybar=zeros(1,n);
    v=Tsup;
     
    n=5;
    %etape3:conditions initiales
    %integration de l'equation de la dynamique
    %selon x:
    x10=(CI1(1)-pxm0)*cosh(0/Tc)+Tc*CI1(2)*sinh(0/Tc)+pxm0;
    vx10=((CI1(1)-pxm0)/Tc)*sinh(0/Tc)+CI1(2)*cosh(0/Tc);
    %selon y:
    y10=(CI1(1)-pym0)*cosh(0/Tc)+Tc*CI1(2)*sinh(0/Tc)+pym0;
    vy10=((CI1(1)-pym0)/Tc)*sinh(0/Tc)+CI1(2)*cosh(0/Tc);
    xip=x10;
    yip=y10;
    vxip=vx10;
    vyip=vy10;
    v=Tsup;
    for r=1:5
      for t=v:pas:v+Tsup  
          if 1<r<=n
        %selon x:
        x1=(xip-pxmp)*cosh(t/Tc)+Tc*vxip*sinh(t/Tc)+pxmp;%la valeure finale de la position x du pied (ou la solution selon x)
        vx1=((xip-pxmp)/Tc)*sinh(t/Tc)+vxip*cosh(t/Tc);%la valeure finale de la vitesse selon x du pied
        xip=x1;
        vxip=vx1;
        %selon y:
        y1=(yip-pymp)*cosh(t/Tc)+Tc*vyip*sinh(t/Tc)+pymp;
        vy1=((yip-pymp)/Tc)*sinh(t/Tc)+vyip*cosh(t/Tc);
        yip=y1;
        vyip=vy1;
          end 
      end
      v=t;
     %Etape5:
            px(r)=pxprevious+sx(r);
            py(r)=pyprevious-((-1)^r)*sy(r);%si on choisit le pied gauche comme point de départ de la marche on remplace -(-1)^n par +(-1)^n
            pxprevious=px(r);
            pyprevious=py(r);
     
    %Etape6:les caracteristiques de la primitive de marche suivante 
    %Ajouter une condition
     
            xbar(r)=sx(r+1)/2;
            ybar(r)=(-1)^(r)*sy(r+1)/2;    
            vxbar(r)=(cosh(Tsup/Tc)+1)/((Tc*sinh(Tsup/Tc))*xbar(r));
            vybar(r)=(cosh(Tsup/Tc)-1)/((Tc*sinh(Tsup/Tc))*ybar(r));
     
    %Etape7:calcul de l'etat cible
            xd(r)=px(r)+xbar(r);
            vxd(r)=vxbar(r);
            yd(r)=py(r)+ybar(r);
            vyd(r)=vybar(r);
            C=cosh(Tsup/Tc);
            S=sinh(Tsup/Tc);
            D=a*((C-1)^2)+b*(S/Tc)^2;     
     
    %Etape8:calcul de la position modifiée du pied
    pxm(r)=-((a*C-1)/D)*(xd(r)-C*xip-Tc*S*vxip)-(b*S/Tc*D)*(vxd(r)-(S/Tc)*xip-C*vxd(r));
    pym(r)=-((a*C-1)/D)*(yd(r)-C*yip-Tc*S*vyip)-(b*S/Tc*D)*(vyd(r)-(S/Tc)*yip-C*vyd(r));
    pxmp=pxm(r);
    pymp=pym(r);
    %dessiner la figure
    figure(1),
    hold on,
    plot(pxm,pym,'r+'), grid on;  
    hold off,
     
    end

  7. #7
    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
    Citation Envoyé par lisenette Voir le message
    je crois que maintenant le problème est dans la fonction plot :
    Pas plus qu'avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    pxm =
     
      1.0e+209 *
     
       -0.0000    1.4455      -Inf       NaN       NaN         0
     
    pym =
     
      1.0e+209 *
     
       -0.0000    1.4455      -Inf       NaN       NaN         0

  8. #8
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2011
    Messages : 48
    Par défaut
    Citation Envoyé par Dombrai Voir le message
    en fait tu traces bien 5 points, mais ils sont tous les 5 au même endroit en (0,0)

    ton code est faux, tu fais des divisions par 0 du coup t'as des NaN
    notamment ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            vxbar(r)=(cosh(t/Tc)+1)/((Tc*sinh(t/Tc))*xbar(r));
            vybar(r)=(cosh(t/Tc)-1)/((Tc*sinh(t/Tc))*ybar(r));
    à t = 0, ceci n'est pas très défini...
    maintenant j'ai remplacé t dans ces expressions par Tsup donc cette remarque n'est plus valide.

Discussions similaires

  1. [VTK] Problème d'affichage scatter plot 2D
    Par martin9_36 dans le forum C++
    Réponses: 0
    Dernier message: 01/02/2015, 20h11
  2. [Kylix] problème d'affichage
    Par scalvi dans le forum EDI
    Réponses: 1
    Dernier message: 18/06/2003, 10h07
  3. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  4. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

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