import org.apache.commons.math3.linear.MatrixUtils; import org.apache.commons.math3.linear.RealMatrix; import org.apache.commons.math3.ode.FirstOrderDifferentialEquations; import org.apache.commons.math3.ode.FirstOrderIntegrator; import org.apache.commons.math3.ode.nonstiff.DormandPrince853Integrator; import org.apache.commons.math3.ode.sampling.StepHandler; import org.apache.commons.math3.ode.sampling.StepInterpolator; import org.apache.commons.math3.random.CorrelatedRandomVectorGenerator; import org.apache.commons.math3.random.GaussianRandomGenerator; import org.apache.commons.math3.random.JDKRandomGenerator; import org.apache.commons.math3.random.RandomGenerator; public class CommonMath { private static class CircleODE implements FirstOrderDifferentialEquations { private double[] c; private double omega; public CircleODE (double[] c, double omega) { this.c = c; this.omega = omega; } public int getDimension () { return 2; } public void computeDerivatives (double t, double[] y, double[] yDot) { yDot[0] = omega * (c[1] - y[1]); yDot[1] = omega * (y[0] - c[0]); } public static void runExample1() { FirstOrderIntegrator integrator = new DormandPrince853Integrator(1.0e-8, 100.0, 1.0e-10, 1.0e-10); FirstOrderDifferentialEquations ode = new CircleODE(new double[] { 1.0, 1.0 }, 0.1); double[] y = new double[] { 0.0, 1.0 }; // initial state StepHandler stepHandler = new StepHandler() { public void init (double t0, double[] y0, double t) { } public void handleStep (StepInterpolator interpolator, boolean isLast) { double t = interpolator.getCurrentTime(); double[] y = interpolator.getInterpolatedState(); System.out.println("->" + t + " " + y[0] + " " + y[1]); } }; integrator.addStepHandler(stepHandler); integrator.integrate(ode, 0.0, y, 16.0, y); // now y contains final state // at time // t=16.0 } } public static void main (String[] args) { CircleODE.runExample1(); double[] mean = { 1, 2 }; double[][] cov = { { 9, 3 }, { 3, 16 } }; RealMatrix covariance = MatrixUtils.createRealMatrix(cov); // Create and seed a RandomGenerator (could use any of the generators in the // random package here) RandomGenerator rg = new JDKRandomGenerator(); rg.setSeed(17399225432l); // Fixed seed means same results every time // Create a GassianRandomGenerator using rg as its source of randomness GaussianRandomGenerator rawGenerator = new GaussianRandomGenerator(rg); // Create a CorrelatedRandomVectorGenerator using rawGenerator for the // components CorrelatedRandomVectorGenerator generator = new CorrelatedRandomVectorGenerator(mean, covariance, 1.0e-12 * covariance.getNorm(), rawGenerator); // Use the generator to generate correlated vectors @SuppressWarnings("unused") double[] randomVector = generator.nextVector(); } }