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.

 採用された回答

Dyuman Joshi
Dyuman Joshi 2023 年 9 月 22 日

0 投票

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 件のコメント

Roohollah
Roohollah 2023 年 9 月 22 日
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 2023 年 9 月 22 日
Many thanks.
interp1 worked well.
Dyuman Joshi
Dyuman Joshi 2023 年 9 月 22 日
編集済み: Dyuman Joshi 2023 年 9 月 22 日
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 2023 年 9 月 22 日
Seems to be wrong. x0 must be between 11 and 12.5.
Dyuman Joshi
Dyuman Joshi 2023 年 9 月 22 日
As y0 is between 4 and 5.3, so correspondingly, x0 should be between 9 and 11, which it is.
Roohollah
Roohollah 2023 年 9 月 22 日
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?
Dyuman Joshi
Dyuman Joshi 2023 年 9 月 22 日
"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 2023 年 9 月 22 日
Many thanks

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeInterpolation についてさらに検索

製品

リリース

R2023a

タグ

質問済み:

2023 年 9 月 22 日

コメント済み:

2023 年 9 月 22 日

Community Treasure Hunt

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

Start Hunting!

Translated by