On 10/22/14 8:34 AM, [email protected] 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 <[email protected]>
> Authored: Wed Oct 22 17:34:29 2014 +0200
> Committer: Luc Maisonobe <[email protected]>
> 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: [email protected]
For additional commands, e-mail: [email protected]