0
$\begingroup$

The title is quite vague, but I don't see how to phrase it.

I'm new to MatLab and have very little experience with matrix calculation.

Suppose a matrix "a" :

a =

     2     5
     6    12
    13    17

It represent some intervals of values.

Then a matrix "b" that represent wider intervals :

b =

     1     8
     9    20

I need to compare these two matrix so the result will have the same number of rows than a and as many columns as there are rows in b. In that particular case the result should be :

result =

     4     0
     3     4
     0     5

explanation : the first row of result is [4, 0] because the first row of a have 2 4 values included in the interval of the first rows of b and 0 in the second. 2, 3, 4 and 5 (from a) all falls between 1 and 8 (from b).

The second row is [3, 4] because 6, 7 and 8 fall between 1 and 8 (3 numbers in the first intervals of b) while 9, 10, 11 and 12 fall between 9 and 20 (4 numbers in the second interval of b).

$\endgroup$
0
$\begingroup$

If the intervals are $[p,q]$ and $[r,s]$, then the size of the intersection is $\max(0,1 + \min(q,s) - \max(p,r))$. So the following code should work:

m = size(a,1);
n = size(b,1);
lower = max( repmat(a(:,1),1,n), repmat(b(:,1),1,m).' );
upper = min( repmat(a(:,2),1,n), repmat(b(:,2),1,m).' );
c = max( 0, 1 + upper - lower );
$\endgroup$
  • $\begingroup$ I don't really understand, but that seems to work just fine. Awesome. Would be nice if you could explain further. $\endgroup$ – Johnny5 Jun 21 '12 at 12:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.