# Newton’s Divided Difference Interpolation Formula

• Difficulty Level : Medium
• Last Updated : 14 Nov, 2022

Interpolation is an estimation of a value within two known values in a sequence of values. Newton’s divided difference interpolation formula is an interpolation technique used when the interval difference is not same for all sequence of values. Suppose f(x0), f(x1), f(x2)………f(xn) be the (n+1) values of the function y=f(x) corresponding to the arguments x=x0, x1, x2…xn, where interval differences are not same Then the first divided difference is given by

The second divided difference is given by

and so on… Divided differences are symmetric with respect to the arguments i.e independent of the order of arguments. so, f[x0, x1]=f[x1, x0] f[x0, x1, x2]=f[x2, x1, x0]=f[x1, x2, x0] By using first divided difference, second divided difference as so on .A table is formed which is called the divided difference table. Divided difference table:

Advantages of NEWTON’S DIVIDED DIFFERENCE INTERPOLATION FORMULA

• These are useful for interpolation.
• Through difference table, we can find out the differences in higher order.
• Differences at each stage in each of the columns are easily measured by subtracting the previous value from its immediately succeeding value.
• The differences are found out successively between the two adjacent values of the y variable till the ultimate difference vanishes or become a constant.

NEWTON’S DIVIDED DIFFERENCE INTERPOLATION FORMULA

Examples:

Input: Value at 7
Output: Value at 7 is 13.47

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Below is the implementation of Newton’s divided difference interpolation method.

## C++

 // CPP program for implementing// Newton divided difference formula#include using namespace std; // Function to find the product termfloat proterm(int i, float value, float x[]){    float pro = 1;    for (int j = 0; j < i; j++) {        pro = pro * (value - x[j]);    }    return pro;} // Function for calculating// divided difference tablevoid dividedDiffTable(float x[], float y[][10], int n){    for (int i = 1; i < n; i++) {        for (int j = 0; j < n - i; j++) {            y[j][i] = (y[j][i - 1] - y[j + 1]                         [i - 1]) / (x[j] - x[i + j]);        }    }} // Function for applying Newton's// divided difference formulafloat applyFormula(float value, float x[],                   float y[][10], int n){    float sum = y[0][0];     for (int i = 1; i < n; i++) {      sum = sum + (proterm(i, value, x) * y[0][i]);    }    return sum;} // Function for displaying// divided difference tablevoid printDiffTable(float y[][10],int n){    for (int i = 0; i < n; i++) {        for (int j = 0; j < n - i; j++) {            cout << setprecision(4) <<                                 y[i][j] << "\t ";        }        cout << "\n";    }} // Driver Functionint main(){    // number of inputs given    int n = 4;    float value, sum, y[10][10];    float x[] = { 5, 6, 9, 11 };     // y[][] is used for divided difference    // table where y[][0] is used for input    y[0][0] = 12;    y[1][0] = 13;    y[2][0] = 14;    y[3][0] = 16;     // calculating divided difference table    dividedDiffTable(x, y, n);     // displaying divided difference table    printDiffTable(y,n);     // value to be interpolated    value = 7;     // printing the value    cout << "\nValue at " << value << " is "               << applyFormula(value, x, y, n) << endl;    return 0;}

## Java

 // Java program for implementing// Newton divided difference formulaimport java.text.*;import java.math.*; class GFG{// Function to find the product termstatic float proterm(int i, float value, float x[]){    float pro = 1;    for (int j = 0; j < i; j++) {        pro = pro * (value - x[j]);    }    return pro;} // Function for calculating// divided difference tablestatic void dividedDiffTable(float x[], float y[][], int n){    for (int i = 1; i < n; i++) {        for (int j = 0; j < n - i; j++) {            y[j][i] = (y[j][i - 1] - y[j + 1]                        [i - 1]) / (x[j] - x[i + j]);        }    }} // Function for applying Newton's// divided difference formulastatic float applyFormula(float value, float x[],                float y[][], int n){    float sum = y[0][0];     for (int i = 1; i < n; i++) {    sum = sum + (proterm(i, value, x) * y[0][i]);    }    return sum;} // Function for displaying// divided difference tablestatic void printDiffTable(float y[][],int n){    DecimalFormat df = new DecimalFormat("#.####");    df.setRoundingMode(RoundingMode.HALF_UP);         for (int i = 0; i < n; i++) {        for (int j = 0; j < n - i; j++) {            String str1 = df.format(y[i][j]);            System.out.print(str1+"\t ");        }        System.out.println("");    }} // Driver Functionpublic static void main(String[] args){    // number of inputs given    int n = 4;    float value, sum;    float y[][]=new float[10][10];    float x[] = { 5, 6, 9, 11 };     // y[][] is used for divided difference    // table where y[][0] is used for input    y[0][0] = 12;    y[1][0] = 13;    y[2][0] = 14;    y[3][0] = 16;     // calculating divided difference table    dividedDiffTable(x, y, n);     // displaying divided difference table    printDiffTable(y,n);     // value to be interpolated    value = 7;     // printing the value    DecimalFormat df = new DecimalFormat("#.##");    df.setRoundingMode(RoundingMode.HALF_UP);         System.out.println("\nValue at "+df.format(value)+" is "            +df.format(applyFormula(value, x, y, n)));}}// This code is contributed by mits

