class Main {
public static void main
(String[] args
) { double[] x = {0, 1, 2, 3};
double[] y = {1, 2, 4, 8};
double x0 = 1.5;
double result = newtonForward(x, y, x0);
System.
out.
printf("Interpolated value at x = %.2f is y = %.3f\n", x0, result
); }
static double newtonForward(double[] x, double[] y, double x0) {
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 = 0; i < n - j; i++)
diff[i][j] = diff[i + 1][j - 1] - diff[i][j - 1];
double h = x[1] - x[0];
double u = (x0 - x[0]) / h;
double sum = diff[0][0];
double term = 1;
for (int i = 1; i < n; i++) {
term *= (u - (i - 1));
sum += term * diff[0][i] / fact(i);
}
return sum; }
static int fact(int n) {
int f = 1;
for (int i = 1; i <= n; i++) f *= i;
return f;
}
}
Y2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgZG91YmxlW10geCA9IHswLCAxLCAyLCAzfTsKICAgICAgICBkb3VibGVbXSB5ID0gezEsIDIsIDQsIDh9OwogICAgICAgIGRvdWJsZSB4MCA9IDEuNTsKICAgICAgICBkb3VibGUgcmVzdWx0ID0gbmV3dG9uRm9yd2FyZCh4LCB5LCB4MCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIkludGVycG9sYXRlZCB2YWx1ZSBhdCB4ID0gJS4yZiBpcyB5ID0gJS4zZlxuIiwgeDAsIHJlc3VsdCk7CiAgICB9CiAgICBzdGF0aWMgZG91YmxlIG5ld3RvbkZvcndhcmQoZG91YmxlW10geCwgZG91YmxlW10geSwgZG91YmxlIHgwKSB7CiAgICAgICAgaW50IG4gPSB4Lmxlbmd0aDsKICAgICAgICBkb3VibGVbXVtdIGRpZmYgPSBuZXcgZG91YmxlW25dW25dOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICAgICAgZGlmZltpXVswXSA9IHlbaV07CgogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgbjsgaisrKQogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG4gLSBqOyBpKyspCiAgICAgICAgICAgICAgICBkaWZmW2ldW2pdID0gZGlmZltpICsgMV1baiAtIDFdIC0gZGlmZltpXVtqIC0gMV07CgogICAgICAgIGRvdWJsZSBoID0geFsxXSAtIHhbMF07CiAgICAgICAgZG91YmxlIHUgPSAoeDAgLSB4WzBdKSAvIGg7CiAgICAgICAgZG91YmxlIHN1bSA9IGRpZmZbMF1bMF07CiAgICAgICAgZG91YmxlIHRlcm0gPSAxOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIHRlcm0gKj0gKHUgLSAoaSAtIDEpKTsKICAgICAgICAgICAgc3VtICs9IHRlcm0gKiBkaWZmWzBdW2ldIC8gZmFjdChpKTsKICAgICAgICB9CiAgICAgICAgIHJldHVybiBzdW07ICB9CiAgICAgICBzdGF0aWMgaW50IGZhY3QoaW50IG4pIHsKICAgICAgICBpbnQgZiA9IDE7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBmICo9IGk7CiAgICAgICAgcmV0dXJuIGY7CiAgICB9Cn0K