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 :

Enregistrer le contenu de la "Command Window" dans un fichier texte [Débutant]


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 46
    Points
    46
    Par défaut Enregistrer le contenu de la "Command Window" dans un fichier texte
    Bon voilà,

    J'ai crée un algorithme sur un "fichier.m" sous matlab qui génère plusieurs équations mathématiques. Je voudrais enregistrer les résultats (les équations générées dans la "command window" de matlab ) dans un "fichier texte" mais juste les équations (sans le " >>ans= ") car je voudrais après faire un copier coller du fichier texte qui contient ces équations dans un solveur d'optimisation. Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    De quelle façon obtiens-tu tes équations? As-tu pensé à les écrire à l'aide des fonctions FOPEN/FPRINTF/FCLOSE?
    Sinon pour enregistrer ce qui apparaît dans le Command Window, il existe la fonction DIARY. Pour éviter les "ans= ", utilise la fonction DISP.

  3. #3
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Une autre solution pourrait être d'utiliser PUBLISH.

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Bonjour,

    De quelle façon obtiens-tu tes équations? As-tu pensé à les écrire à l'aide des fonctions FOPEN/FPRINTF/FCLOSE?
    Sinon pour enregistrer ce qui apparaît dans le Command Window, il existe la fonction DIARY. Pour éviter les "ans= ", utilise la fonction DISP.
    Merci pour cette réponse. En fait j'ai écris un petit programme qui contient des boucles (for, if ...) pour générer mes équations. J'ai essayé avec FOPEN/FPRINTF/FCLOSE mais le fichier texte généré contient qu'une seule équation à chaque fois. Alors que mon programme génère plusieurs équations

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par fahimonasri Voir le message
    Merci pour cette réponse. En fait j'ai écris un petit programme qui contient des boucles (for, if ...) pour générer mes équations. J'ai essayé avec FOPEN/FPRINTF/FCLOSE mais le fichier texte généré contient qu'une seule équation à chaque fois. Alors que mon programme génère plusieurs équations
    En fait mon problème consiste exactement à un problème d'optimisation des systèmes de production. Pour ce faire, j'utilise un solveur d'optimisation. Mais vu que nombre d'équations qui décrivent mon problème d'optimisation augmente chaque fois la taille de mon système augmente, j'étais obligé de générer mes équations de façon automatique. Du coup, j'ai écris un code sous matlab qui génère les équations de façons automatique chaque fois les données de mon problème changent. C'est pour ça j'ai utilisé des boucles. Le problème maintenant, j'arrive pas à mettre toutes ces équations dans un fichier texte pour faire après copier coller dans le solveur que j'utilisé. Voilà

  6. #6
    Invité
    Invité(e)
    Par défaut
    De quelle façon est organisé ton code? L'ouverture/écriture/fermeture est-elle située dans ta boucle? Si tel est le cas, il te faut l'ouvrir et le fermer en dehors de cette boucle, sinon l'ouverture avec la permission 'w' efface le fichier à chaque itération.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fid = fopen('mon fichier.txt','wt');
    for ...
        % ...
        fprintf(fid, ...)
    end
    fclose(fid);

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    En fait j'ai essayé la solution que vous m'avez proposé mais ça marche pas toujours. le fichier texte généré contient que des chiffres et non pas des équations. Voici le code que j'ai écris pour générer mes équations. y est une matrice (nx4) qui contient les données de mon système
    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
    y=load('donnees_modele.txt');
    %fid=fopen('sor.txt','wt');
    %fprintf(fid,'%3.4f\n',x);
    %fclose(fid);
     
     
    for i=1:length(y) 
    for j=1:length(y)
     
           if y(i,3)==1 && y(i,1)==y(j,1) &&  i~=j 
     
                   sprintf('x%d%d%d>=x%d%d%d+%d-V%d%d%d_%d%d%d;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,4),y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1))
                   sprintf('x%d%d%d>=t;',y(i,2),y(i,3),y(i,1))
                   sprintf('x%d%d%d>=u%d;',y(i,2),y(i,3),y(i,1),y(i,2))
                   sprintf('V%d%d%d_%d%d%d*V%d%d%d_%d%d%d=0;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1))
                   sprintf('V%d%d%d_%d%d%d+V%d%d%d_%d%d%d=1000;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1))
     
           end
    end
    end
     
     
    for i=1:length(y) 
    for j=1:length(y)
     
           if y(i,3)~=1 && y(i,2)==y(j,2) && y(i,3)==y(j,3)-1 &&  i~=j
     
                   sprintf('x%d%d%d>=x%d%d%d+%d;',y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1),y(i,4))
     
           end
     
    end
    end
     
    for i=1:length(y) 
    for j=1:length(y)
     
           if y(i,3)~=1 && y(i,2)==y(j,2) && y(i,3)==y(j,3)+1 &&  i~=j
     
                   sprintf('x%d%d%d>=x%d%d%d+%d;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,4))
     
           end
     
    end
    end
     
    for i=1:length(y) 
    for j=1:length(y)
     
           if  y(i,3)~=1 && y(i,2)~=y(j,2) && y(i,1)==y(j,1) &&  i~=j 
     
                   sprintf('x%d%d%d>=x%d%d%d+%d-V%d%d%d_%d%d%d;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,4),y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1))
                   sprintf('V%d%d%d_%d%d%d*V%d%d%d_%d%d%d=0;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1))
                   sprintf('V%d%d%d_%d%d%d+V%d%d%d_%d%d%d=1000;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1))
     
           end
    end            
    end

  8. #8
    Invité
    Invité(e)
    Par défaut
    Heu les lignes d'écriture sont commentées, et non organisées comme je te l'ai montré, donc je dirais que c'est un peu normal que cela ne marche pas tu n'es pas de cet avis?

    Sinon fprintf(fid,'%3.4f\n',x); à remplacer par fprintf(fid,'%s\n',x); avec x = sprintf(...), la sortie de SPRINTF étant une chaîne de caractères, voire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fid,<contenu de tes sprintf>) % exemple: fprintf(fid,'x%d%d%d>=t;',y(i,2),y(i,3),y(i,1))

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    lol non non j'ai fais comme vous m'avez dis hier. Mais je les ai supprimé les lignes de code. Enfin je vais essayé avec cette solution et on verra. Merci encore une fois

    Voilà ce que ça donne avec cette solution. C'est mieux mais ce n'est pas ce que je cherche

    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
    65
    66
    67
    68
    69
    y=load('donnees_modele.txt');
    %fid=fopen('sor.txt','wt');
    %fprintf(fid,'%3.4f\n',x);
    %fclose(fid);
     
    fid=fopen('sor.txt','wt');
     
    for i=1:length(y) 
    for j=1:length(y)
     
           if y(i,3)==1 && y(i,1)==y(j,1) &&  i~=j 
     
                   sprintf('x%d%d%d>=x%d%d%d+%d-V%d%d%d_%d%d%d;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,4),y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1))
                   fprintf(fid,'%s\n','x%d%d%d>=x%d%d%d+%d-V%d%d%d_%d%d%d;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,4),y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1));
                   sprintf('x%d%d%d>=t;',y(i,2),y(i,3),y(i,1))
                   fprintf(fid,'%s\n','x%d%d%d>=t;',y(i,2),y(i,3),y(i,1));
                   sprintf('x%d%d%d>=u%d;',y(i,2),y(i,3),y(i,1),y(i,2))
                   fprintf(fid,'%s\n','x%d%d%d>=u%d;',y(i,2),y(i,3),y(i,1),y(i,2));
                   sprintf('V%d%d%d_%d%d%d*V%d%d%d_%d%d%d=0;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1))
                   fprintf(fid,'%s\n','V%d%d%d_%d%d%d*V%d%d%d_%d%d%d=0;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1));
                   sprintf('V%d%d%d_%d%d%d+V%d%d%d_%d%d%d=1000;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1))
                   fprintf(fid,'%s\n','V%d%d%d_%d%d%d+V%d%d%d_%d%d%d=1000;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1));
           end
    end
    end
     
     
    for i=1:length(y) 
    for j=1:length(y)
     
           if y(i,3)~=1 && y(i,2)==y(j,2) && y(i,3)==y(j,3)-1 &&  i~=j
     
                   sprintf('x%d%d%d>=x%d%d%d+%d;',y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1),y(i,4))
                   fprintf(fid,'%s\n','x%d%d%d>=x%d%d%d+%d;',y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1),y(i,4));
           end
     
    end
    end
     
    for i=1:length(y) 
    for j=1:length(y)
     
           if y(i,3)~=1 && y(i,2)==y(j,2) && y(i,3)==y(j,3)+1 &&  i~=j
     
                   sprintf('x%d%d%d>=x%d%d%d+%d;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,4))
                   fprintf(fid,'%s\n','x%d%d%d>=x%d%d%d+%d;',y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1),y(i,4));
           end
     
    end
    end
     
    for i=1:length(y) 
    for j=1:length(y)
     
           if  y(i,3)~=1 && y(i,2)~=y(j,2) && y(i,1)==y(j,1) &&  i~=j 
     
                   sprintf('x%d%d%d>=x%d%d%d+%d-V%d%d%d_%d%d%d;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,4),y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1))
                   fprintf(fid,'%s\n','x%d%d%d>=x%d%d%d+%d-V%d%d%d_%d%d%d;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,4),y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1));
                   sprintf('V%d%d%d_%d%d%d*V%d%d%d_%d%d%d=0;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1))
                   fprintf(fid,'%s\n','V%d%d%d_%d%d%d*V%d%d%d_%d%d%d=0;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1));
                   sprintf('V%d%d%d_%d%d%d+V%d%d%d_%d%d%d=1000;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1))
                   fprintf(fid,'%s\n','V%d%d%d_%d%d%d+V%d%d%d_%d%d%d=1000;',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,2),y(j,3),y(j,1),y(i,2),y(i,3),y(i,1));
           end
     
     
    end            
    end
     
    fclose(fid);

    ça donne des trucs un peu bizarres like this avec des carreaux entre les lignes:

    x%d%d%d>=x%d%d%d+%d-V%d%d%d_%d%d%d;
    
    
    
    x%d%d%d>=t;
    
    
    
    x%d%d%d>=u%d;
    
    
    V%d%d%d_%d%d%d*V%d%d%d_%d%d%d=0;
    Une remarque. La sortie SPRINTF est un mélange entre des chaines de caractères et des entiers

  10. #10
    Invité
    Invité(e)
    Par défaut
    Attention de ne pas mélanger les deux, c'est

    Citation Envoyé par fahimonasri Voir le message
    Une remarque. La sortie SPRINTF est un mélange entre des chaines de caractères et des entiers
    Oui c'est normalement ce qui est écris dans le fichier.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    La c'est bon ça marche . Mais est ce que vous savez comment faire pour obtenir chaque équation dans une ligne dans le fichier texte généré et non pas toutes les équations dans un même bloc comme ça :

    x212>=x132+6-V212_132;x212>=t;x212>=u2;V212_132*V132_212=0;V212_132+V132_212=1000;x212>=x352+1-V212_352;x212>=t;x212>=u2;V212_352*V352_212=0;V212_352+V352_212=1000;x212>=x412+5-V212_412;x212>=t;x212>=u2;V212_412*V412_212=0;V212_412+V412_212=1000;x212>=x522+3-V212_522;x212>=t;x212>=u2;V212_522*V522_212=0;V212_522+V522_212=1000;x212>=x612+3-V212_612;x212>=t;x212>=u2;V212_612*V612_212=0;V212_612+V612_212=1000;x412>=x132+6-V412_132;x412>=t;x412>=u4;V412_132*V132_412=0;V412_132+V132_412=1000;x412>=x212+8-V412_212;x412>=t;x412>=u4;V412_212*V212_412=0;V412_212+V212_412=1000;x412>=x352+1-V412_352;x412>=t;x412>=u4;V412_352*V352_412=0;V412_352+V352_412=1000;x412>=x522+3-V412_522;x412>=t;x412>=u4;V412_522*V522_412=0;V412_522+V522_412=1000;x412>=x612+3-V412_612;x412>=t;x412>=u4;V412_612*V612_412=0;V412_612+V612_412=1000;x612>=x132+6-V612_132;x612>=t;x612>=u6;V612_132*V132_612=0;V612_132+V132_612=1000;x612>=x212+8-V612_212;x612>=t;x612>=u6;V612_212*V212_612=0;V612_212+V212_612=1000;x612>=x352+1-V612_352;x612>=t;x612>=u6;V612_352*V352_612=0;V612_352+V352_612=1000;x612>=x412+5-V612_412;x612>=t;x612>=u6;V612_412*V412_612=0;V612_412+V412_612=1000;x612>=x522+3-V612_522;x612>=t;x612>=u6;V612_522*V522_612=0;V612_522+V522_612=1000;x113>=x223+5-V113_223;x113>=t;x113>=u1;V113_223*V223_113=0;V113_223+V223_113=1000;x113>=x313+5-V113_313;x113>=t;x113>=u1;V113_313*V313_113=0;V113_313+V313_113=1000;x113>=x433+5-V113_433;x113>=t;x113>=u1;V113_433*V433_113=0;V113_433+V433_113=1000;x113>=x513+9-V113_513;x113>=t;x113>=u1;V113_513*V513_113=0;V113_513+V513_113=1000;x113>=x663+1-V113_663;x113>=t;x113>=u1;V113_663*V663_113=0;V113_663+V663_113=1000;x313>=x113+1-V313_113;x313>=t;x313>=u3;V313_113*V113_313=0;V313_113+V113_313=1000;x313>=x223+5-V313_223;x313>=t;x313>=u3;V313_223*V223_313=0;V313_223+V223_313=1000;x313>=x433+5-V313_433;x313>=t;x313>=u3;V313_433*V433_313=0;V313_433+V433_313=1000;x313>=x513+9-V313_513;x313>=t;

  12. #12
    Invité
    Invité(e)
    Par défaut
    Je présume que tu as choisi la première méthode, donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fid,'x%d%d%d>=x%d%d%d+%d-V%d%d%d_%d%d%d;\n',y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1),y(j,4),y(i,2),y(i,3),y(i,1),y(j,2),y(j,3),y(j,1));

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup ça marche. Nickel

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/04/2009, 09h49
  2. enregistrer le contenu d'un Edit dans un fichier texte
    Par tapouni dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2008, 23h02
  3. Réponses: 7
    Dernier message: 06/01/2007, 20h16
  4. [DOS] Commande pour écrire dans un fichier texte
    Par Jeff87-01 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 28/03/2006, 01h04

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