How to find interpolated values when there are multiple?
28 次查看(过去 30 天)
显示 更早的评论
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!
0 个评论
采纳的回答
John D'Errico
2018-5-9
编辑:John D'Errico
2018-5-9
interp1 assumes a single valued functional relationship. You cannot use interp1 to do what you wish to do.
a = [1 2 3 5 8 4];
intersections(1:length(a),a,[1 6],[6 6])
ans =
4.3333
5.5
4 个评论
Walter Roberson
2022-8-15
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();
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Multirate Signal Processing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!