Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > MATLAB
MATLAB Forum d'entraide sur MATLAB. Avant de poster : FAQs MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/12/2012, 18h05   #1
etudiante-m
 
Inscription : février 2012
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 82
Points : -3
Points : -3
Par défaut extraction des séries de 1.

bonsoir,
pour un vecteur de 16 éléments, je veux extraire les nombres de trailings ones(0=<t1=<3), puis on prend le maximum.

exemple1: si vect=[2,3,1,-1,5,6,4,1,-1,1,2,-3,5,9,5]
resultat t1=3

exemple2: si vect=[2,3,1,5,6,4,1,-1,2,-3,5,1,9,5,6,2]
resultat t1=2

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 for l=1:16 
            if( vect(1,l)==1 || vect(1,l)==(-1))   ;
                
                 if ( vect(1,l+1)==1 || vect(1,l+1)==(-1));
                      t1=2;
                  elseif (vect(1,l+1)~=1|| vect(1,l+1)~=(-1));                                                    t1=1;
                 elseif ((vect(1,l+1)==1) && (vect(1,l+2)==1))||( vect(1,l+1)==(-1) && vect(1,l+2)==(-1))||( vect(1,l+1)==(-1) && vect(1,l+2)==1)||( vect(1,l+1)==1 && vect(1,l+2)==(-1));
                     t1=3;
 
            
                  end
            end
      end     
         t1
comment ce code sera fonctionnel?

merci pour votre aide.
etudiante-m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 11h34   #2
ToTo13
Modérateur
 
Avatar de ToTo13
 
Homme Guillaume
Ingénieur de Recherche
Inscription : janvier 2006
Messages : 4 788
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 34
Localisation : Etats-Unis

Informations professionnelles :
Activité : Ingénieur de Recherche
Secteur : Santé

Informations forums :
Inscription : janvier 2006
Messages : 4 788
Points : 7 020
Points : 7 020
Ca semble faire beaucoup de test.
Pourquoi ne pas mettre un petite boucle while dans ta boucle for qui lorsque tu trouve un 1 va parcourir la chaine.
Si la chaine est a une taille comme tu le souhaites et qu'elle est maximale, tu sauvegarde la taille et la position.
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS.
- Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
- ton poste tu dois marquer quand la bonne réponse tu as obtenu.
ToTo13 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2012, 00h07   #3
magelan
Modérateur
 
Inscription : août 2007
Messages : 4 095
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 4 095
Points : 5 429
Points : 5 429
Bonjour,

tu peux aussi t'inspirer de cette contribution : Taille et nombre d'éléments non nuls dans un vecteur
__________________
Pour une bonne utilisation des balises code c'est ici!
Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


La nature est un livre écrit en langage mathématique. Galilée.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 10h55   #4
etudiante-m
 
Inscription : février 2012
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 82
Points : -3
Points : -3
bonjour,

mais pour notre cas le vecteur est composé des nombres différents de 1, pour notre algorithme on veut extraire seulement les vecteurs de 1.

est ce qu'il existe une fonction dans matlab qui faire extraire les 1successives d'un vecteur?
merci
etudiante-m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 19h05   #5
magelan
Modérateur
 
Inscription : août 2007
Messages : 4 095
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 4 095
Points : 5 429
Points : 5 429
Pour appliquer le code dans le lien ci-dessus, il suffit de mettre les valeurs différentes de 1 et -1 à 0 et de mettre les -1 à 1.

Maintenant tu peux aussi essayer la méthode proposé par ToTo13.
__________________
Pour une bonne utilisation des balises code c'est ici!
Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


La nature est un livre écrit en langage mathématique. Galilée.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 20h04   #6
etudiante-m
 
Inscription : février 2012
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 82
Points : -3
Points : -3
mais comment changer les différents de 1 et -1 à0 ???
etudiante-m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 09h08   #7
le fab
Modérateur
 
Avatar de le fab
 
Homme Fabien Grand-Perret
Développeur informatique
Inscription : mars 2005
Messages : 467
Détails du profil
Informations personnelles :
Nom : Homme Fabien Grand-Perret
Âge : 37
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : mars 2005
Messages : 467
Points : 805
Points : 805
le fab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 20h09   #8
etudiante-m
 
Inscription : février 2012
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 82
Points : -3
Points : -3
merci bcp
etudiante-m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 11h07   #9
etudiante-m
 
Inscription : février 2012
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 82
Points : -3
Points : -3
bonjour,

pour le lien de magelan :Taille et nombre d'éléments non nuls dans un vecteur
est ce que on peut extraiRe la chaine composée de 1 seulement de ce vecteur?
etudiante-m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 11h17   #10
FLB
Modérateur
 
Avatar de FLB
 
Homme Florent
Ing. Aérospatiale
Inscription : juin 2003
Messages : 572
Détails du profil
Informations personnelles :
Nom : Homme Florent
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ing. Aérospatiale
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2003
Messages : 572
Points : 910
Points : 910
Tu veux un tableau de 1?
Si tu veux retrouver ta chaine de 1 et -1 d'origine :
Code :
vect(find(vin))%vin est le tableau de 0 et 1
__________________
Bientôt 10 ans sur DVP!
Matlab 7.9.1.705 R2009b SP1 | XP SP3
Pas de question technique par MP, Merci
FLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 11h35   #11
etudiante-m
 
