![](/img/trans.png)
[英]How to use PolynomialSplineFunction from Apache Commons Math
[英]How to use BicubicSplineInterpolator in Apache Commons Math?
我有三个数组x,y和value。 对于每个x,y,f(x,y)=值;
我不明白如何使用BicubicSplineInterpolator类。 我需要找到不同的x和y的值
TIA
从文档开始,BicubicSplineInterpolator()要求数据点形成网格状图案。 因此,您应该提供一个x值数组(长度= m)和一个y值数组(长度= m)以及一个函数值矩阵(长度= mxn)。
我同意这些文档是违反直觉的。 更糟的是,BicubicSplineInterpolator()有问题,请参阅https://issues.apache.org/jira/browse/MATH-1166 ,而应使用BicubicInterpolator,如http://commons.apache.org/proper/commons- math / changes-report.html 。
插值适用于常规网格(例如3x3网格,并且每个网格点都有一个值)。
您需要定义网格位置。 (在此示例中,我们在x和y维度上都有0、128、256。但是,这些只是数字,您可以在X上使用,例如温度和湿度在Y上使用不同的范围。)
然后定义一个在每个网格点具有实际值的矩阵,制作一个插值器,该插值器返回一个插值函数,该函数可以计算任何x,y处的任何值。
final double[] xValues = new double[] {0,128,256};
final double[] yValues = new double[] {0,128,256};
final double[][] fValues = new double[][] {{1, 0, 1},
{0, 0, 1},
{0, 0, 1}};
final BivariateGridInterpolator interpolator = new BicubicInterpolator();
final BivariateFunction function = interpolator.interpolate(xValues, yValues,fValues);
for (int y=0;y<255;y++) {
for (int x=0;x<255;x++) {
double value=function.value(x, y);
// do something with this
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.