001    // import org.apache.commons.math.ode.*;
002    import org.apache.commons.math3.ode.*;
003    
004    /** Retrieves the solution from a {@link ContinuousOutputModel}.<br>
005      * <br>
006      * See <a target="_blank" href="../CommonsMath_ODE_RLC_circuit~Demo.jxn">CommonsMath_ODE_RLC_circuit~Demo.jxn</a>
007      * for an example.
008      */  
009    public class JxnCOMAnalyzer
010    {
011       private JxnCOMAnalyzer()
012       {
013       }
014    
015       /** Returns an array of state values <code>y<sub>iState</sub>(t<sub>k</sub>)</code> for <code> t<sub>k</sub> </code> values 
016         * given in the array {@code t}.
017         * @param com model available from the integrator. See {@link ODEIntegrator#addStepHandler ODEIntegrator.addStepHandler(...)}
018         * and {@link ContinuousOutputModel}
019         * @param t array of points in time where output is desired
020         * @param iState state for which output is desired 
021         * @return values of a state variable at given points in time     
022         */
023       public static double [] analyze( ContinuousOutputModel com, double [] t, int iState ) // throws DerivativeException
024       {
025          double [] yt = new double[ t.length ];
026          
027          for( int i = 0; i < t.length; i++ )
028          {
029             com.setInterpolatedTime( t[i] );
030             double [] y = com.getInterpolatedState();
031             yt[i] = y[iState];
032          }
033          
034          return yt;
035       }
036    }