File Exchange

image thumbnail

Range intersection

version 1.10 (1.63 KB) by

Mathematical intersection of range composed of a union of intervals

4.71429
8 Ratings

11 Downloads

Updated

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

EXAMPLE USAGE:
  >> 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

Dan (view profile)

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

Ilya

Ilya (view profile)

Thanks a lot!

Bruno Luong

Bruno Luong (view profile)

Good coding, fast

Per

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

Thx

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.

-b

Updates

1.10

Major modification and bug fixing

1.9

Correction of an error in the input description

MATLAB Release
MATLAB 7.8 (R2009a)
Acknowledgements

Inspired by: Interval merging

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

» Watch video