Resolution equation differentielle par la methode d'euler

Soyez le premier à donner votre avis sur cette source.

Snippet vu 26 838 fois - Téléchargée 38 fois

Contenu du snippet

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 / Exemple :


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");
}
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
1
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.
Messages postés
6
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
9 juin 2005

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.