如何在MATLAB中测试范围值是否包含在任何其他范围值中?

如何在MATLAB中测试范围值是否包含在任何其他范围值中?,matlab,vector,range,Matlab,Vector,Range,我试图检查两个向量中是否有多个条目包含一对范围,一个向量的范围是否是另一个范围的一部分 我有一个测试范围向量,它包含一对条目,例如:tr=[99 143];条目也可能不止一对。我试图检查这个范围是否是来自另一个向量的任何成对条目的子范围,例如v=[9 79 97 190 205 278 293 304] 我正在使用MatlabPlatfrom。上面例子的答案应该是97-190。这是我尝试过的代码。这在该测试集上给出了正确的结果 tr=[99 143]; v=[9 79 97 190 205

我试图检查两个向量中是否有多个条目包含一对范围,一个向量的范围是否是另一个范围的一部分

我有一个测试范围向量,它包含一对条目,例如:tr=[99 143];条目也可能不止一对。我试图检查这个范围是否是来自另一个向量的任何成对条目的子范围,例如v=[9 79 97 190 205 278 293 304]


我正在使用MatlabPlatfrom。上面例子的答案应该是97-190。

这是我尝试过的代码。这在该测试集上给出了正确的结果

 tr=[99 143];
 v=[9 79 97 190 205 278 293 304];
 for i=1:2:length(tr)
     for j=1:2:length(v)
      if(tr(i)>=v(j) && tr(i+1) <=v(j+1))    
        display('yes');
        tr(i) 
        tr(i+1)
        v(j)
        v(j+1)
       end 
     end
 end
tr=[99143];
v=[9 79 97 190 205 278 293 304];
i=1:2时:长度(tr)
对于j=1:2:长度(v)

如果(tr(i)>=v(j)&&tr(i+1)这里有一种向量化方法,使用与和的逻辑比较

让我们考虑一个更一般的例子,其中<>代码> Tr/代码>中的一些范围没有出现在<代码> v<代码>中,或者出现不止一次:

tr = [99 143 10 20 40 99];
v = [9 79 97 190 205 278 293 304 99 143];
然后

表示
tr
99 143
)中的第一个范围包含在
v
97 190
99 143
)中的两个范围中,二合一,三合一

c = (tr(1:2:end) >= v(1:2:end).') & (tr(2:2:end) <= v(2:2:end).'); % subrange conditions
[ii, jj] = find(c); % row and column indices of true entries
result = accumarray(jj, ii, [numel(tr)/2 1], @(t){v([2*t-1 2*t])}); % build result
>> celldisp(result)
result{1} =
    97   190
    99   143
result{2} =
     9    79
result{3} =
     []