You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2020/04/07 17:23:43 UTC

[commons-math] 05/06: MATH-1530: Loop rewrite.

This is an automated email from the ASF dual-hosted git repository.

erans pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-math.git

commit 9c6ed8311fcb30518cc8935146d72a5b9126d41c
Author: Gilles Sadowski <gi...@gmail.com>
AuthorDate: Mon Apr 6 19:06:12 2020 +0200

    MATH-1530: Loop rewrite.
---
 .../analysis/interpolation/SplineInterpolator.java | 25 ++++++++++++++--------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/apache/commons/math4/analysis/interpolation/SplineInterpolator.java b/src/main/java/org/apache/commons/math4/analysis/interpolation/SplineInterpolator.java
index 8da99b8..b0c8c8b 100644
--- a/src/main/java/org/apache/commons/math4/analysis/interpolation/SplineInterpolator.java
+++ b/src/main/java/org/apache/commons/math4/analysis/interpolation/SplineInterpolator.java
@@ -90,15 +90,22 @@ public class SplineInterpolator implements UnivariateInterpolator {
         final double[] mu = new double[n];
         final double[] z = new double[n + 1];
         double g = 0;
-        for (int i = 1; i < n; i++) {
-            final double xIp1 = x[i + 1];
-            final double xIm1 = x[i - 1];
-            final double hIm1 = h[i - 1];
-            final double hI = h[i];
-            g = 2d * (xIp1  - xIm1) - hIm1 * mu[i -1];
-            mu[i] = hI / g;
-            z[i] = (3d * (y[i + 1] * hIm1 - y[i] * (xIp1 - xIm1)+ y[i - 1] * hI) /
-                    (hIm1 * hI) - hIm1 * z[i - 1]) / g;
+        int indexM1 = 0;
+        int index = 1;
+        int indexP1 = 2;
+        while (index < n) {
+            final double xIp1 = x[indexP1];
+            final double xIm1 = x[indexM1];
+            final double hIm1 = h[indexM1];
+            final double hI = h[index];
+            g = 2d * (xIp1 - xIm1) - hIm1 * mu[indexM1];
+            mu[index] = hI / g;
+            z[index] = (3d * (y[indexP1] * hIm1 - y[index] * (xIp1 - xIm1)+ y[indexM1] * hI) /
+                        (hIm1 * hI) - hIm1 * z[indexM1]) / g;
+
+            indexM1 = index;
+            index = indexP1;
+            indexP1 = indexP1 + 1;
         }
 
         // cubic spline coefficients --  b is linear, c quadratic, d is cubic (original y's are constants)