probably a dumb question - logical indexing

1 view (last 30 days)
Hello
Maybe I have forgotten the little I learned about logical indexing, but I can't think of a way to translate this into something using find function or any sort of logical indexing.
Here is what I am trying to do in terms of a loop:
for t = 1:numel(T)
if abs(T(t+4000) - T(t)) <= 0.1
tau = t;
break;
end
end
I want to compare temperature values taken throughout a given amount of time. If the difference between temperatures that are 4000 indices (timepoints in this case) apart is less than 0.1, it gives me the timepoint. This is a basic heating/cooling problem and I just want to find tau.
I feel like there is a much more computationally efficient way to do this, but other options are escaping me at the moment. Thanks

Accepted Answer

Sean de Wolski
Sean de Wolski on 8 Jul 2015
Edited: Sean de Wolski on 8 Jul 2015
tau = find(T(4001:end)-T(1:end-4000)<=0.1,1,'first')
Something like this (not tested in ML)
Though this won't be faster for very large T where tau is small because it's doing the subtraction for the entire T-4000 elements array where as the loop only runs until it stops (which could be 1 iteration).

More Answers (1)

bmeyer
bmeyer on 8 Jul 2015
Gotcha. Thanks - will probably stick with the loop then.

Community Treasure Hunt

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

Start Hunting!