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

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

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."

2 Comments

Good to hear...I see I left an extraneous '(' around--was going to wrap terms but decided it didn't need it and didn't clean 'em all up...

Sign in to comment.

More Answers (1)

Use
array_ind = find(array<15 | (array>=165 & array<=195) | array>345)

2 Comments

This found the indices, but I needed the logical array to properly identify where these sections are in addition to the times inbetween. Thanks for the help though!
Identical to my w/o the sugar-coating--just drop find

Sign in to comment.

Categories

Find more on Operators and Elementary Operations in Help Center and File Exchange

Asked:

on 10 Apr 2014

Commented:

dpb
on 10 Apr 2014

Community Treasure Hunt

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

Start Hunting!