Program to implement Inverse Interpolation using Lagrange Formula

27 Dec, 2021
Given task is to find the value of x for a given y of an unknown function y = f(x) where values of some points (x, y) pairs are given.Let, y = f(x) be an unknown function where x in an independent variable. For different values of x, say [Tex]x_k, k=0, 1, 2, 3...m)   [/Tex]values of respective [Tex]y_k = f(x_k), k=0, 1, 2, 3...m)   [/Tex]given.The process of finding the value of the independent variable x for a given value of y lying between two tabulated values with the help of the given set of observation for an unknown function is known as Inverse Interpolation.This is often used to check whether the correctness of output y for an unknown function f i.e how much argument x for this output y differs from the original input.The problem of inverse interpolation can be solved using Lagrange’s Formula.Lagrange’s Formula: The formula for inverse interpolation is similar to interpolation formula but few changes.Here to solve the problem of inverse interpolation the places of x and y are interchanged. The formula for inverse interpolation is:This method can even be used when the points are unequally spaced. Here x is expressed as a function of y.Examples:  
Input: Find the value of x where y = 4.5 and the given points are:  
Output: 2.79501 Explanation: Here num of data points given = 4 and y = 4.5 So, putting the values of all x and y in the inverse interpolation formula given above we get, From here we get, The value of x = 2.79501 where the value of y = 4.5  
Graph:  
Algorithm: Here, data is a list of points consisting of x and y and n is the num of data points. 
STEP – 1 : Initialize the final value x = 0 STEP – 2 : FOR i = 1 to n do     STEP – 3 : Initialize xi = data[i].x     STEP – 4 : FOR j = 1 to n do         STEP – 5 : IF i != j do             STEP – 6 : Multiply xi by ( y – data[j].y ) and divide by ( data[i].y – data[j].y )         ENDIF     ENDFOR     STEP – 7 : Add xi to x ENDFOR STEP – 8 : Return final value of x STEP – 9 : END 
Implementation:  
C++
Java
Python3
C#
Javascript
// C++ code for solving inverse interpolation #include <bits/stdc++.h>using namespace std; // Consider a structure// to keep each pair of// x and y togetherstruct Data {    double x, y;}; // Function to calculate// the inverse interpolation double inv_interpolate(Data d[], int n, double y){    // Initialize final x    double x = 0;     int i, j;     for (i = 0; i < n; i++) {         // Calculate each term        // of the given formula        double xi = d[i].x;        for (j = 0; j < n; j++) {             if (j != i) {                xi = xi                     * (y - d[j].y)                     / (d[i].y - d[j].y);            }        }         // Add term to final result        x += xi;    }     return x;} // Driver Codeint main(){     // Sample dataset of 4 points    // Here we find the value    // of x when y = 4.5    Data d[] = { { 1.27, 2.3 },                 { 2.25, 2.95 },                 { 2.5, 3.5 },                 { 3.6, 5.1 } };     // Size of dataset    int n = 4;     // Sample y value    double y = 4.5;     // Using the Inverse Interpolation    // function to find the    // value of x when y = 4.5    cout << "Value of x at y = 4.5 : "         << inv_interpolate(d, n, y);     return 0;}
// Java code for solving inverse interpolationclass GFG{ // Consider a structure// to keep each pair of// x and y togetherstatic class Data{    double x, y;     public Data(double x, double y)    {        super();        this.x = x;        this.y = y;    }     }; // Function to calculate// the inverse interpolationstatic double inv_interpolate(Data []d, int n, double y){    // Initialize final x    double x = 0;     int i, j;     for (i = 0; i < n; i++)    {         // Calculate each term        // of the given formula        double xi = d[i].x;        for (j = 0; j < n; j++)        {             if (j != i)            {                xi = xi                    * (y - d[j].y)                    / (d[i].y - d[j].y);            }        }         // Add term to final result        x += xi;    }    return x;} // Driver Codepublic static void main(String[] args){     // Sample dataset of 4 points    // Here we find the value    // of x when y = 4.5    Data []d = { new Data( 1.27, 2.3 ),            new Data( 2.25, 2.95 ),            new Data( 2.5, 3.5 ),            new Data( 3.6, 5.1 ) };     // Size of dataset    int n = 4;     // Sample y value    double y = 4.5;     // Using the Inverse Interpolation    // function to find the    // value of x when y = 4.5    System.out.printf("Value of x at y = 4.5 : %.5f"        , inv_interpolate(d, n, y));}} // This code is contributed by Rajput-Ji
# Python3 code for solving# inverse interpolation # Consider a structure# to keep each pair of# x and y togetherclass Data:    def __init__(self, x, y):        self.x = x        self.y = y # Function to calculate# the inverse interpolationdef inv_interpolate(d: list, n: int,                    y: float) -> float:     # Initialize final x    x = 0     for i in range(n):         # Calculate each term        # of the given formula        xi = d[i].x        for j in range(n):            if j != i:                xi = (xi * (y - d[j].y) /                      (d[i].y - d[j].y))         # Add term to final result        x += xi    return x # Driver Codeif __name__ == "__main__":     # Sample dataset of 4 points    # Here we find the value    # of x when y = 4.5    d = [Data(1.27, 2.3),         Data(2.25, 2.95),         Data(2.5, 3.5),         Data(3.6, 5.1)]     # Size of dataset    n = 4     # Sample y value    y = 4.5     # Using the Inverse Interpolation    # function to find the    # value of x when y = 4.5    print("Value of x at y = 4.5 :",           round(inv_interpolate(d, n, y), 5)) # This code is contributed by# sanjeev2552
// C# code for solving inverse interpolationusing System; class GFG{ // Consider a structure to keep// each pair of x and y togetherclass Data{    public double x, y;     public Data(double x, double y)    {        this.x = x;        this.y = y;    }}; // Function to calculate the// inverse interpolationstatic double inv_interpolate(Data []d,                       int n, double y){    // Initialize readonly x    double x = 0;     int i, j;     for (i = 0; i < n; i++)    {         // Calculate each term        // of the given formula        double xi = d[i].x;        for (j = 0; j < n; j++)        {            if (j != i)            {                xi = xi * (y - d[j].y) /                              (d[i].y - d[j].y);            }        }         // Add term to readonly result        x += xi;    }    return x;} // Driver Codepublic static void Main(String[] args){     // Sample dataset of 4 points    // Here we find the value    // of x when y = 4.5    Data []d = {new Data(1.27, 2.3),                new Data(2.25, 2.95),                new Data(2.5, 3.5),                new Data(3.6, 5.1)};     // Size of dataset    int n = 4;     // Sample y value    double y = 4.5;     // Using the Inverse Interpolation    // function to find the    // value of x when y = 4.5    Console.Write("Value of x at y = 4.5 : {0:f5}",                         inv_interpolate(d, n, y));}} // This code is contributed by Rajput-Ji
<script>// javascript code for solving inverse interpolation   // Consider a structure    // to keep each pair of    // x and y together     class Data {                 constructor(x , y) {            this.x = x;            this.y = y;        }     };     // Function to calculate    // the inverse interpolation    function inv_interpolate( d , n , y)    {             // Initialize final x        var x = 0;         var i, j;         for (i = 0; i < n; i++) {             // Calculate each term            // of the given formula            var xi = d[i].x;            for (j = 0; j < n; j++) {                 if (j != i) {                    xi = xi * (y - d[j].y) / (d[i].y - d[j].y);                }            }             // Add term to final result            x += xi;        }        return x;    }     // Driver Code             // Sample dataset of 4 points        // Here we find the value        // of x when y = 4.5        var d = [ new Data(1.27, 2.3), new Data(2.25, 2.95), new Data(2.5, 3.5), new Data(3.6, 5.1) ];         // Size of dataset        var n = 4;         // Sample y value        var y = 4.5;         // Using the Inverse Interpolation        // function to find the        // value of x when y = 4.5        document.write("Value of x at y = 4.5 : ", inv_interpolate(d, n, y).toFixed(5)); // This code is contributed by gauravrajput1</script>
Value of x at y = 4.5 : 2.79501
 
Complexity: The time complexity of the given solution is O(n^2) and space complexity is O(1) 
Rajput-Ji
sanjeev2552
GauravRajput1
Algebra
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Operators in C / C++
Prime Numbers
Minimum number of jumps to reach end
Program to find GCD or HCF of two numbers
Find minimum number of coins that make a given value
The Knight's tour problem | Backtracking-1
Algorithm to solve Rubik's Cube
Program for Decimal to Binary Conversion
Modulo 10^9+7 (1000000007)