File Exchange

## Range intersection

version 1.10 (1.63 KB) by

Mathematical intersection of range composed of a union of intervals

4.71429
8 Ratings

Updated

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]

Dan

### Dan (view profile)

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

Hannes Mogensen

### Hannes Mogensen (view profile)

Fotios Logothetis

Luis Sarmiento

Ilya

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.

Aurelien Queffurust

### Aurelien Queffurust (view profile)

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 ?

Aurelien Queffurust

### Aurelien Queffurust (view profile)

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

### Shaohan Hu (view profile)

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

Xavier Xavier

### Xavier Xavier (view profile)

Yes you are right, I modified the comments

Thx

Brian B

### Brian B (view profile)

Helpful function, but I believe the second form of the input should be
[lowerbound1, lowerbound2, lowerboundn;
upperbound1, upperbound2, upperboundn]

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

 30 May 2012 1.1 Major modification and bug fixing 8 Jul 2011 1.9 Correction of an error in the input description
##### MATLAB Release
MATLAB 7.8 (R2009a)