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 :

retirer elements dune matrice


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut retirer elements dune matrice
    Bonjour,
    je dois faire une fonction qui retire les elements dun vecteur divisible par un diviseur donner... voici lenonce
    parametres dentree: x,a,b, c
    Je dois retirer les elements du vecteur x divisible soit par a b ou c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    y = retrait(x,a,b,c).
    Voici ce que jai fait mais aucun resultat...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function y=retrait(x,a,b,c)
    %x=vecteur initial
    %a,b,c= diviseurs de x
    %y=vecteur resultant apres retrait des nbrs divisibles par a,b ou c
    n=length(x);
    for i=1:n
    if rem(x(i),a)==0 || rem(x(i),b)==0 || rem(x(i),c)==0
    x(i)=[];
    end
    end
    y=x;
    Merci !!!

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

    Ton code présente un problème: lorsqu'il y a effectivement des valeurs divisibles par a, b ou c, la taille de ton vecteur diminue, et de ce fait la boucle for ne peux plus aller jusqu'à n (longueur initiale de ton vecteur) et tu obtiens une erreur "index out of bounds".

    Pour remédier à ce problème, tu peux passer soit par une boucle while
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    i = 1;
    while i<=length(x)
        if rem(x(i),a)==0 || rem(x(i),b)==0 || rem(x(i),c)==0
            x(i)=[];
        else
            i = i+1;
        end
    end
    Soit juste remplacer ta ligne for par
    Je te propose aussi un code optimisé utilisant l'indexage logique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x(~rem(x,a) | ~rem(x,b) | ~rem(x,c)) = [];

  3. #3
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut
    ou (équivalent à méthode d'indexage logique de winjerome)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    y = x(rem(x,a) & rem(x,b) & rem(x,c));

Discussions similaires

  1. Mise à jour d’une matrice sous Word
    Par diarise dans le forum Word
    Réponses: 10
    Dernier message: 09/04/2010, 17h44
  2. Sommer des sous-elements de matrice
    Par smikar dans le forum MATLAB
    Réponses: 4
    Dernier message: 09/03/2010, 16h21
  3. [DOM ] retirer element d'une liste php et dom
    Par Tikenjahfakouli dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/07/2008, 15h43
  4. Réponses: 1
    Dernier message: 08/07/2008, 10h37
  5. Réponses: 2
    Dernier message: 06/07/2007, 19h03

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