I have an array of angles and I need to identify periods where this array is above or below certain thresholds

3 views (last 30 days)
Array of angles ranges from 0 - 360. I need to know the indices of values below 15, between 165 and 195, and above 345. Attempted using:
array_logical = array < 15 && 165 < array < 195 && 345 < array;
array_logical = array < 15 || 165 < array < 195 || 345 < array;
What is the best way to apply these three conditions in one logical array?

Accepted Answer

dpb
dpb on 10 Apr 2014
ix= (x<15 | iswithin(x,166,194) | x>345;
where used the "syntactic sugar" of help function for the compound condition to make the upper level expression simpler to read. NB: since my function is inclusive changed the limits to match
function flg=iswithin(x,lo,hi)
% returns T for values within range of input
% SYNTAX:
% [log] = iswithin(x,lo,hi)
% returns T for x between lo and hi values, inclusive
flg= (x>=lo) & (x<=hi);
Your problem above is primarily using the short-circuiting operators instead of the element-wise ones (the "double operator" form instead of single).
"These operations are explained in the MATLAB Programming documentation on logical operators, under the topic of Basic Program Components."

More Answers (1)

Mischa Kim
Mischa Kim on 10 Apr 2014
Edited: Mischa Kim on 10 Apr 2014
Use
array_ind = find(array<15 | (array>=165 & array<=195) | array>345)

Categories

Find more on Characters and Strings in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!