Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RESOLUTION EQUATION DIFFERENTIELLE PAR LA METHODE D'EULER


Information sur la source

Description

Cliquez pour voir la capture en taille normale
La méthode d'Euler permet de résoudre numériquement des équations differentielles. Il est vrai que cette méthode est moins bonne que Runge Kutta car elle est moins précise.
Ici l'equation a resoudre est:
p''+w^2sin(p)=0
pour commencer il faut former un système autonome, c'est à dire:
on pose:
x'=y=f(x,y)
=> y'+w^2sin(x)=0 <=> y' = -w*w*sin(x)=g(x,y)

Théorème de Taylor: f(x+h)=f(x)+h*f '(x)+o(h²)
ou encore:
x(t+tau)=x(t)+tau*x'(t)+o(tau²) soit: xn+1=xn(t)+tau*xn'(t) et yn+1=yn+tau*yn'

Il suffit ensuite d'ouvrir le fichier results.txt et de tracer les graphiques à l'aide d'un tableur de type Excel ou Gnuplot.
Par contre si quelqu'un sait comment tracer directement sous java x en fonction de i et y en fonction de x ça serait bien de me le faire savoir.
Je voudrais remercier Libeur pour son aide dans la gestion des fichiers.
 

Source

  • import java.io.*;
  • public class Euler {
  • public static void main(String args[] ) throws Exception {
  • double g;
  • double tau;
  • double w;
  • int nit,i;
  • double x;
  • double y;
  • double l;
  • g=9.81; // constante de gravitation.
  • y=0; // condition initiale sur y.
  • i=0;
  • nit=1000; // nombre d'itérations.
  • tau=0.01; // pas d'intégration.
  • l=0.05; // longueur du fil.
  • x=0.5; // condition initiale sur x.
  • w=Math.sqrt(g/l); // pulsation;
  • try
  • {
  • FileWriter fich = new FileWriter("results.txt"); // On sauvegardera dans results.txt.
  • for(i=1;i<=nit;i++)
  • {
  • x=x+tau*y;
  • y=y+tau*((-w*w)*Math.sin(x));
  • String s = i+ " "+x + " "+y + "\n";
  • fich.write(s); // On sauvegarde periodiquement i, x, y dans le fichier results.txt.
  • }
  • catch (Exception e) // bloc d'instructions exécutées en cas d'exception.
  • System.out.println("Fin d'execution");
  • }
  • }
import java.io.*;
public class Euler {
public static void main(String args[] ) throws Exception {
double g;
double tau;
double w;
int nit,i;
double x;
double y;
double l;
g=9.81; // constante de gravitation.
y=0; // condition initiale sur y.
i=0;
nit=1000; // nombre d'itérations.
tau=0.01; // pas d'intégration.
l=0.05;  // longueur du fil. 
x=0.5; // condition initiale sur x.
w=Math.sqrt(g/l); // pulsation;
try
{
FileWriter fich = new FileWriter("results.txt"); // On sauvegardera dans results.txt.
for(i=1;i<=nit;i++)
{
x=x+tau*y;
y=y+tau*((-w*w)*Math.sin(x));
String s = i+ " "+x + " "+y + "\n";
fich.write(s); // On sauvegarde periodiquement i, x, y dans le fichier results.txt.
}
catch (Exception e) // bloc d'instructions exécutées en cas d'exception.
System.out.println("Fin d'execution");
}
}

Commentaires et avis

signaler à un administrateur
Commentaire de shaud7 le 07/01/2005 12:05:25

Ce code n'est pas correct, il y a des erreurs lors de la compilation.

signaler à un administrateur
Commentaire de Jarod1980 le 07/01/2005 14:35:20

J'ai fais une petite erreur en voulant aller trop vite; j'ai oublié de mettre quelques lignes. Voici ce qu'il faut faire pour éviter d'avoir des erreurs lors de la compilation:
après la ligne :
fich.write(s);
}
il faut rajouter:
fich.close(); // On ferme le fichier.
}
catch (Exception e)
{
System.out.println("");
}
Voilà, normalement il n'y a plus d'erreurs de compilations. Excusez moi encore.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.