Example: Adams-Gear ordinary differential equation solver
A mildly stiff ordinary differential equation problem is solved using a solver which implements the Adams-Gear method. The solution at time t=240 is printed.
import java.text.*;
import com.imsl.math.*;
public class OdeAdamsGearEx1 {
public static void main(String args[]) throws com.imsl.IMSLException {
final double k1 = 294.0;
final double k2 = 3.0;
final double k3 = 0.01020408;
OdeAdamsGear.Function f = new OdeAdamsGear.Function() {
public double [] f(double t, double y[]) {
double [] yprime = new double[y.length];
yprime[0] = -y[0] - y[0]*y[1] + k1*y[1];
yprime[1] = -k2*y[1] + k3*(1.0 - y[1])*y[0];
return yprime;
}
};
double t = 0.0;
double tend = 240.0;
double y[] = {1.0, 0.0};
OdeAdamsGear q = new OdeAdamsGear(f);
q.setNorm(q.ERROR_NORM_ABS);
q.setSolveMethod(q.SOLVE_CHORD_COMPUTED_JACOBIAN);
q.setTolerance(1.e-3);
q.solve(t, tend, y);
// Print Results
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(4);
nf.setMinimumFractionDigits(4);
System.out.println("Result = {" + nf.format(y[0]) + ","+nf.format(y[1]) + "}");
}
}
Output
Result = {0.3924,0.0013}
Link to Java source.