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 :

[ode] Problème d'execution d'un M-file


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut [ode] Problème d'execution d'un M-file
    Bonjour,

    Je souhaite résoudre une ODE sous MATLAB 7.1.0.246 (R14) Service Pack 3. Après quelques essais infructueux (message d'erreur = "??? Input argument "y" is undefined."), j'ai parcouru l'aide, les FAQ et autres post, en vain.

    J'ai donc simplement testé l'exemple de l'aide que cite Rostomus :
    Citation Envoyé par rostomus Voir le message
    -Question: Comment utiliser les fonctions "ode" pour résoudre des équations différentielles?
    -Réponse:
    (...) Pour résoudre un systeme d'équations differentielles, vous devez créer une fonction m.file (...). Par exemple si on veut résoudre le systeme:


    On crée la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function dy = rigid(t,y)
    dy = zeros(3,1);    % a column vector
    dy(1) = y(2) * y(3);
    dy(2) = -y(1) * y(3);
    dy(3) = -0.51 * y(1) * y(2);
    [T,Y] = ode45(@rigid,[0 12],[0 1 1]);
    plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
    J'obtiens le même message d'erreur que précédemment, donc ma méthode ne doit pas être la bonne. Je vais donc vous présenter ma démarche.
    Merci de me corriger !
    1. J'ouvre un nouveau fichier M-file que j'enregistre sous "rigid.m".
    2. J'y copie le code suivant (et j'enregistre) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
       
      function dy = rigid(t,y)
      dy = zeros(3,1);    % a column vector
      dy(1) = y(2) * y(3);
      dy(2) = -y(1) * y(3);
      dy(3) = -0.51 * y(1) * y(2);
      [T,Y] = ode45(@rigid,[0 12],[0 1 1]);
      plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
    3. Je retourne dans la fenêtre de commande et j'y entre :
      >> rigid
      (NB : je peux également cliquer sur l'icône "Run" de l'éditeur, les conséquences sont les mêmes.)
    4. J'obtiens invariablement le message d'erreur suivant :
      ??? Input argument "y" is undefined.
      Error in ==> rigid at 3
      dy(1) = y(2) * y(3);


    Je ne comprends pas bien ce qui se passe. Est-ce un problème de définition du type de variable pour y (vecteur col?), d'utilisation de la fonction dans un Mfile?

    Si je n'ai pas été clair ou s'il manque des infos, n'hésitez pas à demander des précisions.

    Merci de m'aider.
    Arnaud

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    sALUT/
    rigid
    Il manque les paramètres d'entrée et de sortie.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Salut Phryte,

    ok, je viens de comprendre : j'ai essayé en entrant des paramètres d'entrée du type (t entier, y vecteur(3,1)) avec t dans [0 12] :

    >> rigid(4,[1 2 3])
    Mais j'obtiens maintenant ce message d'erreur et toujours pas de plot (normal j'imagine vu que mon ODE n'est pas résolue !) :
    ??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
    to change the limit. Be aware that exceeding your available stack space can
    crash MATLAB and/or your computer.

    Error in ==> funfun\private\odearguments at 173
    normy = [];
    Mais j'ai donc plusieurs questions :
    • Que représente les paramètres d'entrée par rapport à l'ODE ? Pour moi, tout est défini dans la fonction : les 3 fonctions yi, les conditions initiales [0 1 1] des yi et l'intervalle d'intégration [0 12].
      Donc,
    • que représente la valeur entrée pour t ?
    • que représente la valeur entrée pour y, c'est-à-dire pour [y1 y2 y3] ?
    • quels paramètres (t,y) choisir pour résoudre mon ODE ?


    Merci de votre aide,
    Arnaud

  4. #4
    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
    Ce n'est pas ce que Rostomus a expliqué...

    D'abord écrire la fonction dans un fichier m :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function dy = rigid(t,y)
    dy = zeros(3,1);    % a column vector
    dy(1) = y(2) * y(3);
    dy(2) = -y(1) * y(3);
    dy(3) = -0.51 * y(1) * y(2);
    Et ensuite dans le Command Window (ou dans une autre fonction) faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [T,Y] = ode45(@rigid,[0 12],[0 1 1]);
    plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
    Sinon tu fais des appels récursifs à ta fonction rigid (rigid appelle ode45 qui appelle rigid qui appelle ode45 qui appelle rigid qui appelle ...)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut

    OK, effectivement, ça marche beaucoup mieux ainsi ! MERCI.
    Du coup, mon ODE (la vraie) est résolue

    Merci pour votre réactivité!
    Arnaud

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

Discussions similaires

  1. [Tomcat][plugin]Problème d'execution de Tomcat 5
    Par Carlito_superheros dans le forum Eclipse Java
    Réponses: 14
    Dernier message: 11/03/2005, 13h56
  2. Problème d'index avec load data file
    Par bruno782 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/03/2005, 12h11
  3. problème d'execution de JSP avec eclipse - TOMCAT
    Par Staron dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/12/2004, 21h48
  4. Problème avec le lieur "Expected a file name : "
    Par RA/m dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/06/2004, 08h41
  5. problème lancement executable avec winexec()
    Par semenzato dans le forum MFC
    Réponses: 5
    Dernier message: 19/01/2004, 11h48

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