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 :

Soustraction à l'intérieur d'une matrice


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2012
    Messages : 38
    Points : 18
    Points
    18
    Par défaut Soustraction à l'intérieur d'une matrice
    Bonjour,

    j'ai chargé à l'aide de la fonction xlsread un fichier exel (2468 lignesx1 colonne). Pour débuter dans mon entreprise qui est de permettre de calculer la différence entre chaque nombre et son précédent, je teste comment faire déjà une soustraction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    x=xlsread('data.xlsx')
     
    [...]
     
    q=[x(3,1)-x(2,1)]
     
    q =
     
        0.1200
    Question, y a t-il un moyen d'appliquer ce genre d'opération automatiquement à l'ensemble du fichier ? (je ne demande pas le script, juste de quelle façon procéder).

    Peut être créer une matrice décalée et ensuite appliquer une opération e soustraction entre les matrices ? Ce ne serait pas trop lourd comme procédure ?

    EDIT :

    pour tenir au courant de mes avancées :

    Reste plus qu'à soustraire les deux en respectant les dimensions de matrices

    Merci de me dire si je suis dans l'erreur.

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

    Les crochets q = [h(3,1)-h(2,1)] sont inutiles : il ne servent qu'à effectuer une concaténation.

    Il existe en effet la solution de soustraire deux tableaux décalés, mais il existe aussi la fonction diff qui fait très bien cela

    [EDIT] Pas d'erreur, tu étais sur le bon chemin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d = x(2:end,1) - x(1:end-1,1)
    La partie en rouge étant optionnelle pour un simple vecteur colonne.
    Dernière modification par Invité ; 24/07/2012 à 00h36.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2012
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Pourquoi faire simple quand on peut faire compliqué

    Merci

    Je vais quand même essayer de tenter la technique des matrices décalées, ne serait ce que pour mieux apprendre à programmer.

    Je ne ferme pas le topic, car j'aurai certainement d'autres questions dans le même genre, cela évitera de créer un topic à chaque fois (avec la permission des modos évidemment).

    EDIT : Merci pour la méthode. Je ne vais pas te cacher que je ne pensais pas qu'on pouvait "régresser" une matrice sur elle même. Je pensais qu'il fallait obligatoirement en créer une deuxième.

    Bonne nuit !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2012
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Bonsoir,

    je souhaiterais maintenant appliquer une formule à l'ensemble de la matrice (appelée x). Par exemple:

     Numligne      A              B
    -----------------------------------------
              1  |    34       |  = 3*A1
              2  |    67       |  = 3*A2
              3  |    12       |  = 3*A3
              4  |    35       |  = 3*A4
    Cela retournera une nouvelle matrice à une colonne, en l’occurrence correspondant à celle de B.

    J'ai fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=1:end
        z=3*i
    end
    Merci de ne pas se moquer

    Mais évidemment ça ne fonctionne pas.

    EDIT : Au final, j'ai tenté cela

    Visiblement ça fonctionne, est ce bon ?

    Merci d'avance.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Si j'ai bien compris, tu disposes au début de x :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = [1 34
         2 67
         3 12
         4 35]
    ?
    Alors pour commencer, la syntaxe for i=1:end n'est pas bonne. Le mot clé end ne peut pas être utilisé comme cela. Il n'a sa place que pour délimiter la fin des instructions for/while/switch/try/function ou en tant qu'indice (de fin) d'un tableau. Or ici il est tout seul.
    Ensuite, l'instruction z=3*i n'utilise pas le contenu de ta variable x, et tu stockes le résultat dans un simple scalaire que tu écrases à chaque itération.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=1:size(x,1) % taille de la première dimension de x
        z(i) = 3*x(i,1);
    end
    Ici, il n'y a que 4 valeurs, ce n'est donc pas utile, mais je te conseille de regarder ce topic de la FAQ.

    Ton deuxième code d=x(1:4,1)*3 est bon
    Une question : et si x possède une taille variable ?

Discussions similaires

  1. Tableau/Matrice à l'intérieure d'une liste.
    Par haigwepa dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 14/01/2009, 16h03
  2. Réponses: 9
    Dernier message: 19/09/2008, 08h54
  3. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52
  4. Réponses: 6
    Dernier message: 03/03/2004, 14h31
  5. Déclarer une matrice
    Par joy dans le forum C
    Réponses: 7
    Dernier message: 09/12/2002, 00h42

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