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 :

Problème pour inverser des lignes d'une matrice


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut Problème pour inverser des lignes d'une matrice
    Vous ne savez pas comment faire en sorte de ne pas tomber sur la même ligne quand on veut inverser 2 lignes ? je vous montre le code et je vous détaille ce qui ne va pas ...
    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
    a=[7 2 8 4 6 5 3 9 1;4 3 1 9 8 7 5 2 6;6 5 9 1 2 3 4 8 7;1 8 5 2 7 4 6 3 9;9 6 2 3 5 8 1 7 4;3 4 7 6 9 1 8 5 2 ;5 7 6 8 4 2 9 1 3;2 1 4 5 3 9 7 6 8;8 9 3 7 1 6 2 4 5]
    x=randi(9,1,1);
    disp(x);
    if x<4
        j=(randi(3,1,1));
        x~=j;
                aux=a(x,:);
            a(x,:)=a(j,:);
            a(j,:)=aux;
    elseif x>3 && x<7
            j=(randi(3,1,1)+3);
            x~=j;
                   aux=a(x,:);
            a(x,:)=a(j,:);
            a(j,:)=aux;
    else x>6
            j=(randi(3,1,1)+6);
            x~=j;
                    aux=a(x,:);
            a(x,:)=a(j,:);
            a(j,:)=aux;    
    end
    disp(a);
    disp(j);
    disp(x);
    Donc des fois, le j et le x sont les mêmes donc du coup, il n'y a pas d'inversions de lignes. Et malgré le fait que j'ai mis x~=j, et bien j'ai toujours ce problème ...

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Quand tu fais :
    il calcule x~=j et il trouve vrai ou faux et puis c'est tout.

    Il faut donc mettre une condition IF.

    Tu devrais d'ailleurs revoir le fonctionnement des IF/ELSEIF car ceci :
    Fait :
    Alors que je pense que tu souhaites faire :
    ce qui n'est pas la même chose

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Ouais mais ce n'est pas une condition enfin je veux dire il faut que x et j soient différents, pas que si x est différent de j alors on fait ça ... Puis pour le x>6 c'est bon puisque en fait je dis que si x>6 alors il se trouve dans le 3ème secteur et donc il fait ceci ... Mon programme marche je l'ai testé mais il y a juste ce petit problème auquel je n'arrive pas à trouver une solution même si c'est tout bête je pense. Mais je ne comprend pas ton idée de if pour si x différent de j puisque ce n'est pas une condition il faut que ce soit différent.

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    OK pour le x différent de j je vois mieux.
    Mais bon tu as un vrai problème de réflexion logique en fait....

    Dans ce cas tu dois faire, algorithmiquement, quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x=rand
    j=rand
    tant que j égal x
        j=rand
    Puis pour le x>6 c'est bon puisque en fait je dis que si x>6 alors il se trouve dans le 3ème secteur et donc il fait ceci
    Oui cela fonctionne car en fait tu es dans le cas x n'est pas inférieur à 4 et x n'est pas entre 4 et 6 donc x est forcément supérieur à 6 dans ton cas.
    Mais alors la ligne (x>6) ne sert à rien et tu devrais simplement écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    else
            j=(randi(3,1,1)+6);
            x~=j;
                    aux=a(x,:);
            a(x,:)=a(j,:);
            a(j,:)=aux;    
    end
    Sinon tu remarqueras que tu écris 3 fois le même code.

    Amélioration (sans l'intégration du petit algo au-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if x<4
       k=1;
    elseif x>3 && x<7
       k=3;
    else
       k=6;
    end
    j=(randi(3,1,k));
    aux=a(x,:);
    a(x,:)=a(j,:);
    a(j,:)=aux;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Oui je vois mais comment se traduit le "tant que" ? par exemple pour un cas j'ai mis cette condition mais ca ne fonctionne et je sais que c'est parce que il est toujours possible que j soit égal à x si je met comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if x<4
        j=(randi(3,1,1));
        if j==x,
                j=randi(3,1,1);
        end
            aux=a(x,:);
            a(x,:)=a(j,:);
            a(j,:)=aux;

  6. #6
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    "tant que" en anglais se dit WHILE

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Cela diminue fortement le nombre de possibilités de tomebr sur le même chiffre ( je l'ai testé et genre je suis tombé toutes les 20 fois sur le meme chiffre au lieu de toutes les 3-4 fois ) Mais bon j'aimerais bien résoudre véritablement ce problème comme pour mon problème pour mettre des zéros à la place de chiffres dans ma matrice ( il me semble que c'est un autre sujet de discussion que j'ai créé)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Merci Caro-LIne j'ai réussi grâce à toi, j'imagine que pour mon problème de cacher des variables dans ma matrice c'est le même système de while.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if x<4
        j=(randi(3,1,1));
        while j==x,
                     j=(randi(3,1,1));
            end
                aux=a(x,:);
            a(x,:)=a(j,:);
            a(j,:)=aux;

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/05/2008, 15h19
  2. [1.x] problème pour reprendre des données dans une DB
    Par phoelis1 dans le forum Symfony
    Réponses: 4
    Dernier message: 02/04/2008, 11h54
  3. Supprimer des lignes dans une matrice
    Par Ptinéwik dans le forum MATLAB
    Réponses: 7
    Dernier message: 30/01/2008, 13h55
  4. problème pour supprimer des lignes d'un fichier
    Par NicoO_O dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 17/01/2008, 07h23
  5. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13

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