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

Simulink Discussion :

intégration d'un code MATLAB dans Simulink


Sujet :

Simulink

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut intégration d'un code MATLAB dans Simulink
    Bonjour tout le monde
    Je souhaite intégrer un code matlab dans un modèle simulink dont le but de faire des simulations d'une manière automatique. je m'explique, j'ai commencé a faire des simulations manuellement et ceci en faire variant les paramétrés de mon modèle et à chaque fois je note le résultat. et je choisis le meilleur scénario.
    j'aimerai bien faire ces différentes simulations d'une manière automatique: écrire un programme matlab qui permet de tester tous les scénarios.
    Avez vous une idée si cela est possible et si vous avez des exemples merci de les donner.

  2. #2
    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,

    Pour cela tu peux faire un script MATLAB qui lance chaque simulation avec la commande SIM
    Duf
    Simulink & Embedded Coder

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

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par duf42 Voir le message
    Bonjour,

    Pour cela tu peux faire un script MATLAB qui lance chaque simulation avec la commande SIM
    Duf
    Mercique j'ai besoin de tester plusieurs valeurs des hauteurs H1, H2, H3 : paramètres de mon réseau. je veux ecrire un pgme qui me permet de lancer plusieurs simulations d'une manière automatique et que me permet de choisir le meilleur scénario ( meilleur scénario est celui qui donne le minimum de Volume rejeté : donné par simulink) et la je suis bloquée!!
    Merci

  4. #4
    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
    Pour que l'on puisse t'aider il va falloir nous donner un peu plus d'information.

    As-tu commencé à écrire quelquechose (en utilisant la commande SIM par exemple)?

    A quel point bloques-tu?
    Simulink & Embedded Coder

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

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    voici le programme de la simulation. en donnant des valeurs fixes a Hdev1(resp Hdev2 et Hdev3) de 2.45 (resp 2.5 et 2.1)
    deb

    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
     
    %paramètre du premier bassin versant
    A1=1000000; %en m2
    C1=0.7;
    K1=509.3822; %en secondes 
     
    %paramètre du deuxième bassin versant
    A2=500000;  %en m2
    C2=0.7;
    K2=310.38; %en secondes 
     
    %paramètre du premier bassin de rétention
    S1=5000;  %en m2
    Hdev1=2.45; %en m
    alpha1=17.71778767;
    Hl1=0.012;  %en m
    Hdeb1=3;  %en m
    a1=16.667; 
    beta1=11.13; 
     
    %paramètre du deuxième bassin de rétention
    S2=1800;
    Hdev2=2.5; %en m
    alpha2=3.543557534;
    Hdeb2=4;  %en m
    beta2=11.13;
    Hd=2.3; %la hauteur de démarrage de la pompe en m
    Ha=0.05;%la hauteur d'arrêt de la pompe en m
    Qpm=0.05; % en m3/s
     
    %paramètre du troisième bassin de rétention
    S3=3000;
    Hdev3=2.1; %en m
    alpha3=10.6306726;
    Hl3=0.03;  %en m
    Hdeb3=3;  %en m
    a3=10; 
    beta3=11.13;
     
     
    sim reseau_etude
    le but maintenant est de lancer plusieurs simulations automatiquement et ceci en faisant varier les hauteur de dev, je dois faire 2^3 simulation (donner a hdev1,2 et 3 0 ou sa valeur initiale) le pgm doit s'arreter la hauteur de débordement dans l'un des 3 des bassin prend une auTre valeur que 0.

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    en effet le but est de choisir le meilleur scénario (on parle ici d'optimisation combinatoire) j'ai 8 scénarii possible (scénario n1 : [Hdev1,Hdev2, Hdev3]=[0,0,0] scénario 2 [Hdev1,Hdev2, Hdev3]=[0,0,2.1]................. scénario 8:[Hdev1,Hdev2, Hdev3]=[2.45,2.5,2.1])
    le choix du meilleur se fait en se basant sur les résultats donnés par le modèle simulink. (le scénario qui donne le minimum de rejet naturel Vmn : donné par simulink mais on doit satisfaire les conditions suivantes Hdeb 1=Hdeb2=Hdeb3=0
    Hdeb1,2 et3 ainsi que Vmn : calculer par le modèle simulink)

  7. #7
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    bah, il suffit d'encadrer l'appel de sim d'une boucle for ou tu fais varier tes paramètres à chaque iteration
    et il faut que tu récupères les valeurs de simulation dans matlab (soit avec des blocks to workspace soit en faisant un "log signal data" via la boite "signal properties" accessible via un clic droit sur un signal.
    puis un peu de calcul dans ta boucle for après l'appel de sim pour déterminer si ton scénario est bon

    en gros la structure devrait ressembler à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for idxScenario = 1:numel(scenarii)
      load scenarii(idxScenario);
      simout = sim (reseau_etude);
      resultat(idxScenario) = postTraitement(simout);
    end
    analyse(resultat);

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    merci !!
    comment je vais introduire les différents scénarios?? c'est-à-dire comment je vais dire que le scénario1 est présenté par (H1dev,H2dev,H3dev)=(0,0,0) scénario 2 => (H1dev,H2dev,H3dev)=(0,0,2.1).....................scénario 8 =>(H1dev,H2dev,H3dev)=(2.45,2.5,2.1)!!
    désolé mais vraiment je ne suis pas du tout forte en programmation !!
    merci !!

  9. #9
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    3 solutions :
    - tu créés des .mat (save, load) avec tes variables dedans
    - tu créés des scripts (.m) qui définissent tes variables
    - tu créés des fichiers excels (ou des onglets dans un xls) que tu lis (xlsread)

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    je sais pas si j'ai bien compris ce que tu m'avais dit!!
    j'ai choisi la 2ème méthode, et j'ai écrit des fichiers.m que j’appelle idxscenarioi(i variant de 1 à8)
    voici le premier fichier écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    i=1;
    Hdev1=0;
    Hdev2=0;
    Hdev3=0;
    le programme global est deb

    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
    %paramètre du premier bassin versant
    A1=1000000; %en m2
    C1=0.7;
    K1=509.3822; %en secondes 
     
    %paramètre du deuxième bassin versant
    A2=500000;  %en m2
    C2=0.7;
    K2=310.38; %en secondes 
     
    %paramètre du premier bassin de rétention
    S1=5000;  %en m2
    alpha1=17.71778767;
    Hl1=0.012;  %en m
    Hdeb1=3;  %en m
    a1=16.667; 
    beta1=11.13; 
     
    %paramètre du deuxième bassin de rétention
    S2=1800;
    alpha2=3.543557534;
    Hdeb2=4;  %en m
    beta2=11.13;
    Hd=2.3; %la hauteur de démarrage de la pompe en m
    Ha=0.05;%la hauteur d'arrêt de la pompe en m
    Qpm=0.05; % en m3/s
     
    %paramètre du troisième bassin de rétention
    S3=3000;
    alpha3=10.6306726;
    Hl3=0.03;  %en m
    Hdeb3=3;  %en m
    a3=10; 
    beta3=11.13;
    for idxScenario = 1:3
      load scenarii(idxscenario);
      simout = sim (reseau_etude);
      resultat(idxscenario) = postTraitement(simout);
    end
    analyse(resultat);
    je reçois le message d'erreur suivant:
    ??? Attempt to execute SCRIPT execute as a function:
    C:\Users\jiji\Desktop\Réseau d'etude\execute.m

  11. #11
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    1/ le idx est pour index donc pas la peine de le mettre dans le nom du fichier texte (-> scenario1.m ; scenario2.m ...)

    2/ dans ce cas remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    load scenarii(idxscenario);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(sprintf('scenario%i',idxscenario));

  12. #12
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    j'ai créé des scripts (.m) qui définissent les variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    deb 
    parametre
     
    for indxscenario = 1:3
      eval(sprintf('scenario%i',indxscenario));
      simout = Sim (reseau_etude);
      resultat(idxscenario) = postTraitement(simout);
    end
    analyse(resultat);
    j'ai reçu ce message d'erreur :
    ??? Undefined function or method 'Sim' for input arguments of type 'double'.
    
    Error in ==> execute2 at 9
      simout = Sim (reseau_etude);

  13. #13
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    1/ sim et non Sim : les majuscules ont de l'importance

    2/ reseau_etude doit être une chaîne de caractères contenant le nom de ton modèle, sans l’extension mdl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reseau_etude  = 'monModele';

  14. #14
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    deb 
    parametre
     
    for indxscenario = 1:3
      eval(sprintf('scenario%i',indxscenario));
      reseau_etude  = 'reseau_etude';
      simout = sim (reseau_etude);
      resultat(indxscenario) = postTraitement(simout);
    end
    analyse(resultat);
    j'ai écrit ce code, ça l'air de tourner le modèle !! par contre j'ai l'impression qu'il a traité que le premier scenario, d'ailleurs dans workspace , je trouve H1dev=0,H2dev=0 et H3dev=0
    en plus de ça j'ai reçu ce message d'erreur :
    Error in ==> execute2 at 8
      resultat(indxscenario) = postTraitement(simout);
    merci et désolé

  15. #15
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    si tu as une erreur à la ligne 8, cela implique que ta boucle for s'est arrête et donc il n'a exécuté qu'une simulation, avec le scénario 1. met cette ligne en commentaire et tu verra qu'il exécute tes 3 scénarios
    qu'as tu écris dans la fonction postTraitement ?

  16. #16
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    J'ai réussi à écrire un programme de simulation automatique. J'ai procédé autrement et ceci en utilisant le bloc set param dans Simulink et cela m'a permis de résoudre le problème..
    Par contre maintenant je souhaiterai bien que mon programme me donne le meilleur scénario en prenant en considération les autres variables.
    Je m'explique, le programme que j'ai écrit m'a permis de faire 8 simulations automatiques, sans m'indiquer lequel des scénarios est le meilleur ?
    Meilleur scénario ( Hdev1,2et3) = Min de Volume rejeté dans le milieu naturel mais les volumes de débordement 1,2 et 3 doivent être nuls.
    Avez-vous une idée sur ça ?

    Merci

  17. #17
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    oui : fais ce que je te dis depuis le début!
    tu lance tes simulations avec sim et tu récupères les sorties de simulations que tu souhaites (to workspace, logging signal ...) et tu les traites via des scripts matlab
    set_param c'est un peu lourd comme méthode pour juste changer les valeurs de 3 variables, mais bon, si ça marche ...

  18. #18
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Oui, exactement mais comme je te l'avais dit avant je ne suis pas forte en programmation et du coup j'ai eu du mal à comprendre ce tu m'avais dit !
    J'essaye maintenant d'écrire un programme MATLAB qui me permet de savoir directement le meilleur scénario (déterminer les valeurs de Hdev1,2et3 qui ont provoqué le minimum de volume rejeté dans le milieu naturel tout en maintenant des volumes de débordement Vdeb1,2 et 3 nuls) et là je suis bloquée !
    Merci

  19. #19
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    et tu es bloquée ou ? qu'as tu écris ?

Discussions similaires

  1. Utiliser un code MATLAB dans une application Android
    Par Spydeus dans le forum MATLAB
    Réponses: 5
    Dernier message: 17/11/2011, 01h07
  2. Utiliser un code MATLAB dans du code Java
    Par si_a7med dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/04/2011, 16h30
  3. Intégration d'un code Assembleur dans un code en C
    Par ifdo7a dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/12/2010, 13h15
  4. Utilliser du code matlab dans Java
    Par mehdiing dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/05/2007, 11h36
  5. Utilisation du code MATLAB dans environnement .NET
    Par SOPRA-Eherve dans le forum MATLAB
    Réponses: 5
    Dernier message: 28/11/2006, 12h43

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