Find X for a given Y using interpolation

Hi all,
Suppose
x = [5 8 9 11 12.5 17];
y = [2 3.5 4.0 5.3 6.7 8.2];
Now I want to find the corresponding value for x where y = 4.8 using interpolation. I was wondering if there is any function in MATLAB which can do this calculation.

 Réponse acceptée

Dyuman Joshi
Dyuman Joshi le 22 Sep 2023

0 votes

x and y are not mapped one-to-one for interpolation, there is an element missing in y.
interp1 is what you are looking for.

8 commentaires

Roohollah
Roohollah le 22 Sep 2023
Thanks for reminding me for the issue.
What I need is a function to input x,y and y = 4.8. Then it returns the corresponding x for y = 4.8.
Roohollah
Roohollah le 22 Sep 2023
Many thanks.
interp1 worked well.
Look into the documentation (the link I attached above) for more info.
x = [5 8 9 11 12.5 17];
y = [2 3.5 4.0 5.3 6.7 8.2];
x0 = interp1(y,x,4.8)
x0 = 10.2308
Roohollah
Roohollah le 22 Sep 2023
Seems to be wrong. x0 must be between 11 and 12.5.
Dyuman Joshi
Dyuman Joshi le 22 Sep 2023
As y0 is between 4 and 5.3, so correspondingly, x0 should be between 9 and 11, which it is.
Yes, you are right.
As the last question. I am working on my real data. This is the code I use;
delta40 = interp1(F,delta,F40);
And I get the following error message:
Error using matlab.internal.math.interp1
Sample points must be unique.
Error in interp1 (line 188)
VqLite = matlab.internal.math.interp1(X,V,method,method,Xqcol);
Error in Test (line 40)
F40 = 0.4 * Fmax; delta40 = interp1(F,delta,F40);
What does "Sample points must be unique." mean?
"What does "Sample points must be unique." mean?"
Let's introduce a repeating value in the data set -
y = [2 2 3.5 4.0 5.3 6.7 8.2 ];
x = [5 6.5 8 9 11 12.5 17 ];
Now if you want to interpolate for y between 2 and 3.5, say 3, which x values should be used for interpolation?
5-8 or 6.5-8? Interpolation for such a case does not make sense.
So, we have to use non-repeating values - a.k.a unique values in MATLAB terminology. That's what the error is stating.
Now, as 6.5-8 is a subset of the range 5-8 for the same value of 2, we can eliminate it from our data and then interpolate -
%Get unique values of the array in sorted manner
[y,idx] = unique(y)
y = 1×6
2.0000 3.5000 4.0000 5.3000 6.7000 8.2000
idx = 6×1
1 3 4 5 6 7
x = x(idx)
x = 1×6
5.0000 8.0000 9.0000 11.0000 12.5000 17.0000
interp1(y,x,3)
ans = 7
Note that this is just one of the possible cases of data with repeating values.
Roohollah
Roohollah le 22 Sep 2023
Many thanks

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Interpolation dans Centre d'aide et File Exchange

Produits

Version

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by