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 :

Remplacement automatique de valeurs


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut Remplacement automatique de valeurs
    Bonjour,

    Voilà je vous explique mon problème :

    Avec un logiciel de simulation j'obtiens des fichiers Matlab avec des milliers de valeurs comme ceci :

    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
    PressionS1A1F5R1_dB = [
      12.0
      12.0
      12.0
      76.5
      70.8
      76.8
      77.9
      77.5
      77.8
      77.4
      77.6
      77.2
      76.9
      76.5
      76.3
      76.3
      76.1
      76.2
      76.2
      75.8
      75.7
      75.5
      75.4
    ...
    Tout ceci est censé représenter un echogramme de salle, donc dépend de la Fréquence (PressionS1A1F5R1_dB) et d'un Angle (PressionS1A1F5R1_dB) qui varient pour l'un de 1 à 8 et pour l'autre de 1 à 26.

    J'aimerai trouver un moyen automatisé pour remplacer les 16 premières valeurs de chaque fréquence et de chaque angle par les valeurs d'un autre fichiers.

    Je sais pas si tout ça est bien clair...

    Est ce que quelqu'un aurait un idée pour m'aider svp?

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    je ne vois pas bien ce que tu veux faire ?
    c'est quoi comme fichiers ?
    il faut stocker tes valeurs dans des matrices par exemple et ensuite les manipuler comme tu veux ..

    Si tu donnais un peu plus de détails sur ce que tu veux faire on pourrais peut être aider

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Voici un peu plus de détails

    A chaque simulation acoustique de salle avec un logiciel fait maison j'obtiens un fichier matlab .m dans lequel il y a des milliers de valeurs représentant des niveaux sonores.
    Parmis ces milliers de valeurs, 16 doivent être changées à différentes lignes du fichier. Par exemple :

    12
    12 --> Cette ligne doit être remplacée par une autre valeur
    13
    65 --> Celle ci aussi.
    156
    44

    Le problème est que si je remplace ces niveaux sonores à la main, j'ai environ 200 copier coller à faire... C'est pourquoi je voudrais savoir s'il existe un moyen de le faire automatiquement sur matlab.

    Je sais pas si c'est plus clair...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Si je le fais manuellement j'ai 1664 copier coller à faire...


  5. #5
    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
    Ben oui mais tu ne nous dis pas comment tu sais quelles sont les valeurs que tu dois remplacer : tu as leurs indices ? Et par quoi tu dois les remplacer.
    En fait il manque le mode opératoire.
    En gros en français ce que tu veux que MATLAB fasse.
    Règles du Forum

    Adepte de la maïeutique

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    Un fichier .m est utilisé en général pour écrire du code ( script, fonction) et non pas des résultas de calcul !

    je te conseil d'écrire tes résultas sous forme de excel par exemple si tu veux les conserver (commande xlswrite) ensuite tu peux les lire ( xlsread) et les stocker sous forme de matrice A.

    enfin il n'ya plus qu'à changer tes valeurs : A([15 46 15 16],1)=[nouvelles valeurs];

    voilà bon courage

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Après les simulations, je me retrouve avec 8 fichiers de valeurs Mfile.

    Un de ces fichiers est la référence.

    Et sur les 7 autres fichiers, il faut remplacer 16 valeurs qui se suivent toutes les 405 lignes. Les valeurs qui remplacent sont celles de la référence.

    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
    PressionS1A1F8R1_dB = [
    12.0
    12.0
    12.0
    12.0
    49.6
    57.1
    56.4
    57.7
    61.4
    62.5
    62.3
    63.2
    62.7
    61.6
    61.3
    61.8
    61.1
    60.1
    59.7
    60.8
    60.1
    60.5
    59.0
    59.6
    59.2
    59.1
    ...
    Par exemple, les valeurs en rouge sont celles à remplacer par celles de la référence. Puis les 16 autres sont 405 lignes plus loin...

    Alors je voulais savoir si il y a la possibilité de faire un programme matlab qui chargerait le fichier à modifier et qui le modifierait ensuite.

  8. #8
    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
    On est d'accord que si tu lances le fichier .m tu récupères ton vecteur PressionS1A1F8R1_dB ?
    Je suppose que c'est pareil pour le fichier de référence ? (Si le nom du vecteur est le même penser à stocker le 1er chargé dans une autre variable).
    J'appelerais la variable de ce fichier PressionS1A1F8R1_dB_Ref.
    Ensuite l'idée d'aliasfdr donne une piste.
    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for k=1:405:length(PressionS1A1F8R1_dB)%pour le pas il faut savoir si c'est 405 lignes après la 1ère ligne du bloc de 16 ou après la 16ème
       PressionS1A1F8R1_dB(k:k+15)=PressionS1A1F8R1_dB_Ref(???);%??? dépend de la taille de la variable, tu dois pouvoir trouver
    end
    Règles du Forum

    Adepte de la maïeutique

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Quand je lance le fichier .m je récupère :

    PressionS1A1F1R1_dB
    ...
    PressionS1A1F8R1_dB

    PressionS1A2F1R1_dB
    ...
    PressionS1A2F8R1_dB

    etc jusqu'à PressionS1A26F8R1_dB

    Oui tu as raison c'est pareil pour le fichier de référence.

    Je vais essayer avec ce que vous conseillez.

  10. #10
    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
    Penses à faire un tour par là => Comment créer des variables nommées A1, A2, A3, ...,AN ?
    pour traiter plus facilement tes données
    Règles du Forum

    Adepte de la maïeutique

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Une fois que toutes les valeurs ont été modifiées, comment peut on enregistrer ces modifications en écrasant le fichier .m ?

  12. #12
    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
    Tu tiens vraiment à les enregistrer dans un fichier .m ?
    Parce qu'enregistrer dans un fichier .mat c'est quand même le plus naturel en MATLAB...(Cf commande SAVE)
    Règles du Forum

    Adepte de la maïeutique

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Mais comme le logiciel de simulation acoustique enregistre ses résultats en .m les modifications doivent être enregistrées sur le même fichier.

  14. #14
    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
    Je ne vois pas pourquoi à moins que ce même logiciel ait besoin de les réutiliser, mais bon...

    Dans ce cas il ne te reste plus qu'à utiliser les fonctions d'entrée/sortie dites de bas-niveau : fopen, fprintf, fclose.

    Je te laisse aller regarder l'aide
    Règles du Forum

    Adepte de la maïeutique

  15. #15
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Oui voilà le logiciel a besoin de réutiliser ces fichiers.

    Merci pour l'aide !

  16. #16
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Après quelques jours de repos, me revoilà plongé dans mon problème...

    Alors voilà quand j'utilise fopen, fprintf et fclose, le message d'erreur suivant s'affiche avec l'utilisation du script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Attempt to execute SCRIPT Tr14 as a function.
     
    Error in ==> change at 243
    fprintf(fid,Tr14);


    Le problème est que j'ai toujours mon fichier de référence "ref2.m', mon fichier à modifier "Tr14.m" et il faudrait que toutes les valeurs de Tr14 soit enregistrées, les modifiées comme les non-modifiées.

    Quand j'utilise la fonction "save" je n'enregistre que les modifications dans le fichier "modif" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save('modif','-ASCII');

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    J'ai essayé aussi la commande xlswrite qui me paraissait être une bonne solution en stockant toutes les valeurs :

    Un message d'erreur s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error using ==> xlswrite
    Error: Object returned error code: 0x800A03EC

  18. #18
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  19. #19
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    D'accord donc le fichier .m contient trop d'infos pour excel...

  20. #20
    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
    Tu essayes de fprinter (c'est pas joli mais c'est compréhensible) ton fichier Tr14 en entier ?
    La ligne qui donne un erreur ne veut rien dire.
    Pourrais-tu nous montrer le code que tu veux utiliser pour créer ton fichier avec les fopen/fprintf/fclose ?
    Règles du Forum

    Adepte de la maïeutique

Discussions similaires

  1. [AC-2007] Remplacer automatiquement des valeurs d'une table volumineuse
    Par ahoure dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/10/2013, 22h27
  2. remplacer automatiquement le contenu partiel d'un champ
    Par pikadri dans le forum Langage SQL
    Réponses: 5
    Dernier message: 23/10/2006, 01h12
  3. selectionner automatiquement plusieurs valeurs ds un select
    Par shadowR dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/09/2005, 16h00
  4. Insrer automatiquement une valeur!!
    Par mamiberkof dans le forum Langage SQL
    Réponses: 8
    Dernier message: 08/04/2005, 14h05
  5. [JSTL] Mes variables ne sont pas remplacées par leur valeur
    Par thomine dans le forum Taglibs
    Réponses: 9
    Dernier message: 18/03/2005, 10h00

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