File Exchange

image thumbnail

Range intersection

version 1.10 (1.63 KB) by

Mathematical intersection of range composed of a union of intervals

8 Ratings



View License

Purpose: Range/interval intersection

A and B two ranges of closed intervals written
as vectors [lowerbound1 upperbound1 lowerbound2 upperbound2]
or as matrix
[lowerbound1, lowerbound2, lowerboundn;
upperbound1, upperbound2, upperboundn]
A and B have to be sorted in ascending order

out is the mathematical intersection A n B

>> out=range_intersection([1 3 5 9],[2 9])
out = [2 3 5 9]
>> out=range_intersection([40 44 55 58], [42 49 50 52])
out = [42 44]

Comments and Ratings (15)


Dan (view profile)

for 1d ranges : interesection = max(min(smallRanges(:,2),mainRange(2))-max(smallRanges(:,1),mainRange(1)),0);


Ilya (view profile)

Thanks a lot!

Bruno Luong

Bruno Luong (view profile)

Good coding, fast


Per (view profile)

Really useful for me.

Xavier Xavier

Xavier Xavier (view profile)

Yes, I wanted a fast code so the input should be correct. I don't check neither that AB are sorted in ascending order.

One more test could be added:
x1 = [0 10 16 20 ]
x2 = [ 3 5 15 19 25]
-> out = 3 5 16 19

now if x1 has one more value :
x1 = [0 10 16 20 26]
you get :
Attempted to access first(2); index out of bounds because numel(first)=1.

Error in range_intersection (line 35)
if first(2)<second(1)

The test would be to check that the input vector are divisible by 2 ?

Since the bug has been fixed on 30 May 2012 , I use range_intersection . It works like a charm and is definetely faster than other FEx MergeBrackets.m (Interval merging by Bruno Luong)

Xavier Xavier

Xavier Xavier (view profile)

The file has been modified to remove the bug. Now I make sure that 'first' is ahead 'second'.

Shaohan Hu

buggy? e.g. produces bad results on ([40 44 55 58], [42 49 50 52]); seems like you didn't make sure 'first' being ahead of 'second' for each iteration

Eric T

Eric T (view profile)

Xavier Xavier

Xavier Xavier (view profile)

Yes you are right, I modified the comments


Brian B

Helpful function, but I believe the second form of the input should be
[lowerbound1, lowerbound2, lowerboundn;
upperbound1, upperbound2, upperboundn]
instead of what is shown in the comments.

Compare the following:
range_intersection([1 3 4 5],[3 4])
range_intersection([1 3; 4 5],[3 4])
range_intersection([1 3; 4 5]',[3 4])

Thanks for sharing this.




Major modification and bug fixing


Correction of an error in the input description

MATLAB Release
MATLAB 7.8 (R2009a)

Inspired by: Interval merging

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Win prizes and improve your MATLAB skills

Play today