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 :

interrompre un programme [Débutant]


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Par défaut interrompre un programme
    Bonjour a tous,

    Alors voila, j'aimerai savoir si il existe une commande qui permet, quand le programme tourne, de l'interrompre pour qu'il se mette en pause et que je puisse voir ou il en est... J'ai essaye ctrl+Z, mais ca fait rien..
    "mais dis-donc, ca ressemble vachement a un breakpoint ton truc!" me direz-vous.
    Le probleme, c'est que mon programme est assez long, et j'ai pas mis de breakpoints ou de "prompts checkpoints" pour savoir ou j'en suis (oui je sais c'est mal, mais je vais rectifier ca), et vu le temps que prends le programme, j'ai pas envi de le killer avec un p'tit ctrl+C.

    Bon, c'est pas vital comme probleme, mais si qqn a une idee, ca serait cool!

    Merci d'avance!

    Kevin

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Par défaut
    Salut Kevin,

    Le meilleur moyen de faire ca est en effet d'utiliser des breakpoint non ?

    Des petites pastilles rouges sur ton programme, tu regardes les valeurs que tu désires et une fois que c'est fait, c'est reparti.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Par défaut
    Oui, je suis completement d'accord avec toi dans l'absolu... Le truc, c'est que le programme que j'ai lance, prend beaucoup de temps, beaucoup plus que ce que je pensais.. Donc je voulais essayer de trouver un moyen de l'interrompre pendant son execution sans perdre tout ce qui avait ete fait jusqu'a present, regarder ou ca en etait, et le laisser finir apres.

    J'ai pas mis de breakpoints ou autre indicateur de progression parce que d'habitude c'est plutot rapide a l'execution.

    Mais bon, j'ai fini par craque avant la fin et j'ai arreter le programme... pour voir qu'effectivement ca marchait tres bien mais que c'etait juste treeeeeees long

    Du coup maintenant, je suis en train de mettre les petites balises qui vont bien pour voir ou j'en suis dans le programme pendant son execution.


    Mais bon, si qqn a la reponse a ma question initiale, ca peut toujours servir!

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Par défaut
    Haaaa, j'avais mal compris. Tu avais déjà lancé ton programme avant de mettre des breakpoint ! Ben là en effet, je ne vois pas comment tu peux savoir ou tu en es sans faire un Ctrl+C

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Par défaut
    arrgh...
    estimated time : 7h.....

    ca va etre long... vais aller chercher un cafe.. Mais bon, maintenant, avec toutes les balises que j'ai mises, je peux suivre en temps reel, donc c'est moins chi..t

    Enfin, bon, si qqn connait une commande autre que le fatal ctrl+C, qu'il se manifeste ou se taise a jamais!

    Sinon, les "disp" dans un programme, ca ralenti vraiment beaucoup l'execution d'un programme?

  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
    As-tu cherché à optimiser ton code ?

    Tu devrais utiliser le profiler de MATLAB avec un jeu de donnée de taille plus petite.

    Ou nous montrer carrément le code pour voir si on ne peut pas améliorer un peu tout ça

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Par défaut
    Salut Dut,
    Ben je sais pas si mon code est franchement optimise..

    Voila la bete :
    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
    dim=size(M);
     
    for i=1:dim(1)
        for j=1:dim(2)
     
            Vote = zeros(1,max(max(max(M))));      
     
            for k=1:n
                Vect(1,:)=M(i,j,:);
                x=Vect(k);
                Vote(x)=Vote(x)+1;
            end
            [max indice]=max(Vote);
            final_map(i,j)=indice;
            clear max indice;
            clc
            disp 'MSF classification maps acquired..'
            disp 'processing of maximum vote'
            disp(sprintf(['i=' int2str(i) '\tj=' int2str(j) ]))
        end
    end
    M est un matrice 3D de dimension donnees (c'est de la que je tire dim). Pour info, pour l'instant j'ai dim(1)=610 , dim(2)=340 et dim(3)=30 (avec dim = size(M) )

    Le principe, c'est qu'en fait, chaque image de ma matrice M est une carte de segmentation qui varient un peu d'une carte a l'autre (en gros je fais tourner plein de fois un prog de segmentation avant, je recupere tous les resultats et je les mets dans M).
    J'en arrive a la partie qui prend du temps... Le but de cette etape est d'optimiser la segmentation en faisant un algorithme de vote maximum.
    C'est a dire que je vais creer une carte de segmentation finale a partir des cartes precedentes. Pour chaque pixel, je vais assigner la valeur la plus probable, c'est a dire celle qui est la plus frequente.

    Petit nexemple sur une matrice 3x3x3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    M(:,:,1)=(1 1 2;4 4 5;3 2 3)
    M(:,:,2)=(1 2 2;1 4 5;4 2 5)
    M(:,:,3)=(1 2 2;1 3 4;4 2 3)
    le resultat sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final_map=(1 2 2;1 4 5;4 2 3)
    Voila, je pense que mes "dsip" pompent pas mal de temps, mais c'est le seul moyen que j'ai trouve pour savoir ou j'en suis dans le programme.

    Toute aide est la bienvenue


    PS: Je viens de lancer le programme, donc matlab est monopolise jusqu'a demain sur mon ordi, donc j'essaierai le profiler (enfin, je vais decouvrir) demain.

  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 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
    Que vaut n ? size(M,3) je suppose ?

  9. #9
    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
    Une première version optimisée :
    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
     
    M(:,:,1)=[1 1 2;4 4 5;3 2 3]
    M(:,:,2)=[1 2 2;1 4 5;4 2 5]
    M(:,:,3)=[1 2 2;1 3 4;4 2 3]
     
    dim = size(M);
     
    Vote = zeros(1,max(M(:)));  
     
    final_map = zeros(dim(1),dim(2));
    n=3;
     
    fprintf('MSF classification maps acquired..\nprocessing of maximum vote\n');
     
    for i=1:dim(1)
        for j=1:dim(2)      
     
            Vect=M(i,j,:);
     
            for k=1:n
                x=Vect(k);
                Vote(x)=Vote(x)+1;
            end
     
            [pas_besoin final_map(i,j)]=max(Vote);
     
            fprintf('i=% 3d  j=% 3d\n',i,j);
     
            Vote(:) = 0;
     
        end
    end

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Par défaut
    UN ENOOOOORMME MERCI Dut!!!!

    Ca marche nickel! Le temps de calcul a été réduit considérablement!

    Merci encore!

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

Discussions similaires

  1. Utiliser ReadKey sans interrompre le programme
    Par nakwakwak dans le forum Pascal
    Réponses: 4
    Dernier message: 18/04/2011, 09h45
  2. Comment interrompre mon programme en C ?
    Par bouraouimed dans le forum Linux
    Réponses: 4
    Dernier message: 08/09/2010, 08h52
  3. Réponses: 4
    Dernier message: 03/10/2009, 12h55
  4. Comment ne pas interrompre un programme quand il y a erreur
    Par chercheur3 dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 28/03/2007, 19h03
  5. [Turbo Pascal] Lire une touche au clavier sans interrompre le programme
    Par Allelouia dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 29/03/2003, 22h31

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