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

Algorithmes et structures de données Discussion :

probleme de divergence avec runge kutta d'ordre 2 pour un pendule simple


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 60
    Points : 36
    Points
    36
    Par défaut probleme de divergence avec runge kutta d'ordre 2 pour un pendule simple
    Bonjour,

    j'applique la méthode de runge kutta à l'ordre 2 pour résoudre l'équation différentielle du pendule simple sans frottement. Je la réduit à un système d'ordre 1 comme ceci:

    u=d(theta)/dt
    du/dt=(g/l)cos(theta)=F(theta,g,l)

    avec F la fonction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    long double F(long double theta, long double g, long double a)
    { 
      long double r;
     
      r=(g/a)*cosl(theta);
     
      return r;
    }

    je calcule les coefficients qui sont dans un tableau k[4][4] en prenant comme vecteur : (dt/dt=1,d^2 t/dt^2=0,dtheta_dt,F(theta,g,l)=d^2theta/dt^2)

    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
     
     
      k[0][0]=h;
      k[0][1]=0;
      k[0][2]=h*dtheta_dt[i];
      k[0][3]=h*F(theta[i],g,l);
     
      k[1][0]=h;
      k[1][1]=h*k[0][1]/2;  
      k[1][2]=h*(dtheta_dt[i]+(k[0][2]/2));
      k[1][3]=h*F((theta[i]+(k[0][3]/2)),g,l);
     
     
     
      k[2][0]=h;
      k[2][1]=h*k[1][1]/2;  
      k[2][2]=h*(dtheta_dt[i]+(k[1][2]/2));
      k[2][3]=h*F((theta[i]+(k[1][3]/2)),g,l); 
     
     
     
      k[3][0]=h;
      k[3][1]=h*k[2][1];
      k[3][2]=h*(dtheta_dt[i]+k[2][2]);
      k[3][3]=h*F((theta[i]+k[2][3]),g,l);
    et puis la formule de récurrence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      t[i+1]=t[i]+h*((k[0][0]+2*(k[1][0]+k[2][0])+k[3][0])/6);
      theta[i+1]=theta[i]+h*((k[0][2]+2*(k[1][2]+k[2][2])+k[3][2])/6);
    Les résultats sont représentés sur les deux graphiques joints. pend.pdf montre le résultat sur 300s (abcisse) et pend2.pdf sur 30s.

    Je ne comprends pas pourquoi l'amplitude des oscillations augmente avec le
    temps comme c'est montré sur pend.pdf. Est ce lié à l'erreur de la méthode numérique utilisée ? je prends comme conditions initiales t[0]=0,theta[0]=0 et dtheta_dt[0]=0 et h le pas d'incrémentation égal à 0.01. je pense que le calcul des coef est bon.

    Je vous remercie d'avance pour toute aide.

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    essayez de diminuer h. Un pas d'intégration trop grand conduit presque toujours à ce type de comportement.
    Utiliser de préférence RK4 ( on gagne 2 ordres de grandeurs sur la précision)

Discussions similaires

  1. Intégration avec runge kutta
    Par pedigus dans le forum Mathématiques
    Réponses: 1
    Dernier message: 27/02/2007, 14h02
  2. Runge Kutta d'ordre 4
    Par Razgriz dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 19/12/2006, 08h13
  3. Runge Kutta d'ordre 4
    Par Physicien dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 08/12/2006, 16h50
  4. probleme avec runge kutta dimension 4
    Par fab13 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/11/2006, 21h47

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