/** Simulation d'un pendule rigide. * version 'de luxe' * compiler/executer comme suit: * javac SimulPendule * java SimulPendule theta_init omega_init > pendule.data * 2008 Adrian Daerr (+conseils Bip, Oresama, ...), Univ Paris Diderot * domaine public */ import java.text.MessageFormat; public class SimulPendule { private static void usage() { System.err.println("usage : SimulPendule [ theta0 omega0 ]"); System.exit(1); } public static void main(String args[]) { // lire les conditions initiales dans la liste des arguments double theta0 = 0.0; double omega0 = 1.99; switch(args.length) { case 0: break; case 2: try { theta0 = Double.parseDouble(args[0]); omega0 = Double.parseDouble(args[1]); } catch (NumberFormatException nfe) {// il y a eu un problème System.err.println("Erreur de conversion: "+nfe); usage(); } break; default: usage(); } // initialiser un pendule avec les bonnes conditions initiales Pendule systeme = new Pendule(theta0, omega0); final double tfinal = 50.0, h = 0.05;// durée simul, pas de temps // créer l'intégrateur souhaité pour notre système Integrateur simul = new RungeKutta4(systeme, h); double t = 0.0; int n=0; while (t < tfinal) { t = (n++)*h; System.out.printf("%g %g %g\n", t, systeme.getTheta(), systeme.getOmega()); simul.integre(); } } }