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 :

Ecriture d'une boucle et conservation/restitution des résultats.


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 77
    Points : 8
    Points
    8
    Par défaut Ecriture d'une boucle et conservation/restitution des résultats.
    bonsoir,
    Je suis un Cnamien qui commence à apprendre à utiliser MATLAB dans le cadre des cours et j'ai un TP à réaliser où l'on me demande d'après un vecteur de valeurs positives et négatives d'ajouter "1" à toutes les valeurs négatives.

    voici le programme que j'ai écrit:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
              u =[1 0 -2 -3 0 -5 2];                %vecteur de base
               for x = u                                   %pour x = u
                       if x < 0                             % si x négatif
                              u = x + 1;                  % on ajoute 1 a x 
                       else
                              u = x;                         %sinon on y touche pas
                       end
                       u                                       %on affiche le résultat
               end
    Le soucis est que le résultat s'affiche bien mais sous forme x= 1,0,-1.... en sautant des lignes a chaque fois ce qui est normal vu mon code, j'aimerais donc pouvoir stocker au fur et à mesure les valeurs de u successive pour les ressortir sous le format d'origine u=[........].
    Et ca fait 2 jours que je suis dessus entre l'aide de MATLAB et ce forum sans parvenir à trouver clairement ou à comprendre des exemples se rapprochant, je ne pige pas le cell array et j'ai du mal a faire un parallèle avec le language C ou j'aurai mis une boucle incrémentale... bref aidez moi svp!

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Ecriture d'une boucle et conservation/restitution des résultats.
    Bonjour,

    Une possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    u =[1 0 -2 -3 0 -5 2]; %vecteur de base
    for x = 1:length(u) %pour x = u
        if u(x) < 0 % si x négatif
            u(x) = u(x) + 1; % on ajoute 1 a x
        end
    end
    u
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    u =[1 0 -2 -3 0 -5 2]; %vecteur de base
    u(find(u<0))=u(find(u<0))+1
    ou (comme l'a indiqué Jérome dans une discussion ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    u =[1 0 -2 -3 0 -5 2]; %vecteur de base
     u=bsxfun(@plus, u, u<0)

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 165
    Points
    53 165
    Par défaut
    On peut se passer de find dans le code ci-dessous :
    Citation Envoyé par phryte Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    u(find(u<0))=u(find(u<0))+1
    Voir la FAQ : Qu'est-ce que l'indexage logique ?

    bsxfun n'est pas vraiment utile ici. Il y a une solution encore plus simple. Un indice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> u = [1 0 -2 -3 0 -5 2]
     
    u =
     
         1     0    -2    -3     0    -5     2
     
    >> u<0
     
    ans =
     
         0     0     1     1     0     1     0
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, 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)

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour,

    Bien vu Jerome :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     u =[1 0 -2 -3 0 -5 2]; %vecteur de base
     u+(u<0)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 77
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup ça fonctionne parfaitement avec :

    Code Matlab : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    u =[1 0 -2 -3 0 -5 2]; %vecteur de base
    for x = 1:length(u) %pour x = u
        if u(x) < 0 % si x négatif
            u(x) = u(x) + 1; % on ajoute 1 a x
        end
    end
    u

    vous me sauvez la vie !

    en revanche il est hors de question que vous me mâchiez le boulot bien évidement mais il y a t'il une fonction pour résoudre des systèmes d'équations à plusieurs inconnues de manière matricielle, ou dois-je en écrire une (au cas où ca serait un piège du prof)

    Je me suis déjà attelé à la tâche mais j'essai déjà d'en résoudre une à la main pour voir comment j'écris ca derrière, et après 15 ans sans en avoir fait...

Discussions similaires

  1. Une boucle horizontale à décaler sur des colonnes
    Par Philippe87420 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/04/2014, 17h01
  2. Ecriture d'une boucle sur plusieurs schémas
    Par marieo dans le forum SQL
    Réponses: 4
    Dernier message: 28/01/2014, 17h33
  3. [XL-2003] Probleme dans l ecriture d une boucle
    Par cecyl dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/06/2010, 08h36
  4. Réponses: 12
    Dernier message: 22/04/2009, 13h02
  5. faire une boucle for..next sur des textbox
    Par Actarusdu60 dans le forum VB.NET
    Réponses: 1
    Dernier message: 28/11/2008, 21h51

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