Inscription : février 2012
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 82
Points : -3
Points : -3
pour notre programme , j'ai besoin seulement de la chaine de 1 pour le maximum de snz.donc comment peut on extraire seulement la chaine qui correspond à max(snz).

merci tu m'as bcp aidé.
etudiante-m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 13h56   #12
le fab
Modérateur
 
Avatar de le fab
 
Homme Fabien Grand-Perret
Développeur informatique
Inscription : mars 2005
Messages : 467
Détails du profil
Informations personnelles :
Nom : Homme Fabien Grand-Perret
Âge : 37
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : mars 2005
Messages : 467
Points : 805
Points : 805
Citation:
Envoyé par FLB Voir le message
Code :
vect(find(vin))%vin est le tableau de 0 et 1
ici find ne sert à rien, tu obtiendra la même chose en indexage logique :
Code :
vect(vin)%vin est le tableau de 0 et 1
le fab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 13h58   #13
le fab
Modérateur
 
Avatar de le fab
 
Homme Fabien Grand-Perret
Développeur informatique
Inscription : mars 2005
Messages : 467
Détails du profil
Informations personnelles :
Nom : Homme Fabien Grand-Perret
Âge : 37
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : mars 2005
Messages : 467
Points : 805
Points : 805
Citation:
Envoyé par etudiante-m Voir le message
pour notre programme , j'ai besoin seulement de la chaine de 1 pour le maximum de snz.donc comment peut on extraire seulement la chaine qui correspond à max(snz).
je comprend pas la question
le fab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 14h23   #14
Merel
Membre chevronné
 
Inscription : mars 2007
Messages : 614
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 614
Points : 700
Points : 700
Envoyer un message via MSN à Merel
Salut,

Tu peux bien sur n'avoir que la taille max de snz ainsi que la position du vecteur.

Voici ce que ca pourrait donner en reprenant ton exemple:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vect=[2,3,1,-1,5,6,4,1,-1,1,2,-3,5,9,5];

vect(vect==-1)=1;
% tous les éléments à -1 sont mis à 1

vect(vect~=1)=0;
% tous les éléments différents de 1 sont mis à 0

snz = diff(find(~[0 vect 0]))-1 

% Résultat que tu obtiens pour snz
%snz =
% Columns 1 through 8 
%  0     0     2     0     0     3     0     0
% Columns 9 through 11 
%    0     0     0

[a b]=max(snz)

%résultat
%a =
%   3
%b =
%     6
Tu obtiens bien ton max qui vaut 3 et accessoirement, la position dans le vecteur...
Merel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 15h09   #15
FLB
Modérateur
 
Avatar de FLB
 
Homme Florent
Ing. Aérospatiale
Inscription : juin 2003
Messages : 572
Détails du profil
Informations personnelles :
Nom : Homme Florent
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ing. Aérospatiale
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2003
Messages : 572
Points : 910
Points : 910
Pour compléter la réponse de Merel, si tu veux avoir ta suite de 1 et -1 la plus longue, tu l'obtiens en allant lire les indices b à a+b-1 compris :
Code :
vect(b+[0:a-1]) %reprendre le vecteur "vect" original
__________________
Bientôt 10 ans sur DVP!
Matlab 7.9.1.705 R2009b SP1 | XP SP3
Pas de question technique par MP, Merci
FLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2013, 10h14   #16
etudiante-m
 
Inscription : février 2012
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 82
Points : -3
Points : -3
désolé pour le retard, à cause de l'internet
merci bien pour vos réponses

pour l'exemple: vect=[2,3,1,-1,5,6,4,1,-1,1,2,-3,5,9,5]

dans ce cas: max(snz)=3
on veut le resultat final (extraction du vecteur qui correspond à 3): [1,-1,1].
etudiante-m est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/01/2013, 11h26   #17
etudiante-m
 
Inscription : février 2012
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 82
Points : -3
Points : -3
j'ai essayé avec : vect(b+[0:a-1])
mais j'ai pas obtenu le vecteur [1,-1,1].

votre aide svp.
etudiante-m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2013, 16h23   #18
Winjerome
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 5 167
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 25
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : septembre 2009
Messages : 5 167
Points : 12 617
Points : 12 617
Bonjour,

Si tu souhaites ré-obtenir tes -1 et 1, ce n'est pas une variable vect modifiée pour n'avoir que des 1 et 0 qu'il faut le faire
De plus ce n'est pas directement b qu'il faut prendre, mais idx(b), idx étant le résultat de find().
Code :
1
2
3
4
5
6
vect = [2,3,1,-1,5,6,4,1,-1,1,2,-3,5,9,5];
isNot1 = abs(vect) ~= 1;
idx = find([true isNot1 true]);
snz = diff(idx)-1 ;
[M pos] = max(snz);
vect(idx(pos)+(0:M-1))
__________________
Débutant en MATLAB ? Vous voulez faire une Interface Graphique ? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur ? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h21.


 
 
 
 
Partenaires

Hébergement Web