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 :

Optimisation de calcul matriciel


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Optimisation de calcul matriciel
    Bonjour,
    je suis débutant sur Matlab et j'ai réussi à écrire la somme des matrice ci dessous en utilisant les boucle for. est ce qu'il est possible d'optimiser ce calcul ?
    Merci d'avance pour votre aide :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    np=10;N=1000;
    cm=0;Nn=0;
    Bchap=[0 0;0 0];
    Cchap=[0 0;0 0];
    for i = 1:N
        Bchap1(:,:)=[0 0;0 0] ;
        Cchap1(:,:)=[0 0;0 0] ;
        for s = 1:np
            for j = 1:ne(1,s)
                for k = 1:ne(1,s)
                    if k==j
                        Bchap1(:,:)=Bchap1(:,:)+(w(1,s).^2)*([x(j,s,i) y(j,s,i)]' * [x(j,s,i) y(j,s,i)]);
                    end
                    if k~=j
                        Cchap1(:,:)=Cchap1(:,:)+(w(1,s).^2)*([x(j,s,i) y(j,s,i)]' * [x(k,s,i) y(k,s,i)]);
                    end
                end
            end
        end
        Bchap=Bchap+Bchap1(:,:)/sum(ne);
        Cchap=Cchap+Cchap1(:,:)/sum(ne);
        i
    end

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Les boucles sont relativement optimisées dans les dernières release, et elles évitent des éventuelles out-of-memory error. Commence peut être par parraléliser la boucle extérieur (doc parfor).

    Difficile en tout cas à la simple vue du code de proposer une version vectorisée

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Bonjour,

    j'ajouterai juste une précision au message de VV33D.

    Tu peux utiliser la fonction profile de matlab pour savoir quelle ligne prend du temps à l'execution. Ca donne déjà une idée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    profile on
    % Code
    profile viewer

  4. #4
    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
    Une des deux conditions devrait pouvoir être sortie de la boucle sur k :

    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
    16
    17
    18
    19
    20
    21
    22
    np=10;N=1000;
    cm=0;Nn=0;
    Bchap=zeros(2);
    Cchap=zeros(2);
    Bchap1=zeros(2);
    Cchap1=zeros(2);
    for i = 1:N
        Bchap1(:)=0;
        Cchap1(:)=0;
        for s = 1:np
            for j = 1:ne(1,s)            
                Bchap1(:,:)=Bchap1(:,:)+(w(1,s).^2)*([x(j,s,i) ; y(j,s,i)] * [x(j,s,i) y(j,s,i)]);
                for k = 1:ne(1,s)
                    if k~=j
                        Cchap1(:,:)=Cchap1(:,:)+(w(1,s).^2)*([x(j,s,i) ; y(j,s,i)] * [x(k,s,i) y(k,s,i)]);
                    end
                end
            end
        end
        Bchap=Bchap+Bchap1(:,:)/sum(ne);
        Cchap=Cchap+Cchap1(:,:)/sum(ne);
    end
    Sinon, il nous faudrait des valeurs pour les variables w, x, y, np et ne
    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)

Discussions similaires

  1. Optimisation Vitesse d'Exécution Calcul matriciel
    Par olivier21c dans le forum Langage
    Réponses: 33
    Dernier message: 02/09/2011, 11h46
  2. Optimisation de boucles via calcul matriciel
    Par HAL-9000 dans le forum MATLAB
    Réponses: 12
    Dernier message: 06/03/2010, 21h53
  3. Problème de calcul matricielle
    Par Clad3 dans le forum Algorithmes et structures de données
    Réponses: 21
    Dernier message: 29/06/2005, 21h45
  4. optimisation de multplication matricielle 4x4
    Par kiroukou dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 08/02/2005, 09h48
  5. Calcul Matriciel en PL/SQL
    Par PpPool dans le forum PL/SQL
    Réponses: 4
    Dernier message: 02/02/2004, 10h11

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