if statement for range of array values

20 views (last 30 days)
Trader
Trader on 9 May 2012
Is there a better way to write this 'if' statement?
for i = 1:size(somevalue)
if (x(i) < xmax && x(i-1) < xmax && x(i-2) < xmax) || (y(i) < ymax && y(i-1) < ymax)
disp('do something');
end
Thanks for your help!
  1 Comment
Oleg Komarov
Oleg Komarov on 9 May 2012
Trivial question, do you want the condition to be verified on any (&&) of the 3 consecutive values or on all (&)?

Sign in to comment.

Answers (3)

Wayne King
Wayne King on 9 May 2012
How about
if (any(x<xmax) || any(y<ymax))
disp('do something');
end
or do you really want to test if every one is? Of course it seems that x<xmax or y<ymax are to be always true.
  4 Comments
Jan
Jan on 9 May 2012
@Sean: This needs to create a temporary array of the length numel(x)+numel(y). Therefore I assume this is slower than Wayne's approach.

Sign in to comment.


Dr. Seis
Dr. Seis on 9 May 2012
I think what you might be after is something like:
if all(x(i-1:i+1) < xmax) || all(y(i-1:i+1) < ymax)
% something
end
  2 Comments
Dr. Seis
Dr. Seis on 9 May 2012
Misinterpreted your "if" statement on my previous attempt. This should be what you are after.
Note: "all" will return TRUE if and only if the entire array returned from "x<xmax" is all 1's. "any" will return TRUE if there is one or more 1 in the array returned by "x<xmax".
Richard Brown
Richard Brown on 9 May 2012
If doing it this way, the x indices should be i-2:i, and the y indices should be i-1:i, and the loop should start at 3

Sign in to comment.


Richard Brown
Richard Brown on 9 May 2012
To check I've understood correctly, you only want to do something if the current and two preceding x values are all less than xmax, or, the current and preceding y values are both less than ymax. Then, the indices you are interested in are given by:
idx = find(filter([1 1 1], 1, x < xmax) == 3 | filter([1 1], 1, y < ymax) == 2)
Note that 1 and 2 will never appear in idx as your expression cannot be evaluated for these

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!