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 :

Calcul d'une matrice dans une boucle for


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Calcul d'une matrice dans une boucle for
    Bonjour,

    J'ai un petit souci pour calculer les éléments d'une matrice dans une boucle "for" . Je souhaiterai pouvoir calculer la matrice M pour n'importe quelle dimension de x. Mon code (qui ne fonctionne pas) est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    x=1:0.1:1.5
     
    for n=1:1:length(x)
     
            g(n)=tan(pi*x(n));
            t(n)=tan(3*pi*x(n));
     
            A(n)=1-t(n).*g(n)*8;
            B(n)=t(n)+8*g(n);
            C(n)=t(n);        
            D(n)=1;
     
            M(:,n)=[A(n) B(n) ; C(n) D(n)];
     
    end
    En vous remerciant d'avance de me remettre dans le droit chemin!

    David

  2. #2
    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 : 52 882
    Points
    52 882
    Par défaut
    Quelle doit être la taille finale de M ?
    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)

  3. #3
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Juste un truc :
    là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M(:,n)=[A(n) B(n) ; C(n) D(n)];
    Tu essayes de mettre une matrice 2*2 ([A B ;C D]) dans un vecteur colonne.
    Ca ne va pas rentrer...
    Règles du Forum

    Adepte de la maïeutique

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    j'ai eu le même problème récemment.
    En fait si je comprends bien, tu cherches à réaliser une "suite" de matrices non?
    Ta matrice M est une matrice 2x2 dont les éléments varient en fonction de x, c'est ça?
    si c'est le cas, il faut ajouter une 3e dimension à ta matrice je crois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    M(1:2,1:2,n)=[A(n), B(n) ; C(n), D(n)];
    Enfin, dans mon cas ça avait marché. J'espère que j'ai bien compris ton problème...

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses en temps réel!

    Oui c'est ca, la matrice M reste une matrice 2x2 mais la longueur des éléments A, B,C et D varie si je change le nombre de points pour x. Je viens d'esseyer ta suggestion. Cela fonctionne mais le hic c'est que je voudrai pouvoir stocker toutes les valeurs dans la matrices M car je dois ensuite faire un produit matricielle avec une autre matrice de dimension identique.

    Resultats désiré
    M=
    [A1 A2 A3 | B1 B2 B3
    ---------|---------
    C1 C2 C3 | D1 D2 D3]
    Resultats obtenu
    x =
    1 1.25 1.5


    M(:,:,1) =
    1 -1.3471e-015
    -3.6739e-016 1

    M(:,:,2) =
    9 7
    -1 1

    M(:,:,3) =
    -7.9025e+031 4.5365e+016
    1.8146e+015 1
    Citation Envoyé par galaadb
    Bonjour,

    j'ai eu le même problème récemment.
    En fait si je comprends bien, tu cherches à réaliser une "suite" de matrices non?
    Ta matrice M est une matrice 2x2 dont les éléments varient en fonction de x, c'est ça?
    si c'est le cas, il faut ajouter une 3e dimension à ta matrice je crois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    M(1:2,1:2,n)=[A(n), B(n) ; C(n), D(n)];
    Enfin, dans mon cas ça avait marché. J'espère que j'ai bien compris ton problème...

  6. #6
    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 : 52 882
    Points
    52 882
    Par défaut
    Sans chercher à trop optimiser ton code, tu peux concaténer A, B, C et D après la boucle FOR-END :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    x=1:0.1:1.5
     
    for n=1:1:length(x)
     
            g(n)=tan(pi*x(n));
            t(n)=tan(3*pi*x(n));
     
            A(1,n)=1-t(n).*g(n)*8;
            B(1,n)=t(n)+8*g(n);
            C(1,n)=t(n);        
            D(1,n)=1;
     
    end 
     
    M =[A B ; C D];
    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)

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Cette ultime concaténation aura eu raison de ma matrice récalcitrante!

    Problème résolu, encore merci à tous et la prochaine fois je ferai un meilleur usage des balises et autres...


    Citation Envoyé par Dutmatlab
    Sans chercher à trop optimiser ton code, tu peux concaténer A, B, C et D après la boucle FOR-END :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    x=1:0.1:1.5
     
    for n=1:1:length(x)
     
            g(n)=tan(pi*x(n));
            t(n)=tan(3*pi*x(n));
     
            A(1,n)=1-t(n).*g(n)*8;
            B(1,n)=t(n)+8*g(n);
            C(1,n)=t(n);        
            D(1,n)=1;
     
    end 
     
    M =[A B ; C D];

  8. #8
    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 : 52 882
    Points
    52 882
    Par défaut
    Et donc maintenant, sans la boucle FOR-END :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=1:0.1:1.5
     
    M = [1-tan(3*pi*x).*tan(pi*x)*8 tan(3*pi*x)+8*tan(pi*x) ; tan(3*pi*x) ones(1,length(x))]
    Voila du code Matlab propre qui s'optimise encore comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    x=1:0.1:1.5
     
    t=tan(3*pi*x);
    tt=tan(pi*x);
     
    M = [1-t.*tt*8 t+8*tt ; t ones(1,length(x))]
    Ensuite, on va s'arrêter la parce que ça deviendrait trop indigeste pour le moment
    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)

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

Discussions similaires

  1. Remplacement d'une ligne par une autre dans une matrice
    Par Mathematiker dans le forum Scilab
    Réponses: 4
    Dernier message: 17/02/2015, 14h57
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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