class Main {
public static void main
(String[] args
) { double[] x = {0, 1, 2, 3};
double[] y = {1, 0, 1, 10};
double X = 0.5;
double result = backwardInterpolation(x, y, X);
System.
out.
printf("Interpolated value at x = %.3f is y = %.3f\n", X, result
); }
static double backwardInterpolation(double[] x, double[] y, double X) {
int n = x.length;
double[][] diff = new double[n][n];
for (int i = 0; i < n; i++)
diff[i][0] = y[i];
for (int j = 1; j < n; j++)
for (int i = n - 1; i >= j; i--)
diff[i][j] = diff[i][j - 1] - diff[i - 1][j - 1];
double h = x[1] - x[0];
double p = (X - x[n - 1]) / h;
double sum = diff[n - 1][0];
double term = 1;
for (int i = 1; i < n; i++) {
term *= (p + (i - 1));
sum += term * diff[n - 1][i] / fact(i);
}
return sum;
}
static int fact(int n) {
int f = 1;
for (int i = 2; i <= n; i++) f *= i;
return f;
}
}
Y2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgZG91YmxlW10geCA9IHswLCAxLCAyLCAzfTsKICAgICAgICBkb3VibGVbXSB5ID0gezEsIDAsIDEsIDEwfTsKICAgICAgICBkb3VibGUgWCA9IDAuNTsKCiAgICAgICAgZG91YmxlIHJlc3VsdCA9IGJhY2t3YXJkSW50ZXJwb2xhdGlvbih4LCB5LCBYKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiSW50ZXJwb2xhdGVkIHZhbHVlIGF0IHggPSAlLjNmIGlzIHkgPSAlLjNmXG4iLCBYLCByZXN1bHQpOwogICAgfQoKICAgIHN0YXRpYyBkb3VibGUgYmFja3dhcmRJbnRlcnBvbGF0aW9uKGRvdWJsZVtdIHgsIGRvdWJsZVtdIHksIGRvdWJsZSBYKSB7CiAgICAgICAgaW50IG4gPSB4Lmxlbmd0aDsKICAgICAgICBkb3VibGVbXVtdIGRpZmYgPSBuZXcgZG91YmxlW25dW25dOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICAgICAgZGlmZltpXVswXSA9IHlbaV07CgogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgbjsgaisrKQogICAgICAgICAgICBmb3IgKGludCBpID0gbiAtIDE7IGkgPj0gajsgaS0tKQogICAgICAgICAgICAgICAgZGlmZltpXVtqXSA9IGRpZmZbaV1baiAtIDFdIC0gZGlmZltpIC0gMV1baiAtIDFdOwoKICAgICAgICBkb3VibGUgaCA9IHhbMV0gLSB4WzBdOwogICAgICAgIGRvdWJsZSBwID0gKFggLSB4W24gLSAxXSkgLyBoOwoKICAgICAgICBkb3VibGUgc3VtID0gZGlmZltuIC0gMV1bMF07CiAgICAgICAgZG91YmxlIHRlcm0gPSAxOwoKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgICAgICB0ZXJtICo9IChwICsgKGkgLSAxKSk7CiAgICAgICAgICAgIHN1bSArPSB0ZXJtICogZGlmZltuIC0gMV1baV0gLyBmYWN0KGkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN1bTsKICAgIH0KCiAgICBzdGF0aWMgaW50IGZhY3QoaW50IG4pIHsKICAgICAgICBpbnQgZiA9IDE7CiAgICAgICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gbjsgaSsrKSBmICo9IGk7CiAgICAgICAgcmV0dXJuIGY7CiAgICB9Cn0K