On 10/22/14 8:34 AM, l...@apache.org wrote:
> Repository: commons-math
> Updated Branches:
>   refs/heads/master 79ae77fda -> 25aa4bd36
>
>
> Provide access to state derivatives in ContinuousOutputModel.
>
> JIRA: MATH-1160
>
> Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
> Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/25aa4bd3
> Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/25aa4bd3
> Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/25aa4bd3
>
> Branch: refs/heads/master
> Commit: 25aa4bd3665d8b265f03fa2b3e7ab6ee68256367
> Parents: 79ae77f
> Author: Luc Maisonobe <l...@apache.org>
> Authored: Wed Oct 22 17:34:29 2014 +0200
> Committer: Luc Maisonobe <l...@apache.org>
> Committed: Wed Oct 22 17:34:29 2014 +0200
>
> ----------------------------------------------------------------------
>  src/changes/changes.xml                         |  3 +++
>  .../math3/ode/ContinuousOutputModel.java        | 14 +++++++++++++
>  .../math3/ode/ContinuousOutputModelTest.java    | 21 +++++++++++++-------
>  3 files changed, 31 insertions(+), 7 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/commons-math/blob/25aa4bd3/src/changes/changes.xml
> ----------------------------------------------------------------------
> diff --git a/src/changes/changes.xml b/src/changes/changes.xml
> index bb5c525..9350d6b 100644
> --- a/src/changes/changes.xml
> +++ b/src/changes/changes.xml
> @@ -73,6 +73,9 @@ Users are encouraged to upgrade to this version as this 
> release not
>    2. A few methods in the FastMath class are in fact slower that their
>    counterpart in either Math or StrictMath (cf. MATH-740 and MATH-901).
>  ">
> +      <action dev="luc" type="fix" issue="MATH-1160" >
> +        Provide access to state derivatives in ContinuousOutputModel.
> +      </action>
>        <action dev="luc" type="fix" issue="MATH-1138" due-to="Hank Grabowski">
>          Fixed bicubic spline interpolator, using Akima splines.
>        </action>
>
> http://git-wip-us.apache.org/repos/asf/commons-math/blob/25aa4bd3/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java
> ----------------------------------------------------------------------
> diff --git 
> a/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java 
> b/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java
> index 599eab9..d9f6192 100644
> --- a/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java
> +++ b/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java
> @@ -332,12 +332,25 @@ public class ContinuousOutputModel
>     * Get the state vector of the interpolated point.
>     * @return state vector at time {@link #getInterpolatedTime}
>     * @exception MaxCountExceededException if the number of functions 
> evaluations is exceeded
> +   * @see #getInterpolatedDerivatives()
>     * @see #getInterpolatedSecondaryState(int)
>     */
>    public double[] getInterpolatedState() throws MaxCountExceededException {
>      return steps.get(index).getInterpolatedState();
>    }
>  
> +  /**
> +   * Get the derivatives of the state vector of the interpolated point.
> +   * @return derivatives of the state vector at time {@link 
> #getInterpolatedTime}
> +   * @exception MaxCountExceededException if the number of functions 
> evaluations is exceeded
> +   * @see #getInterpolatedState()
> +   * @see #getInterpolatedSecondaryState(int)
> +   * @since 3.4
> +   */
> +  public double[] getInterpolatedDerivatives() throws 
> MaxCountExceededException {
> +    return steps.get(index).getInterpolatedDerivatives();

Do you maybe want to make a copy here?

Phil
> +  }
> +
>    /** Get the interpolated secondary state corresponding to the secondary 
> equations.
>     * @param secondaryStateIndex index of the secondary set, as returned by 
> {@link
>     * 
> org.apache.commons.math3.ode.ExpandableStatefulODE#addSecondaryEquations(
> @@ -345,6 +358,7 @@ public class ContinuousOutputModel
>     * ExpandableStatefulODE.addSecondaryEquations(SecondaryEquations)}
>     * @return interpolated secondary state at the current interpolation date
>     * @see #getInterpolatedState()
> +   * @see #getInterpolatedDerivatives()
>     * @since 3.2
>     * @exception MaxCountExceededException if the number of functions 
> evaluations is exceeded
>     */
>
> http://git-wip-us.apache.org/repos/asf/commons-math/blob/25aa4bd3/src/test/java/org/apache/commons/math3/ode/ContinuousOutputModelTest.java
> ----------------------------------------------------------------------
> diff --git 
> a/src/test/java/org/apache/commons/math3/ode/ContinuousOutputModelTest.java 
> b/src/test/java/org/apache/commons/math3/ode/ContinuousOutputModelTest.java
> index 2f4053d..3a098ba 100644
> --- 
> a/src/test/java/org/apache/commons/math3/ode/ContinuousOutputModelTest.java
> +++ 
> b/src/test/java/org/apache/commons/math3/ode/ContinuousOutputModelTest.java
> @@ -63,22 +63,29 @@ public class ContinuousOutputModelTest {
>                      pb.getFinalTime(), new double[pb.getDimension()]);
>  
>      Random random = new Random(347588535632l);
> -    double maxError = 0.0;
> +    double maxError    = 0.0;
> +    double maxErrorDot = 0.0;
>      for (int i = 0; i < 1000; ++i) {
>        double r = random.nextDouble();
>        double time = r * pb.getInitialTime() + (1.0 - r) * pb.getFinalTime();
>        cm.setInterpolatedTime(time);
> -      double[] interpolatedY = cm.getInterpolatedState ();
> -      double[] theoreticalY  = pb.computeTheoreticalState(time);
> +      double[] interpolatedY    = cm.getInterpolatedState();
> +      double[] interpolatedYDot = cm.getInterpolatedDerivatives();
> +      double[] theoreticalY     = pb.computeTheoreticalState(time);
> +      double[] theoreticalYDot  = new double[pb.getDimension()];
> +      pb.doComputeDerivatives(time, theoreticalY, theoreticalYDot);
>        double dx = interpolatedY[0] - theoreticalY[0];
>        double dy = interpolatedY[1] - theoreticalY[1];
>        double error = dx * dx + dy * dy;
> -      if (error > maxError) {
> -        maxError = error;
> -      }
> +      maxError = FastMath.max(maxError, error);
> +      double dxDot = interpolatedYDot[0] - theoreticalYDot[0];
> +      double dyDot = interpolatedYDot[1] - theoreticalYDot[1];
> +      double errorDot = dxDot * dxDot + dyDot * dyDot;
> +      maxErrorDot = FastMath.max(maxErrorDot, errorDot);
>      }
>  
> -    Assert.assertTrue(maxError < 1.0e-9);
> +    Assert.assertEquals(0.0, maxError,    1.0e-9);
> +    Assert.assertEquals(0.0, maxErrorDot, 4.0e-7);
>  
>    }
>  
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to