/* intégration du mouvement du pendule par Runge-Kutta 4 * version minimaliste * compiler/executer comme suit: * javac Pendule_rk4_mini * java Pendule_rk4_mini > pendule.data * 2008 Adrian Daerr, Univ Paris Diderot * domaine public */ import static java.lang.Math.*; public class Pendule_rk4_mini { public static void main(String args[]) { final double tfinal=50.0, dt=0.05; double t=0.0; double theta=0.0, omega=1.99;// conditions initiales double theta_int, omega_int; double dtheta1, domega1; double dtheta2, domega2; double dtheta3, domega3; double dtheta4, domega4; int n=0; while (t<tfinal) { t = n*dt; // afficher l'état du système System.out.println(""+t+" "+theta+" "+omega); // integrer d'un pas de temps dtheta1 = omega; domega1 = -sin(theta); theta_int = theta + 0.5*dt*dtheta1; omega_int = omega + 0.5*dt*domega1; dtheta2 = omega_int; domega2 = -sin(theta_int); theta_int = theta + 0.5*dt*dtheta2; omega_int = omega + 0.5*dt*domega2; dtheta3 = omega_int; // ce programme contient des traces d'Omega3 ! domega3 = -sin(theta_int); theta_int = theta + dt*dtheta3; omega_int = omega + dt*domega3; dtheta4 = omega_int; domega4 = -sin(theta_int); theta = theta + dt*(dtheta1 + 2*dtheta2 + 2*dtheta3 + dtheta4)/6; omega = omega + dt*(domega1 + 2*domega2 + 2*domega3 + domega4)/6; n++; } } }