Newton’s Divided Difference Interpolation Formula

28 Jan, 2022
Interpolation is an estimation of a value within two known values in a sequence of values.
Newton’s divided difference interpolation formula is a 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 sameThen 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
Input : Value at 7
       
Output :
      
      Value at 7 is 13.47

Below is the implementation for Newton’s divided difference interpolation method.
C++
Java
Python3
C#
PHP
// CPP program for implementing// Newton divided difference formula#include <bits/stdc++.h>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 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 program for implementing # Newton divided difference formula   # Function to find the product term def proterm(i, value, x):     pro = 1;     for j in range(i):         pro = pro * (value - x[j]);     return pro;   # Function for calculating # divided difference table def 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 formula def 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 table def 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 given n = 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 input y[0][0] = 12; y[1][0] = 13; y[2][0] = 14; y[3][0] = 16;   # calculating divided difference table y=dividedDiffTable(x, y, n);   # displaying divided difference table printDiffTable(y, n);   # value to be interpolated value = 7;   # printing the value print("\nValue at", value, "is",        round(applyFormula(value, x, y, n), 2))  # This code is contributed by mits
// C# program for implementing // Newton divided difference formula using System;  class GFG{ // Function to find the product term static 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 table static 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 formula static 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 table static 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 Function public 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// PHP program for implementing // Newton divided difference formula   // Function to find the product term function proterm($i, $value, $x) {     $pro = 1;     for ($j = 0; $j < $i; $j++)     {         $pro = $pro * ($value - $x[$j]);     }     return $pro; }   // Function for calculating // divided difference table function dividedDiffTable($x, &$y, $n) {     for ($i = 1; $i < $n; $i++)     {         for ($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 formula function applyFormula($value, $x, $y,$n) {     $sum = $y[0][0];       for ($i = 1; $i < $n; $i++)     {         $sum = $sum + (proterm($i, $value, $x) *                                    $y[0][$i]);     }     return $sum; }   // Function for displaying // divided difference table function printDiffTable($y, $n) {     for ($i = 0; $i < $n; $i++)     {         for ($j = 0; $j < $n - $i; $j++)         {             echo round($y[$i][$j], 4) . "\t ";         }         echo "\n";     } }   // Driver Code  // number of inputs given $n = 4; $y = array_fill(0, 10, array_fill(0, 10, 0)); $x = array( 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 echo "\nValue at " . $value . " is " .       round(applyFormula($value, $x,                          $y, $n), 2) . "\n"  // This code is contributed by mits?>
12     1     -0.1667     0.05     
13     0.3333     0.1333     
14     1     
16     

Value at 7 is 13.47

Mithun Kumar
akashagg
itskawal2000
Algebra
Engineering Mathematics
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Relationship between number of nodes and height of binary tree
Inequalities in LaTeX
Difference between Propositional Logic and Predicate Logic
Mathematics | Introduction to Propositional Logic | Set 1
Arrow Symbols in LaTeX
Program for Fibonacci numbers
Set in C++ Standard Template Library (STL)
Write a program to print all permutations of a given string
C++ Data Types
Merge two sorted arrays