Finding a noninteger value from an array

13 次查看(过去 30 天)
I have an array which looks like:
x = linspace(0,1,101);
To find the index of the maximum point from an array, I can write:
[val,ind] = max(x);
However, I need the index of a particular point, let's say 0.70. How should i write the commands to find this?
My second question is that I have a specific value y = 0.703. I need to do my calculation using the array x, but I have to start from the value in x that is closest to y. Which means I am looking for the index of the point 0.70 in x, but i need to express it in terms of y in my code. How can I do that?

采纳的回答

Matt J
Matt J 2012-12-20
Both questions have the same answer
[~,loc]=min(abs(x-y))

更多回答(2 个)

Kye Taylor
Kye Taylor 2012-12-20
编辑:Kye Taylor 2012-12-20
To do (1) and (2) try
y = 0.7; % or y = 0.73;
[~,idx] = min(abs(x-y));
% idx contains the index of the value in x closest to y

Matthew Murphy
Matthew Murphy 2016-7-6
Given the array x, you could also use the find command.
find(x == .7) --> ans = 71
For the second part, you could try a slightly different way with the same command.
Given some plus/minus window of .01, you could do this:
find(x < .703 + .01 & x > .703 - .01 ) --> ans = 71 72
Now, there are multiple values, so you could use a while loop with smaller and smaller margins until one value is found (with a catch to widen the margin if no values are found).
[I know this is an old post, but I still wanted to follow up with an approach that worked for me.]
  2 个评论
Matt J
Matt J 2016-7-6
编辑:Matt J 2016-7-6
Using find() without floating point tolerances can be hit or miss, for example,
>> x=0:0.3:1
x =
0 0.3000 0.6000 0.9000
>> find(x==(1-.7))
ans =
Empty matrix: 1-by-0
That is why I recommended the use of min() for both scenarios raised by the OP,
>> [~,loc]=min(abs(x-(1-.7)))
loc =
2
Matthew Murphy
Matthew Murphy 2016-7-6
I think my version would work if you had the explicit value (eg .3) used in find.
x=0:0.3:1
x =
0 0.3000 0.6000 0.9000
find(x == .3)
ans =
2
You are definitely right with the tolerance issue, no problem there. In my application, I had points to search for, so I had exact values.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Elementary Math 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by