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 :

Optimiser un code


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Par défaut Optimiser un code
    bonsoir à vous tous,

    j'ai fait un petit programme en MatLab qui marche bien mais il y a le problème de temps d'exécution(très lent) à cause des boucles imbriquées.

    Je veux l'optimiser et je ne sais pas comment le faire.aidez moi svp
    MERCI

  2. #2
    Membre chevronné
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Par défaut
    Sans le code, ce sera difficil^^

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut
    Sans le code on ne peut pas trop t'aider!
    mais tout ce que je peux te dire c'est que matlab n'aime pas trop les boucles, il faut "vectoriser" tes boucles (matlab c'est du calcul matriciel)

  4. #4
    Membre averti
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Par défaut optimiser un code
    salut,desolé pour le retard.
    voici le programme:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    %5 points 2 dimensions
    x=[0 0;1 0;0 1;1 1;.5 .5];
    plot(x(1,1),x(1,2),'o')
    grid on
    hold on,plot(x(2,1),x(2,2),'o')
    hold on,plot(x(3,1),x(3,2),'o')
    hold on,plot(x(4,1),x(4,2),'o')
    hold on,plot(x(5,1),x(5,2),'or')
    u=[1 1 1 1 -1];
    max=0;
    for s=0:.1:3
        for t=0:.1:1
           for m=0:.1:1
               for n=0:.1:1.5 
                    l=(-s*u(1)-t*u(2)-m*u(3)-n*u(4))/u(5)
                    if l<0
                        l=0
                    end
                    a=[s t m n l]        
                    f=0
                    g=0
                    for  i=1:1:5
                        for j=1:1:5   
                            g=g+a(i)*a(j)*u(i)*u(j).*(x(i,:)*x(j,:)'+1)^3
                        end
                        f=f+a(i)
                    end
                    G=f-1/2*g
                    if G>max
                        max=G,a1=s,a2=t,a3=m,a4=n,a5=l;
                    end
               end
            end
        end
    end
    a=[a1 a2 a3 a4 a5]
    b=u(5)-x(5,:)*(u(1)*a1.*x(1,:)+u(2)*a2.*x(2,:)+u(3)*a3.*x(3,:)+u(4)*a4.*x(4,:)+u(5)*a5.*x(5,:))'
    A=0
    B=0
    C=0
    D=0
    for  h=0:.25:1
        for i=1:1:5
            A=A+a(i)*u(i)*x(i,2)^3
            B=B+a(i)*u(i)*3*(h*x(i,1)+1)*x(i,2)^2 
            C=C+a(i)*u(i)*3*(h*x(i,1)+1)^2*x(i,2) 
            D=D+a(i)*u(i)*(h*x(i,1)+1)^3
        end
    	D=D+b
        P=[A B C D]
    	r=roots(P)
        hold on
        plot(h,r,'og')
    end


    je veux l'optimiser pour l'appliquer sur une image;
    merci.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    On pourrait aussi savoir ce qu'est censé faire ce code ?

  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 317
    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 317
    Par défaut
    Commence déjà par mettre un point-virgule ";" à la fin de la plupart des lignes (sauf celles qui commences par FOR, IF ,END...) afin d'éviter que MATLAB perde du temps à afficher les résultats intermédiaires dans le Command Window

  7. #7
    Membre averti
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Par défaut
    Citation Envoyé par aliasfdr Voir le message
    il faut "vectoriser" tes boucles (matlab c'est du calcul matriciel)
    merci pour votre reponse aliasfdr mais que voulez vous dire par "vectoriser"??
    mon but est d'avoir les paramètres alpha de cette fonction
    max⁡{ ∑αi-1/2 ∑ αi αj ui uj xi xj }
    αi>=0, i,j=1,..,m
    ∑ αi ui =0

  8. #8
    Membre chevronné
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Par défaut
    Vectoriser, en gros, c'est se débarasser des boucle for en traitant le vecteur (ou la matrice) dans son ensemble, plutôt que les éléments un par un.

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut
    Ce que je veux dire par vectoriser c'est comme le dit dam2227 eviter de faire le traitement élélment par élément ( matlab est fait pour le calcul matriciel)

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for j=1:1:5   
            g=g+a(i)*a(j)*u(i)*u(j).*(x(i,:)*x(j,:)'+1)^3
    end
    peut s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    j=[1:5];
    g=g+a(i)*a(j)*u(i)*u(j).*(x(i,:)*x(j,:)'+1)^3;

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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