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 la vitesse d un code en matlab


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Par défaut Optimisation de la vitesse d un code en matlab
    Bonjour a tous ;
    Voila mon problème , J'ai un boucle ds mon programme qui me donne une matrice P ,contient des indices de lignes et de colonnes d’une matrice A carrée symétrique d’ordre n ,soit P par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    n=9 ;
    P = [ 9     8     5     7     1  6     3     2     4
         9     8     5     7     1  6     2     3     4
        9     8     5     7     1  6     2     4     3];


    Je voudrais construire une nouvelle matrice D à partir de P :
    J’ai ce code :

    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
    m=size(P,1);
    D=zeros((n-1)*m,n);
        D(1:m,:)=P;
        r2=m+1;
        for r=n-1:-1:2
           P(P(:,end)==r,:)=[];
           if isempty(P)==1
               break
           end
           P=P-((r+1)-r)*(P==r+1)+((r+1)-r)*(P==r);
    	r1=r2-1+size(P,1);
        D(r2:r1,:)=P;
        r2=r1+1;
        end
        D(D(:,1)==0,:)=[];
    Donc D soit :
    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
    D=[     9     8     5     7     1   6     3     2     4
         9     8     5     7     1   6     2     3     4
         9     8     5     7     1   6     2     4     3
         8     9     5     7     1   6     3     2     4
          8     9     5     7     1   6     2     3     4
          8     9     5     7     1   6     2     4     3
          7     9     5     8     1   6     3     2     4
          7     9     5     8     1   6     2     3     4
          7     9     5     8     1   6     2     4     3
          6     9     5     8     1   7     3     2     4
          6     9     5     8     1   7     2     3     4
          6     9     5     8     1   7     2     4     3
     
          5     9     6     8     1   7     3     2     4
          5     9     6     8     1   7     2     3     4
          5     9     6     8     1   7     2     4     3
          4     9     6     8     1   7     2     5     3]
     Puis je cherche parmi les lignes de D et d’une autre matrice D’ « à partir de D »par exemple :

    Pour a=6 D’ soit :

    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
    D’= [     9     8     5     7     1   6      4  2  3 
         9     8     5     7     1   6     4  3  2 
         9     8     5     7     1   6     3  4  2  
          8     9     5     7     1   6    4  2  3 
          8     9     5     7     1   6    4  3  2 
          8     9     5     7     1   6    3  4  2 
         7     9     5     8     1   6    4  2  3 
          7     9     5     8     1   6    4  3  2  
          7     9     5     8     1   6    3  4  2  
          6     9     5     8     1   7    4  2  3  
          6     9     5     8     1   7    4  3  2 
          6     9     5     8     1   7    3  4  2   
    
         5     9     6     8     1   7    4  2  3  
          5     9     6     8     1   7    4  3  2  
          5     9     6     8     1   7    3  4  2 
         4     9     6     8     1   7    3  5  2  ]
    Une ligne où la somme est plus de X1 ,
    ie je calcule pour chaque ligne :
    A(D(i,1),D(i,2))+ A(D(i,2),D(i,3))+………
    Par ce code:

    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
    24
    25
    X1= ?
    a= ?
    Y=zeros(1,n+1);
     
    rows = D(:,1:n-1);
    cols = D(:,2:n);
    C= sum( A( sub2ind(size(A),rows,cols) ) ,2); 
    [~,IX]=sort(C,'descend');
    rows = D(:,[1:n-a n:-1:n-a+2]);
    cols = D(:,[2:n-a n:-1:n-a+1]);
    C2= sum( A( sub2ind(size(A),rows,cols) ) ,2) ;
    [~,IY]=sort(C2,'descend');
    if C(IX(1))>C2(IY(1))
       X0=C(IX(1));
    if X0>X1
        X1=X0
        Y=[X1 D(IX(1),:)];
    end
    else 
        X0=C2(IY(1));
    if X0>X1
        X1=X0
        Y=[X1 D(IY(1),[1:n-a n:-1:n-a+1])];
    end
    end
    j’ai besoin d’un coup de main pour optimizer le code ?

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    m=size(P,1);
    Y=zeros(1,n+1);
    D=zeros(12*m,n);
        D(1:m,:)=P;
        r2=m+1;
        for r=n-1:-1:2
           P(P(:,end)==r,:)=[];
           if isempty(P)==1
               break
           end
           r1=r2-1+size(P,1);
           P=P-((r+1)-r)*(P==r+1)+((r+1)-r)*(P==r);
        D(r2:r1,:)=P;
        r2=r1+1;
        end
        D(D(:,1)==0,:)=[];
             rows = D(:,1:n-1);
    cols = D(:,2:n);
    C= sum( A( sub2ind(size(A),rows,cols) ) ,2); 
    [~,IX]=sort(C,'descend');
    rows = D(:,[1:n-a n:-1:n-a+2]);
    cols = D(:,[2:n-a n:-1:n-a+1]);
    C2= sum( A( sub2ind(size(A),rows,cols) ) ,2) ;
    [~,IY]=sort(C2,'descend');
    if C(IX(1))>C2(IY(1))
       X0=C(IX(1));
    if X0>X1
        X1=X0
        Y=[X1 D(IX(1),:)];
    end
    else 
        X0=C2(IY(1));
    if X0>X1
        X1=X0
        Y=[X1 D(IY(1),[1:n-a n:-1:n-a+1])];
    end
    end
    Quelqu’un aurait une idée ?
    Merci

  2. #2
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Par défaut
    Bonjour ;
    Pour la condition if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if C(IX(1))>C2(IY(1))
       X0=C(IX(1));
    if X0>X1
        X1=X0
        Y=[X1 D(IX(1),:)];
    end
    else 
        X0=C2(IY(1));
    if X0>X1
        X1=X0
        Y=[X1 D(IY(1),[1:n-a n:-1:n-a+1])];
    end
    end
    je l’ai vectorisée comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [X0,idx]=max([C(IX(1)),C2(IY(1))])
         if X0>X1
         C = idx==1;
          Y=[X1 D(IY(1),[1:n-a n:-1:n-a+1])]*(~C)+[X1 D(IX(1),:)]*C
         end
    Est-ce la meilleur façon de faire ?
    Pour le code qui calcule D ?????
    j’ai besoin de vous conseilles, remarques ?
    merci d’avance

Discussions similaires

  1. optimiser le nombre de ligne de code
    Par zylix dans le forum VB.NET
    Réponses: 2
    Dernier message: 12/05/2015, 20h49
  2. [XL-2007] Optimisation de la vitesse de mon code
    Par dodo69 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/02/2011, 13h56
  3. Réponses: 41
    Dernier message: 17/06/2010, 14h24
  4. Documenter le code du matlab
    Par mihaispr dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 21/03/2009, 18h28
  5. Problème dans un code de matlab
    Par hanane78 dans le forum MATLAB
    Réponses: 8
    Dernier message: 25/04/2007, 16h29

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