TestOdeAdapt1


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

previous    contents     next

Peter Junglas 20.12.1999