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 :

[ode45] Résoudre une équation seconde ordre


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut [ode45] Résoudre une équation seconde ordre
    bonsoir

    ça fait une semaine que je travaille sur ce programme mais j n'arrive pas à comprendre où est le problème donc s'il vous plait aidez moi à trouver la faute et aussi comment est ce que je dois écrire sous matlab que l'entrée u doit être inférieure a 180
    NB:je travaille sur matlab 6.5
    et merci d'avance pour vos réponse


    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
    function xdot = pendul(t, x)
    m =0.1;                        
    mc =1;                          
    M =m+mc;
    g=9.8;                    
    l=0.5;                              
     
    d=4/3*l*M-m*l*(cos(x(1)))^2;
    F=M*g*sin(x(1))-m*l*(x(2))^2*cos(x(1))*sin(x(1))/d;
    G=cos(x(1))/d;
     
    u=180;
    xdot(1)= x(2);
    xdot(2)=F+G*u
    x0=[-pi/60 0];
    tspan=[0 20];
    [t x]=ode45('pendule',tspan,x0);
    plot(t,u(:,1));

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Tout d'abord, on ne résout pas une équation ou un système différentiel, on l'intègre.

    En outre, il nous serait plus facile de te dépanner si tu nous disais quel est ton système différentiel et comment tu vois que la réponse n'est pas correcte.
    Jean-Marc Blanc

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut et bienvenue sur ce forum.

    Ton programme me paraît très bizarre : il n'a qu'une seule fonction où tout est mélangé. Voici ce que je te propose (non testé) :

    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
     
    function xdot = pendul(t, x, u)
     
    xdot = zeros(2,1); % xdot doit etre un vecteur colonne
     
    m =0.1;                        
    mc =1;                          
    M =m+mc;
    g=9.8;                    
    l=0.5;                              
     
    d=4/3*l*M-m*l*(cos(x(1)))^2;
    F=M*g*sin(x(1))-m*l*(x(2))^2*cos(x(1))*sin(x(1))/d;
    G=cos(x(1))/d;
     
    u=180;
    xdot(1)= x(2);
    xdot(2)=F+G*u
    et voici ton programme principal : main.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    u = 180;
     
    if(u > 180)
      error('u doit etre inferieur ou egal a 180')
    end
     
    x0=[-pi/60 ; 0]; % x0 doit etre un vecteur colonne
    tspan=[0 20];
    [t x]=ode45(@pendule,tspan,x0,[],u);
    plot(t,u(:,1));

  4. #4
    Membre habitué
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Salut et bienvenue sur ce forum.

    Ton programme me paraît très bizarre : il n'a qu'une seule fonction où tout est mélangé. Voici ce que je te propose (non testé) :

    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
     
    function xdot = pendul(t, x, u)
     
    xdot = zeros(2,1); % xdot doit etre un vecteur colonne
     
    m =0.1;                        
    mc =1;                          
    M =m+mc;
    g=9.8;                    
    l=0.5;       
     
     
     
     
     
    d=4/3*l*M-m*l*(cos(x(1)))^2;
    F=M*g*sin(x(1))-m*l*(x(2))^2*cos(x(1))*sin(x(1))/d;
    G=cos(x(1))/d;
     
    u=180;
    xdot(1)= x(2);
    xdot(2)=F+G*u
    et voici ton programme principal : main.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    u = 180;
     
    if(u > 180)
      error('u doit etre inferieur ou egal a 180')
    end
     
    x0=[-pi/60 ; 0]; % x0 doit etre un vecteur colonne
    tspan=[0 20];
    [t x]=ode45(@pendule,tspan,x0,[],u);
    plot(t,u(:,1));
    merci salseropom
    le programme n'a pas marché
    j'ai toujours le méme probleme (input argument 'x' is undefined.)

  5. #5
    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
    Bonjour.
    Le programme marche bien avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [t x]=ode23(@pendul,tspan,x0);
    plot(t,x);
    attention la function est pendul (sans le e)

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par nidjzaf Voir le message
    merci salseropom
    le programme n'a pas marché
    j'ai toujours le méme probleme (input argument 'x' is undefined.)
    Salut,
    effectivement, phryte a raison, c'est pendul (sans le e). Ensuite plot(t,u(:,1)) ne veut rien dire car ta sortie c'est x et non u.

    Je n'ai pas matlab sur moi. A quelle ligne ça plante. Si, comme dit phryte, ca marche avec ode23, ça doit marcher avec odeXX (ode45, ode15s, ode23tb etc...) car la syntaxe est la même. Après, qui dit algo différents dit résultats différents (ou légèrement différents)

    Si ça plante toujours, peux-tu faire un copier - coller de la sortie Matlab ?

  7. #7
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    ce que je dois faire c'est de tracer le trajectoire (théta) d'un pendule invérse je voulé vous ecrire son equation différentiel mais je ne sais comment le faire dans ce forum ,elle est écrite dans le programme que j'ai écrit (xdot(2) )
    Je reformule le problème:
    "Ecrire les équations qui régissent le comportement d'un pendule inverse, puis les intégrer en n'utilisant que du papier et un crayon."

    Est-tu capable, en faisant abstraction du temps nécessaire, de résoudre ce problème?
    Jean-Marc Blanc

  8. #8
    Membre habitué
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Salut!
    Tout d'abord, on ne résout pas une équation ou un système différentiel, on l'intègre.

    En outre, il nous serait plus facile de te dépanner si tu nous disais quel est ton système différentiel et comment tu vois que la réponse n'est pas correcte.
    Jean-Marc Blanc
    désolé pour le retard
    ce que je dois faire c'est de tracer le trajectoire (théta) d'un pendule invérse je voulé vous ecrire son equation différentiel mais je ne sais comment le faire dans ce forum ,elle est écrite dans le programme que j'ai écrit (xdot(2) )

Discussions similaires

  1. Résoudre une équation du second degré
    Par Emmanuel Delahaye dans le forum Télécharger
    Réponses: 3
    Dernier message: 04/12/2011, 02h59
  2. Résoudre une équation ax²+bx+c=0
    Par Ammo_dz dans le forum Pascal
    Réponses: 2
    Dernier message: 02/01/2008, 22h41
  3. Réponses: 2
    Dernier message: 22/11/2007, 14h58
  4. Réponses: 8
    Dernier message: 08/04/2007, 01h38
  5. Résoudre une équation sans isoler y
    Par ido123 dans le forum MATLAB
    Réponses: 4
    Dernier message: 21/12/2006, 03h35

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