## Python3

 # Python3 program for implementing# Newton divided difference formula # Function to find the product termdef proterm(i, value, x):    pro = 1;    for j in range(i):        pro = pro * (value - x[j]);    return pro; # Function for calculating# divided difference tabledef dividedDiffTable(x, y, n):     for i in range(1, n):        for j in range(n - i):            y[j][i] = ((y[j][i - 1] - y[j + 1][i - 1]) /                                     (x[j] - x[i + j]));    return y; # Function for applying Newton's# divided difference formuladef applyFormula(value, x, y, n):     sum = y[0][0];     for i in range(1, n):        sum = sum + (proterm(i, value, x) * y[0][i]);         return sum; # Function for displaying divided# difference tabledef printDiffTable(y, n):     for i in range(n):        for j in range(n - i):            print(round(y[i][j], 4), "\t",                               end = " ");         print(""); # Driver Code # number of inputs givenn = 4;y = [[0 for i in range(10)]        for j in range(10)];x = [ 5, 6, 9, 11 ]; # y[][] is used for divided difference# table where y[][0] is used for inputy[0][0] = 12;y[1][0] = 13;y[2][0] = 14;y[3][0] = 16; # calculating divided difference tabley=dividedDiffTable(x, y, n); # displaying divided difference tableprintDiffTable(y, n); # value to be interpolatedvalue = 7; # printing the valueprint("\nValue at", value, "is",        round(applyFormula(value, x, y, n), 2)) # This code is contributed by mits

## C#

 // C# program for implementing// Newton divided difference formulausing System; class GFG{// Function to find the product termstatic float proterm(int i, float value, float[] x){    float pro = 1;    for (int j = 0; j < i; j++) {        pro = pro * (value - x[j]);    }    return pro;} // Function for calculating// divided difference tablestatic void dividedDiffTable(float[] x, float[,] y, int n){    for (int i = 1; i < n; i++) {        for (int j = 0; j < n - i; j++) {            y[j,i] = (y[j,i - 1] - y[j + 1,i - 1]) / (x[j] - x[i + j]);        }    }} // Function for applying Newton's// divided difference formulastatic float applyFormula(float value, float[] x,                float[,] y, int n){    float sum = y[0,0];     for (int i = 1; i < n; i++) {    sum = sum + (proterm(i, value, x) * y[0,i]);    }    return sum;} // Function for displaying// divided difference tablestatic void printDiffTable(float[,] y,int n){    for (int i = 0; i < n; i++) {        for (int j = 0; j < n - i; j++) {            Console.Write(Math.Round(y[i,j],4)+"\t ");        }        Console.WriteLine("");    }} // Driver Functionpublic static void Main(){    // number of inputs given    int n = 4;    float value;    float[,] y=new float[10,10];    float[] x = { 5, 6, 9, 11 };     // y[][] is used for divided difference    // table where y[][0] is used for input    y[0,0] = 12;    y[1,0] = 13;    y[2,0] = 14;    y[3,0] = 16;     // calculating divided difference table    dividedDiffTable(x, y, n);     // displaying divided difference table    printDiffTable(y,n);     // value to be interpolated    value = 7;     // printing the value         Console.WriteLine("\nValue at "+(value)+" is "            +Math.Round(applyFormula(value, x, y, n),2));}}// This code is contributed by mits

## PHP

 

## Javascript

 // JavaScript program for implementing// Newton divided difference formula  // Function to find the product termfunction proterm(i, value, x){    let pro = 1;    for (var j = 0; j < i; j++) {        pro = pro * (value - x[j]);    }    return pro;} // Function for calculating// divided difference tablefunction dividedDiffTable(x, y, n){    for (var i = 1; i < n; i++) {        for (var j = 0; j < n - i; j++) {            y[j][i] = (y[j][i - 1] - y[j + 1]                         [i - 1]) / (x[j] - x[i + j]);        }    }} // Function for applying Newton's// divided difference formulafunction applyFormula(value, x, y, n)                    {    let sum = y[0][0];     for (var i = 1; i < n; i++) {      sum = sum + (proterm(i, value, x) * y[0][i]);    }    return sum;} // Function for displaying// divided difference tablefunction printDiffTable(y, n){    for (var i = 0; i < n; i++) {        for (var j = 0; j < n - i; j++) {            process.stdout.write(y[i][j].toFixed(4) + "\t ");        }        process.stdout.write("\n");    }} // Driver Function // number of inputs givenlet n = 4;let value, sum;let x = [ 5, 6, 9, 11 ]; let y = [];for (var i = 0; i < 10; i++)    y.push(new Array(10)); // y[][] is used for divided difference// table where y[][0] is used for inputy[0][0] = 12;y[1][0] = 13;y[2][0] = 14;y[3][0] = 16; // calculating divided difference tabledividedDiffTable(x, y, n); // displaying divided difference tableprintDiffTable(y,n); // value to be interpolatedvalue = 7; // printing the valueconsole.log("\nValue at " + value + " is " + applyFormula(value, x, y, n));  // This code is contributed by phasing17

Output

12     1     -0.1667     0.05
13     0.3333     0.1333
14     1
16

Value at 7 is 13.47


Time complexity: O(n2)
Auxiliary space: O(1)

My Personal Notes arrow_drop_up