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

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

I have completed work on this to a point where it is generating substantially 
better values.  I am using the Akima Spline algorithm.  For the planar test the 
error off the truth function went from 6 to 6e-14.  On the parabaloid function 
test it went from 224 to 6e-14.  The corresponding errors on the Akima Spline 
test for linear, parabolic and cubic functions are 1e-15, 6e-14 and 3.8, 
respectively.  While that is an improvement over the Natural Spline, that could 
have errors over 15 on the cubic test, the B-spline would collapse errors on 
the higher order functions to something comparable to the linear and parabolic 
tests, and thus further enhance the accuracy of the interpolation of the higher 
dimension interpolators too.  Patch is attached to this incident.

> 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)

Reply via email to