set intervals with starts and ends in two arrays

2 views (last 30 days)
I know this should be quite an easy answer, but I cannot find the solution: I have two arrays one marks the beginning of the intervals the other sets the ends. so:
starts = [ 1 20 30 40];
ends = [3 22 34 41];
with the ends always ending before the next start. I would like to get an array intervals which should appear either:
intervals = [1 2 3 20 21 22 30 31 32 33 34 40 41];
or:
intervals = [1 2 3; 20 21 22; 30 31 32 33 34; 40 41];
this sounds so dumb to me that I cannot find a way...anyway, I hope somebody can easily help me thanks.
Also, I need to AVOID FOR CYCLES TO DO IT.
  3 Comments
gabriele fadanelli
gabriele fadanelli on 20 Apr 2021
I don't really know, but the solution to the problem should be given without using a for cycle, it is mandatory, not my fault.
gabriele fadanelli
gabriele fadanelli on 20 Apr 2021
I thought it was easy to do it with
starts : ends
or
starts':ends'
but none of them works

Sign in to comment.

Answers (1)

Matt J
Matt J on 20 Apr 2021
Edited: Matt J on 20 Apr 2021
Because it's homework, I've left some blanks for you to fill in.
starts = [ 1 20 30 40];
ends = [3 22 34 41];
D=ends-starts;
M=______;
N=numel(starts);
e=(0:M).';
map=______
map = 5×4 logical array
1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 1 0
result=double(map).*e(:)+starts;
result(map).'
ans = 1×13
1 2 3 20 21 22 30 31 32 33 34 40 41

Community Treasure Hunt

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

Start Hunting!