# Program to implement Inverse Interpolation using Lagrange Formula

**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 values of respective 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++ code for solving inverse interpolation ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Consider a structure ` `// to keep each pair of ` `// x and y together ` `struct` `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 Code ` `int` `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; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

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)**

## Recommended Posts:

- Program for Stirling Interpolation Formula
- Lagrange's Interpolation
- Newton's Divided Difference Interpolation Formula
- Program to implement Collatz Conjecture
- Program to implement Simpson's 3/8 rule
- Program to implement standard error of mean
- Program to implement Linear Extrapolation
- Program to implement standard deviation of grouped data
- Lagrange's four square theorem
- Bessel's Interpolation
- Newton Forward And Backward Interpolation
- Legendre's formula (Given p and n, find the largest x such that p^x divides n!)
- Print first n Fibonacci Numbers using direct formula
- Roots of the quadratic equation when a + b + c = 0 without using Shridharacharya formula
- Haversine formula to find distance between two points on a sphere

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.