How to find interpolated values when there are multiple?

27 views (last 30 days)
I'm looking to find points where a vector crosses a certain threshold. I have been using interp1 to try to accomplish this but it does not recognise multiple solutions.
for example:
a = [1 2 3 5 8 4];
b = interp1(a, 1:length(a), 6);
returns 4.3333
This is one of the correct answers, but I am looking to get this to return both points where the interpolated value would be 6 (4.33 and 5.5). Any help much appreciated!

Accepted Answer

John D'Errico
John D'Errico on 9 May 2018
Edited: John D'Errico on 9 May 2018
interp1 assumes a single valued functional relationship. You cannot use interp1 to do what you wish to do.
Instead, use a tool like Doug Schwarz's intersections , downloaded from the file exchange.
a = [1 2 3 5 8 4];
intersections(1:length(a),a,[1 6],[6 6])
ans =
4.3333
5.5
  4 Comments
Walter Roberson
Walter Roberson on 15 Aug 2022
Is that your independent variable? If so then it duplicates the range 4:.5:8; what would you like to have happen in that range?
If you want to get both outputs, then I recommend you break the problem up into two interp1 searches,
a1 = 0:0.5:8; a2 = 8:-0.5:4;
b1 = values for 0 to 8; b2 = values for 8 to 4
q = list of points to query
out1 = interp1(a1, b1, q(:));
out2 = interp1(a2, b2, q(:));
out = [out1, out2];
This would have two columns, one for results for 0 to 8, and the other for results for the 8 to 4. q values not present in a range would give nan in the output, which you could detect with isnan();

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!