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 dans boucle avec matrice et vecteur


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut Problème dans boucle avec matrice et vecteur
    Bonjour,

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    affiche=zeros(20,4); affiche(:,1)=1:20;affiche(:,2)=1;
    for k=1:N
        reg=regionprops(L{k},'Centroid'); 
        affiche(:,2*k+1:2*k+2)=cat(1, reg.Centroid); % Merci à Dut en passant
    end
    for k=1:N
        j1=2*k+1;    x(:,j1)=affiche(:,j1);
    end
    Affiche est une matrice de 20 lignes et 2*k+2 colonnes (ici k=3):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    affiche =
     
        1.0000    1.0000   50.2185  328.7130   49.5573  329.0815
        ...         ...       ...        ...        ...      ... 
       20.0000    1.0000  617.0956   34.4563  617.8324   34.2253
    Je souhaiterais récupérer les colonnes d'indices impaires en vecteur xk sachant que je n'utilise pas les 2 1ères colonnes. Les colonnes d'indices paires correspondant à yk mais là le problème est le même!

    Donc, lil me renvoie une matrice pour x que je veux vecteur ...?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x =
             0         0   50.2185         0   49.5573
            ...        ...    ...         ...     ...
             0         0  617.0956         0  617.8324
    En fait, je souhaiterais récupérer les N vecteurs x et les N vecteurs y (qui correspondent aux colonnes k>3 de ma matrice 'affiche' dans le but de calculer une distance car x et y sont des coordonnées!

    Merci de vos conseils

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance en conception mécanique et prototypage
    Inscrit en
    novembre 2006
    Messages
    20 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance en conception mécanique et prototypage

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 178
    Points : 54 328
    Points
    54 328
    Par défaut
    une petite lecture préalable : Introduction à la gestion des matrices
    Ingénieur indépendant en conception mécanique et prototypage :
    • conception mécanique 3D (Autodesk Fusion 360)
    • impression 3D (Ultimaker)
    • développement informatique (Python, MATLAB, C)
    • programmation de microcontrôleur (Microchip PIC, 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)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    Je l'ai lu et plus d'une fois, j'ai même penser à utiliser la fonction reshape mais je ne pense pas que pour mon problème elle m'aide grandement.

    Peut-être que je me trompe : je ne suis pas une experte, en fait je fais comme avec Matlab : du pas à pas pour avancer dans mon programme (et mes idées aussi d'ailleurs)

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance en conception mécanique et prototypage
    Inscrit en
    novembre 2006
    Messages
    20 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance en conception mécanique et prototypage

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 178
    Points : 54 328
    Points
    54 328
    Par défaut
    Essaie déjà ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    affiche = [1.0000    1.0000   50.2185  328.7130   49.5573  329.0815 
       20.0000    1.0000  617.0956   34.4563  617.8324   34.2253]
     
    x=affiche(:,3:2:end)
     
    y=affiche(:,4:2:end)
    Ingénieur indépendant en conception mécanique et prototypage :
    • conception mécanique 3D (Autodesk Fusion 360)
    • impression 3D (Ultimaker)
    • développement informatique (Python, MATLAB, C)
    • programmation de microcontrôleur (Microchip PIC, 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)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    j'essaye de mettre ça dans mon programme alors!

    Merci et je reviens ici si je n'y arrive pas !

    Par contre, je ne pensais pas qu'on pouvait faire i:pas:end comme ça dans la matrice, mais un test ne m'aurait rien couté merci beaucoup de ton aide!

    Et en plus je ne fais pas de boucle ça c'est cool mais en fait j'étais persuadée que j'avais besoin d'une boucle !

  6. #6
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2007
    Messages : 2 978
    Points : 5 157
    Points
    5 157
    Par défaut
    Salut !

    Pourquoi ne fais-tu pas deux matrices distinctes, l'une avec les colonnes impaires et l'autre avec les colonnes paires, vu que, sur la base de ton exemple, elles semblent contenir des données de nature différente?

    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    En fait avec les lignes données par Dut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x=affiche(:,3:2:end)
    y=affiche(:,4:2:end)
    , mon problème est résolu

    Par contre, je souhaiterais savoir comment faire pour ne pas avoir ce problème de 1ères lignes que j'ai eu car j'ai à nouveau le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    xs=zeros(NbObjets{1},1);
    ys=zeros(NbObjets{1},1);
    for k=1:N-1
        xs=[xs x(:,k+1)-x(:,k)];
        ys=[ys y(:,k+1)-y(:,k)];
    end
    et pour xs il me renvoie la matrice que je veux sauf que j'ai en plus une ligne de zéros (qui correspond à mon initialisation mais sans ça, il ne peut fonctionner)... Donc si quelqu'un peut m'expliquer comment m'y prendre autrement, je suis preneuse

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance en conception mécanique et prototypage
    Inscrit en
    novembre 2006
    Messages
    20 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance en conception mécanique et prototypage

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 178
    Points : 54 328
    Points
    54 328
    Par défaut
    Tu dois initialiser xs et ys comme des vecteurs vides :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    xs=[];
    ys=[];
    for k=1:N-1
        xs=[xs x(:,k+1)-x(:,k)];
        ys=[ys y(:,k+1)-y(:,k)];
    end
    Ou alors faire la préallocation de mémoire pour xs et ys et utiliser l'indexage dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    xs=zeros(<Taille finale de xs>);
    % Si j'ai tout suivi  : xs=zeros(size(x,1),N-1);
    ys=zeros(<Taille finale de ys>);
    % Si j'ai tout suivi  : ys=zeros(size(y,1),N-1);
     
    for k=1:N-1
        xs(:,k)=x(:,k+1)-x(:,k);
        ys(:,k)=y(:,k+1)-y(:,k);
    end
    C'est l'idée
    Ingénieur indépendant en conception mécanique et prototypage :
    • conception mécanique 3D (Autodesk Fusion 360)
    • impression 3D (Ultimaker)
    • développement informatique (Python, MATLAB, C)
    • programmation de microcontrôleur (Microchip PIC, 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)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    MERCI!

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance en conception mécanique et prototypage
    Inscrit en
    novembre 2006
    Messages
    20 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance en conception mécanique et prototypage

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 178
    Points : 54 328
    Points
    54 328
    Par défaut
    Donc maintenant que tu as compris, tu peux remplacer directement la boucle FOR-END par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    xs=diff(x,[],2)
    ys=diff(y,[],2)
    Ingénieur indépendant en conception mécanique et prototypage :
    • conception mécanique 3D (Autodesk Fusion 360)
    • impression 3D (Ultimaker)
    • développement informatique (Python, MATLAB, C)
    • programmation de microcontrôleur (Microchip PIC, 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)

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

Discussions similaires

  1. Boucle avec matrices dans un script de fonction
    Par Emreh dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/06/2015, 18h36
  2. Problème dans requête avec la fonction Right
    Par Mariboo dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/08/2006, 11h27
  3. problème dans boucle for de lecture de fichier ini
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 06/07/2006, 10h31
  4. Problème dans Xpath avec Xerces ou Xalan mais pas XMLSpy
    Par Superpoisson dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 23/09/2005, 15h29
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 19h02

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