You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2009/05/21 23:21:16 UTC

svn commit: r777263 - /commons/proper/math/trunk/src/java/org/apache/commons/math/ode/NordsieckTransformer.java

Author: luc
Date: Thu May 21 21:21:15 2009
New Revision: 777263

URL: http://svn.apache.org/viewvc?rev=777263&view=rev
Log:
trigger an error when the transform is not invertible

Modified:
    commons/proper/math/trunk/src/java/org/apache/commons/math/ode/NordsieckTransformer.java

Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/ode/NordsieckTransformer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/ode/NordsieckTransformer.java?rev=777263&r1=777262&r2=777263&view=diff
==============================================================================
--- commons/proper/math/trunk/src/java/org/apache/commons/math/ode/NordsieckTransformer.java (original)
+++ commons/proper/math/trunk/src/java/org/apache/commons/math/ode/NordsieckTransformer.java Thu May 21 21:21:15 2009
@@ -24,6 +24,7 @@
 import org.apache.commons.math.linear.DefaultFieldMatrixPreservingVisitor;
 import org.apache.commons.math.linear.FieldMatrix;
 import org.apache.commons.math.linear.FieldMatrixImpl;
+import org.apache.commons.math.linear.InvalidMatrixException;
 import org.apache.commons.math.linear.RealMatrix;
 import org.apache.commons.math.linear.RealMatrixImpl;
 import org.apache.commons.math.linear.decomposition.FieldDecompositionSolver;
@@ -100,15 +101,18 @@
 
     /**
      * Build a transformer for a specified order.
-     * <p>states considered are y<sub>k-p</sub>, y<sub>k-(p+1)</sub> ...
+     * <p>States considered are y<sub>k-p</sub>, y<sub>k-(p+1)</sub> ...
      * y<sub>k-(q-1)</sub> and scaled derivatives considered are
-     * h y'<sub>k-r</sub>, h y'<sub>k-(r+1)</sub> ... h y'<sub>k-(s-1)</sub>
+     * h y'<sub>k-r</sub>, h y'<sub>k-(r+1)</sub> ... h y'<sub>k-(s-1)</sub><\p>
      * @param p start state index offset in multistep form
      * @param q end state index offset in multistep form
      * @param r start state derivative index offset in multistep form
      * @param s end state derivative index offset in multistep form
+     * @exception InvalidMatrixException if the selected indices ranges define a
+     * non-invertible transform (this typically happens when p == q)
      */
-    public NordsieckTransformer(final int p, final int q, final int r, final int s) {
+    public NordsieckTransformer(final int p, final int q, final int r, final int s)
+        throws InvalidMatrixException {
 
         // from Nordsieck to multistep
         final FieldMatrix<BigFraction> bigNtoM = buildNordsieckToMultistep(p, q, r, s);
@@ -128,7 +132,7 @@
 
     /**
      * Build the transform from Nordsieck to multistep.
-     * <p>states considered are y<sub>k-p</sub>, y<sub>k-(p+1)</sub> ...
+     * <p>States considered are y<sub>k-p</sub>, y<sub>k-(p+1)</sub> ...
      * y<sub>k-(q-1)</sub> and scaled derivatives considered are
      * h y'<sub>k-r</sub>, h y'<sub>k-(r+1)</sub> ... h y'<sub>k-(s-1)</sub>
      * @param p start state index offset in multistep form
@@ -163,10 +167,10 @@
         for (int l = r; l < s; ++l) {
             // handle previous state scaled derivative h y'<sub>(k-l)</sub>
             // the following expressions are direct applications of Taylor series
-            // h y'<sub>k-1</sub>: [ 0  1  -2   3  -4   5 ...]
-            // h y'<sub>k-2</sub>: [ 0  1  -4   6  -8  10 ...]
-            // h y'<sub>k-3</sub>: [ 0  1  -6   9 -12  15 ...]
-            // h y'<sub>k-4</sub>: [ 0  1  -8  12 -16  20 ...]
+            // h y'<sub>k-1</sub>: [ 0  1  -2   3   -4     5 ...]
+            // h y'<sub>k-2</sub>: [ 0  1  -4  12  -32    80 ...]
+            // h y'<sub>k-3</sub>: [ 0  1  -6  27 -108   405 ...]
+            // h y'<sub>k-4</sub>: [ 0  1  -8  48 -256  1280 ...]
             final BigFraction[] row = array[i++];
             final BigInteger factor = BigInteger.valueOf(-l);
             row[0] = BigFraction.ZERO;