commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hank Grabowski (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MATH-1138) BicubicSplineInterpolator is returning incorrect interpolated values
Date Mon, 06 Oct 2014 13:56:34 GMT

    [ https://issues.apache.org/jira/browse/MATH-1138?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14160303#comment-14160303
] 

Hank Grabowski commented on MATH-1138:
--------------------------------------

Reviewing Octave and Math.NET I have identified the source of the discrepancy.  It appears
that Octave uses B-splines for their spline interpolation.  The implementation in Apache Math
is the Natural Spline.  When I use the Math.NET natural spline interpolator I get the same
results as I get with the Apache Math method.  However if I use the Akima Cubic Spline algorithm
from Math.NET I get valid numbers.  The only disadvantage of the Akima Spline that I see that
we don't have with the standard cubic spline is that it needs a minimum of five elements,
not four.  

Because the current spline works I was going to code up an Akima spline based on the Math.NET
implementation (referencing that source (they are a compatible MIT license), plus a book source.
 I will then use that as the basis for the splines in the BicubicSpline Interpolation.

> BicubicSplineInterpolator is returning incorrect interpolated values
> --------------------------------------------------------------------
>
>                 Key: MATH-1138
>                 URL: https://issues.apache.org/jira/browse/MATH-1138
>             Project: Commons Math
>          Issue Type: Bug
>    Affects Versions: 3.3
>            Reporter: Adam Bedrossian
>         Attachments: Interpolated Values from CM and MatLab.docx
>
>
> I have encountered a use case with the BicubicSplineInterpolator where the interpolated
values that are being returned seem incorrect.  Furthermore, the values do not match those
generated by MatLab using the interp2 'cubic' method.
> Here is a snippet of code that uses the interpolator:
>         double[] xValues = new double[] {36, 36.001, 36.002};
>         double[] yValues = new double[] {-108.00, -107.999, -107.998};
>         double[][] fValues = new double[][] {{1915, 1906, 1931},
>                                         {1877, 1889, 1894},
>                                         {1878, 1873, 1888}};
>         BicubicSplineInterpolator interpolator = new BicubicSplineInterpolator();
>         BicubicSplineInterpolatingFunction interpolatorFunction = interpolator.interpolate(xValues,
yValues, fValues);
>         double[][] results = new double[9][9];
>         double x = 36;
>         int arrayIndexX = 0, arrayIndexY = 0;
>         while(x <= 36.002) {
>             double y = -108;
>             arrayIndexY = 0;
>             while (y <= -107.998) {
>                 results[arrayIndexX][arrayIndexY] = interpolatorFunction.value(x,  y);
>                 System.out.println(results[arrayIndexX][arrayIndexY]);
>                 y = y + 0.00025;
>                 arrayIndexY++;
>             }
>             x = x + 0.00025;
>             arrayIndexX++;
>         }
> Attached is a grid showing x and y values and the corresponding interpolated value from
both commons math and MatLab.
> The values produced by commons math are far off from those created by MatLab.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message