You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ps...@apache.org on 2004/05/22 21:59:22 UTC

cvs commit: jakarta-commons/math/src/java/org/apache/commons/math/analysis SplineInterpolator.java

psteitz     2004/05/22 12:59:22

  Modified:    math/src/java/org/apache/commons/math/analysis
                        SplineInterpolator.java
  Log:
  Improved efficiency.
  
  Revision  Changes    Path
  1.17      +7 -13     jakarta-commons/math/src/java/org/apache/commons/math/analysis/SplineInterpolator.java
  
  Index: SplineInterpolator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/SplineInterpolator.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- SplineInterpolator.java	27 Apr 2004 04:37:58 -0000	1.16
  +++ SplineInterpolator.java	22 May 2004 19:59:22 -0000	1.17
  @@ -69,27 +69,22 @@
               }
           }
           
  +        // Differences between knot points
           double h[] = new double[n];
           for (int i = 0; i < n; i++) {
               h[i] = x[i + 1] - x[i];
           }
           
  -        double alpha[] = new double[n];
  -        for (int i = 1; i < n; i++) {
  -            alpha[i] = 3d * (y[i + 1] * h[i - 1] - y[i] * (x[i + 1] - x[i - 1])+ y[i - 1] * h[i]) /
  -                            (h[i - 1] * h[i]);
  -        }
  -        
  -        double l[] = new double[n + 1];
           double mu[] = new double[n];
           double z[] = new double[n + 1];
  -        l[0] = 1d;
           mu[0] = 0d;
           z[0] = 0d;
  +        double g = 0;
           for (int i = 1; i < n; i++) {
  -            l[i] = 2d * (x[i+1]  - x[i - 1]) - h[i - 1] * mu[i -1];
  -            mu[i] = h[i] / l[i];
  -            z[i] = (alpha[i] - h[i - 1] * z[i - 1]) / l[i];
  +            g = 2d * (x[i+1]  - x[i - 1]) - h[i - 1] * mu[i -1];
  +            mu[i] = h[i] / g;
  +            z[i] = (3d * (y[i + 1] * h[i - 1] - y[i] * (x[i + 1] - x[i - 1])+ y[i - 1] * h[i]) /
  +                    (h[i - 1] * h[i]) - h[i - 1] * z[i - 1]) / g;
           }
          
           // cubic spline coefficients --  b is linear, c quadratic, d is cubic (original y's are constants)
  @@ -97,7 +92,6 @@
           double c[] = new double[n + 1];
           double d[] = new double[n];
           
  -        l[n] = 1d;
           z[n] = 0d;
           c[n] = 0d;
           
  
  
  

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