package odeadapt; import java.awt.*; /** * integrate the ODE of a damped peridically driven pendulum<br> * producing results at fixed time steps */ public class TestOdeAdapt1 { public static void main(String[] args) { // set up the ODE double t0 = 0.0; double phi0 = Math.PI / 2.0; double phidot0 = 0.0; PendelErzwODE ode = new PendelErzwODE(phi0, phidot0, t0); ode.setA(115.0 / 100.0); // set up the solver double dt = 1.0 / 10.0; double tEnd = 200.0; ODEAdaptiveSolver solv = new ODEAdaptiveSolver(ode, t0 + dt); solv.setAbsoluteTolerance(1.0 / 1000000000.0); // arrays to store the results int maxsteps = (int) Math.round(tEnd / dt); // run until tEnd double[] t = new double[maxsteps + 1]; double[] s = new double[maxsteps + 1]; // solve int nSteps = 0; try { for (int i = 0; i < maxsteps; i++) { t[i] = solv.t; s[i] = solv.x.get(0,0); nSteps += solv.nextStep(dt); } } catch (StepsizeTooSmallException e) { e.printStackTrace(); } t[maxsteps] = solv.t; s[maxsteps] = solv.x.get(0,0); // display the results System.out.println("total number of steps: " + nSteps); Frame frame = new SimplePlot("TestOdeAdapt1", 500, 300, t, s); } }