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 :

Diminuer le temps d'exécution d'un programme


Sujet :

MATLAB

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Diminuer le temps d'exécution d'un programme
    salut,j'ai fait ce petit programme sous matlab.

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Mat=imread('imag.bmp');
    [H,W]=size(Mat)
     for i=1:1:H
          for j=1:1:W
          s=(i-1)*W+j;
          x(s,1)=i;
          x(s,2)=j;
          u(s)=1;
          if Mat(i,j)<210
          u(s)=-1;
          end
          end
     end
    for  i=1:1:H*W
         for j=1:1:W*W
          G(i,j)=u(i)*u(j)*(x(i,:)*x(j,:)'+1)^4;
         A(i,j)=0;
         if i==j
             A(i,j)=-1;
         end
         end
      Aeq(i)=u(i); 
      e(i)=1;
      B1(i)=0;
      x1(i)=0;
      Ib(i)=0;
      Ub(i)=1000;
     end
     B=B1';
    Ib=Ib';
     Ub=Ub';
    Beq=0;
    x0=x1';
    [a,fval] = fmincon(@(a)1/2*a'*G*a-e*a,x0,A,B,Aeq,Beq,Ib,Ub)
    n=0;
    for i=1:1:100
        n=n+a(i)*u(i)*(x(i,:)*x(1,:)'+1)^4;
    end
    b=u(1)-n;
    for  h=1:1:10     
    A=0;
    B=0;
    C=0;
    D=0;
    E=0;
    for i=1:1:100
         A=A+a(i)*u(i)*x(i,2)^4;
         B=B+a(i)*u(i)*3*(h*x(i,1)+1)*x(i,2)^3;
         C=C+a(i)*u(i)*6*(h*x(i,1)+1)^2*x(i,2)^2;
         D=D+a(i)*u(i)*((h*x(i,1)+1)^2*x(i,2)+3*(h*x(i,1)+1)^3*x(i,2)+(h*x(i,1)+1)*x(i,2)^3);
         E=E+a(i)*u(i)*(h*x(i,1)+1)^4;
    end
        E=E+b;
        P=[A B C D E];
        r=roots(P);
        for i=1:1:4
            if imag(r(i))==0 
                if r(i)>=0
        figure(1),plot(r(i),h,'og'),hold on;
                end
            end
        end
    end
    figure(2),imshow(Mat);
    mon problème suppose sur la taille de l'image pour des valeurs de H*W>100
    SVP quelqu'un peux m'orienter et m'aider ???

  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 307
    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 307
    Points : 52 887
    Points
    52 887
    Par défaut
    Quel est le problème ?
    Que fait ce code ?

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    salut,ce code fait la segmentation des images.
    je l'ai executé pour H*W=100 et ça marche trés bien mais pour H*W superieur le temps d'execution devenu trés tres grand et j'ai pas pu le minimisé.

  4. #4
    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
    Pour commencer essayes d'utiliser à fond les possibilités de l'editeur de MATLAB : par exemple l'outil M-Lint : Menu Tools > M-Lint.
    Il te donnera plein d'informations, comme par exemple le fait qu'il faut initialiser tes variables en dehors des boucles (pré-allocation).
    Pour cela tu peux t'aider des fonctions comme ZEROS ou ONES (ou EYE).
    Par exemple tu as à un moment :
    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
    for  i=1:1:H*W
        for j=1:1:W*W
            G(i,j)=u(i)*u(j)*(x(i,:)*x(j,:)'+1)^4;
            A(i,j)=0;
            if i==j
                A(i,j)=-1;
            end
        end
        Aeq(i)=u(i);
        e(i)=1;
        B1(i)=0;
        x1(i)=0;
        Ib(i)=0;
        Ub(i)=1000;
    end
    Tu peux le modifier en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %pre-allocations
    A=eye(H*W,W*W);
    e=ones(1,H*W);
    B1=zeros(1,H*W);
    x1=B1;
    Ib=B1;
    Ub=1000*e;
    Aeq=u;
    for  i=1:1:H*W
        for j=1:1:W*W
            G(i,j)=u(i)*u(j)*(x(i,:)*x(j,:)'+1)^4;
        end
    end
    Il est même possible que le calcul de G soit "vectorisable" mais là il faut réfléchir un peu plus.

  5. #5
    Membre averti

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 352
    Points
    352
    Par défaut
    va voir aussi du cote du profiler (help profile)

    Salutationsm

    Greg

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    bonsoir,desolé pour le retard.tout dabord,merci pour votre reponses.
    j'ai un autre probleme que le temps,le malatlab m'affiche cette erreur:
    ??? Out of memory. Type HELP MEMORY for your options.
    je ne comprend pas pourquoi?est ce que c'est a cause de la fonction: G(i,j)=u(i)*u(j)*(x(i,: )*x(j,: )'+1)^4 ??j'ai pas réussi de la rendre plus simple.

    paradize3 dit:" va voir aussi du cote du profiler ".
    Pourriez vous m'expliquer a quoi sert et comment peux m'aider?

  7. #7
    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
    Pour le message d'erreur voir dans la
    Out of memory. Type HELP MEMORY for your options.

    Pour le profiler :

Discussions similaires

  1. temps d'exécution d'un programme
    Par tapouni dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/05/2008, 16h14
  2. Mesurer le temps d'exécution d'un programme
    Par ArthurC dans le forum Pascal
    Réponses: 3
    Dernier message: 21/04/2008, 14h28
  3. Connaitre le temps d'exécution d'un programme
    Par ypascal dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/07/2007, 18h01
  4. Réponses: 2
    Dernier message: 13/02/2007, 14h59
  5. Temps d'exécution d'un programme
    Par temar dans le forum Prolog
    Réponses: 3
    Dernier message: 14/06/2006, 21h17

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