如何在java数组中实现线性插值法?
How to implement linear interpolation method in java array?
我正在开发一个简单的线性插值程序。我在实现算法时遇到了一些麻烦。假设一共有 12 个数字,我们让用户输入其中的 3 个(位置 0、位置 6 和位置 12)。然后程序将计算其他数字。这是我实现此目的的一段代码:
static double[] interpolate(double a, double b){
double[] array = new double[6];
for(int i=0;i<6;i++){
array[i] = a + (i-0) * (b-a)/6;
}
return array;
}
static double[] interpolate2(double a, double b){
double[] array = new double[13];
for(int i=6;i<=12;i++){
array[i] = a + (i-6) * (b-a)/6;
}
return array;
}
如您所见,我使用了两个函数。但我想找到一个通用的功能来完成这项工作。但是,我不知道如何找到表示 i-0
和 i-6
的通用方法。如何解决?根据 Floating point linear interpolation,我知道也许我应该添加一个形式参数 float f
。但是我不太明白 float f
是什么意思以及如何基于它修改我的代码。谁能帮帮我?谢谢。
如果你想将间隔插入到不同的数字计数中,你可以将输出数字的计数添加到函数参数中。
示例:
/***
* Interpolating method
* @param start start of the interval
* @param end end of the interval
* @param count count of output interpolated numbers
* @return array of interpolated number with specified count
*/
public static double[] interpolate(double start, double end, int count) {
if (count < 2) {
throw new IllegalArgumentException("interpolate: illegal count!");
}
double[] array = new double[count + 1];
for (int i = 0; i <= count; ++ i) {
array[i] = start + i * (end - start) / count;
}
return array;
}
然后你可以调用 interpolate(0, 6, 6);
或 interpolate(6, 12, 6);
或 interpolate(6, 12, 12);
或任何你想要的。
我正在开发一个简单的线性插值程序。我在实现算法时遇到了一些麻烦。假设一共有 12 个数字,我们让用户输入其中的 3 个(位置 0、位置 6 和位置 12)。然后程序将计算其他数字。这是我实现此目的的一段代码:
static double[] interpolate(double a, double b){
double[] array = new double[6];
for(int i=0;i<6;i++){
array[i] = a + (i-0) * (b-a)/6;
}
return array;
}
static double[] interpolate2(double a, double b){
double[] array = new double[13];
for(int i=6;i<=12;i++){
array[i] = a + (i-6) * (b-a)/6;
}
return array;
}
如您所见,我使用了两个函数。但我想找到一个通用的功能来完成这项工作。但是,我不知道如何找到表示 i-0
和 i-6
的通用方法。如何解决?根据 Floating point linear interpolation,我知道也许我应该添加一个形式参数 float f
。但是我不太明白 float f
是什么意思以及如何基于它修改我的代码。谁能帮帮我?谢谢。
如果你想将间隔插入到不同的数字计数中,你可以将输出数字的计数添加到函数参数中。 示例:
/***
* Interpolating method
* @param start start of the interval
* @param end end of the interval
* @param count count of output interpolated numbers
* @return array of interpolated number with specified count
*/
public static double[] interpolate(double start, double end, int count) {
if (count < 2) {
throw new IllegalArgumentException("interpolate: illegal count!");
}
double[] array = new double[count + 1];
for (int i = 0; i <= count; ++ i) {
array[i] = start + i * (end - start) / count;
}
return array;
}
然后你可以调用 interpolate(0, 6, 6);
或 interpolate(6, 12, 6);
或 interpolate(6, 12, 12);
或任何你想要的。