[
https://issues.apache.org/jira/browse/MATH-1138?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14175940#comment-14175940
]
Hank Grabowski commented on MATH-1138:
--------------------------------------
Adam was working on a project for me when he uncovered the accuracies issues
with the interpolators. He posted this to the discussion board and then
ultimately here to help resolve the matter. The field we were running our
interpolation on was much greater than the number of elements given. We were
just trying to come up with a concise example to send here. This was before we
started tearing into the test harness for these functions, which is when I took
over the investigation of the problem. We ultimately had to write our own
bilinear interpolation rather than use the Apache Math libraries due to time
constraints, but I do intend to switch that out for this method in a future
sprint once this is part of a shipping Apache Math release.
> 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
> Fix For: 3.4
>
> 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)