You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Yassine Damerdji (Jira)" <ji...@apache.org> on 2020/04/06 03:07:00 UTC

[jira] [Updated] (MATH-1530) Spline interpolation : Avoid recomputing indexes when possible

     [ https://issues.apache.org/jira/browse/MATH-1530?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Yassine Damerdji updated MATH-1530:
-----------------------------------
    Description: 
In org.apache.commons.math4.analysis.interpolation.SplineInterpolator and in org.apache.commons.math4.analysis.interpolation.AkimaSplineInterpolator, many indices are recomputed many times.

Example :
{code:java}
for (int i = 1; i < n; i++) {
    g = 2d * (x[i+1] - x[i - 1]) - h[i - 1] * mu[i -1];
    mu[i] = h[i] / g;
}{code}

can be replaced by :

{code:java}
int i = 1;
int iPlusOne = 2;
int iMinusOne = 0;

while (i < n) {
    g[i] = 2d * (x[iPlusOne] - x[iMinusOne]) - h[iMinusOne] * mu[iMinusOne];
    mu[i] = h[i] / g[i];
    iMinusOne = i;
    i = iPlusOne;
    iPlusOne = iPlusOne + 1;
}
{code}

In my tests, I saved almost 2% of processing time with this optimization.



  was:
In org.apache.commons.math4.analysis.interpolation.SplineInterpolator and in org.apache.commons.math4.analysis.interpolation.AkimaSplineInterpolator, many indices are recomputed many times.

Example :
{code:java}
for (int i = 1; i < n; 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;
}{code}

can be replaced by :

{code:java}
int i = 1;
int iPlusOne = 2;
int iMinusOne = 0;

while (i < n) {
    g[i] = 2d * (x[iPlusOne] - x[iMinusOne]) - h[iMinusOne] * mu[iMinusOne];
    mu[i] = h[i] / g[i];
    iMinusOne = i;
    i = iPlusOne;
    iPlusOne = iPlusOne + 1;
}
{code}

In my tests, I saved almost 2% of processing time with this optimization.




> Spline interpolation : Avoid recomputing indexes when possible
> --------------------------------------------------------------
>
>                 Key: MATH-1530
>                 URL: https://issues.apache.org/jira/browse/MATH-1530
>             Project: Commons Math
>          Issue Type: Improvement
>            Reporter: Yassine Damerdji
>            Priority: Minor
>
> In org.apache.commons.math4.analysis.interpolation.SplineInterpolator and in org.apache.commons.math4.analysis.interpolation.AkimaSplineInterpolator, many indices are recomputed many times.
> Example :
> {code:java}
> for (int i = 1; i < n; i++) {
>     g = 2d * (x[i+1] - x[i - 1]) - h[i - 1] * mu[i -1];
>     mu[i] = h[i] / g;
> }{code}
> can be replaced by :
> {code:java}
> int i = 1;
> int iPlusOne = 2;
> int iMinusOne = 0;
> while (i < n) {
>     g[i] = 2d * (x[iPlusOne] - x[iMinusOne]) - h[iMinusOne] * mu[iMinusOne];
>     mu[i] = h[i] / g[i];
>     iMinusOne = i;
>     i = iPlusOne;
>     iPlusOne = iPlusOne + 1;
> }
> {code}
> In my tests, I saved almost 2% of processing time with this optimization.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)