如何在java数组中实现线性插值方法?

时间:2015-05-12 05:27:42

标签: java arrays linear-interpolation

我正在研究一个简单的线性插值程序。在实现算法时我遇到了一些麻烦。假设整数有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-0i-6的常用方法。怎么解决?根据{{​​3}},我知道也许我应该添加一个形式参数float f。但我不太明白float f的含义以及如何根据它修改我的代码。谁能帮助我?谢谢。

1 个答案:

答案 0 :(得分:4)

如果要将间隔插入到不同的数字计数中,只需将输出数量的计数添加到函数参数即可。 例如:

/***
 * 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);或任何您想要的内容。