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 :

ode23 + fonction [Débutant]


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 4
    Points
    4
    Par défaut ode23 + fonction
    Bonjour, j'aimerais obtenir un graphe donnant la position x d'un ressort autour de son point d'équilibre en fonction du temps.

    Pour cela, j'ai créé une fonction f1 (dans un fichier f1.m) donnant l'équation différentielle de ce mouvement. J'ai un 2ème fichier qui reprend f1, utilise ode23 et devrait tracer un graphe de x en fonction de t.

    Seulement il m'affiche des messages d'erreurs que je ne comprends pas.

    La fichier principal serait bon mais le f1.m affiche des message d'erreurs

    Je vous mets ici ce que j'ai écris.

    f1.m:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function dx = f1(t,x);
    global k M
     
    x=[0 0];
    dx=zeros(2,1);
    dx(1)=x(2);
    dx(2)=-k/M*(x(1));
    fichier principal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    clc;clear;clf;
     
    k=2;
    M=2;
     
    [t,x]=ode23('f1',[0 10],[5 0]);
     
    plot (t,x)
    Merci de votre aide!

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

    Quels sont ces messages d'erreur?

    Remarques:

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Ok merci.

    le message d'erreur concerne la première ligne de f1.m ou il me dit:
    input argument 't' might be unused, althought a letter one is used. Consider replacing it by ~.
    et aussi:
    extra semicolon is unnecessary.
    (Si je remplace x et t par ~, le premier message d'erreur s’enlève mais je ne comprend pas pourquoi.)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas un message d'erreur, mais d'avertissement.
    Ceci est du au fait que tu n'utilises pas l'entrée t. MATLAB te conseille alors de le remplacer par le symbole ~.
    Le deuxième message (d'avertissement aussi) concerne le point-virgule ; placé à la fin de la ligne function dx = f1(t,x); qui ne sert à rien.
    Ainsi donc MATLAB te conseille d'écrire:

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    D'accord merci je vois.

    Par contre je suis vraiment désolé mais tout a l'heure j'avais un bug, les erreurs ne s'affichaient pas dans MATLAB apparemment mais juste les avertissements

    Bon c'est revenu, et voila ce que j'obtiens quand je lance le fichier principal :

    ???  In an assignment  A(I) = B, the number of elements in B and
     I must be the same.
    
    Error in ==> f1 at 7
    dx(2)=-k/M*(x(1));
    Error in ==> odearguments at 98
    f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.
    
    Error in ==> ode23 at 171
    [neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
    
    Error in ==> projet at 6
    [t,x]=ode23('f1',[0 10],[5 0]);
    J'ai essayé de modifier un peu a l'aveugle pour faire partir ces messages, mais sans grand étonnement je n'ai pas réussi...

  6. #6
    Invité
    Invité(e)
    Par défaut
    >> In an assignment A(I) = B, the number of elements in B and I must be the same.
    Tes variables k et/ou M n'auraient pas changé entre-temps?

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci! J'ai transféré
    dans f1.m et je n'ai plus de message d'erreur pour le fichier principal.

    Par contre, j'ai encore un dernier soucis,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [t,x]=ode23('f1',[0 10],[5 0]);
    pour moi le [5 0] représente le x et le t initiale, mais il le prend comme 2 x initiaux, ce qui fait que j'ai 2 graphes.

    Enfin quand je lance f1.m il affiche ceci:

    ??? Input argument "x" is undefined.
    
    Error in ==> f1 at 9
    dx(1)=x(2);
    J'ai été voir sur la FAQ mais ca ne m'a pas tellement aidé a resoudre le probleme. Ca viendrait du fait que j'ai un x(1) et un x(2)?

    Encore merci de votre aide.

    Je vous remet mon code:

    f1.m

    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
    function dx = f1(~,x)
     
    global k M
     
    k=2;
    M=2;
     
    dx=zeros(2,1);
    dx(1)=x(2);
    dx(2)=-k/M*(x(1));
     
    fichier principal:
     
    clc;clear;clf;
     
    axis([-6 20 -6 6]);hold on;
    [t,x]=ode23('f1',0:0.01:10,[5 -1])
     
    plot (t,x)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Le t0 initial est imposé par la première valeur du vecteur temps rentrée (2ème argument) dans la fonction, le x0 comme tu as pu le voir par le 3ème argument.
    Ce qui donne alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    t0 = 0;
    pas = 0.01;
    tFinal = 10;
    x0 = 5;
    [t,x]=ode23('f1',t0:pas:tFinal,x0);
    Lorsque tu effectues un simple Run de ton fichier f1.m, c'est tout à fait normal que tu obtiennes ce message d'erreur.
    Le code de ta fonction utilise la variable d'entrée x (à défault de ne pas utiliser t). Si tu appuies sur F5, ou tapes en ligne de commande f1, tu ne rentres aucun argument, et la valeur de x est alors inconnue pour MATLAB: elle n'a pas été définie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>t = ...
    >>x = ...
    >>f1(t,x)
    À noter tout de même la syntaxe >>f1(~,x) n'est pas bonne, contrairement à [argout1 , ~ , argout3] = maFonction(<mes entrées>);.

    Dernier point: Pour ce qui est de ma remarque concernant l'évitement de variables globales, on aurait le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    clc;clear;clf;
    
    k=2;
    M=2;
    axis([-6 20 -6 6]);hold on;
    [t,x]=ode23(@(t,x) f1(t,x,k,M),0:0.01:10,[5 -1])
    plot (t,x)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function dx = f1(t,x,k,M)
    
    dx=zeros(2,1);
    dx(1)=x(2);
    dx(2)=-k/M*(x(1));

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Voila tout est ok maintenant!

    Merci beaucoup pour votre aide

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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