2015-09-27 27 views
0

我有兩個數組在MATLAB中,說A和B包含隨機值如下。數組A和B都包含一對; 2,4,6或8個或更多元素(僅偶數)和A總是比B少元素。兩個數組中的元素都是預先排序的。如何在MATLAB中檢查從一個數組到另一個數組的值的範圍?

A=[152 271]; 
B=[107 266 314 517 538 732]; 

我想要查詢所有對值的A中的範圍(一對,152-271在本例中)對所有對B.,擴大/修改對B的值本身,如果它超過B值。在這個例子中,首先比較A的對152-271和第一對B(即107-266)。因爲152大於107,而271大於266.我們將用271修改第一對B的266個值,以完全包含B中第一對A的範圍.A和B中的兩個間隔(範圍)應該稍微重疊修改乙values.We當沒有元素A.檢查最終的結果將是這樣將停止:

A=[152 271]; 
B=[107 271 314 517 538 732]; 

在下面綠色,RAD和黃色這圖像代表A,B和最終B(僅修改)值。 enter image description here

+0

您是否考慮從A和B中滑動對或者是那些不相交的對? – Divakar

+0

另外當你比較'152 271'和B的'314 517'時,如果我說得對,它不應該改變'314'到'152'嗎? – Divakar

+0

A和B中的兩個區間(範圍)都應稍微重疊以進行修改。 – erbal

回答

0

您可以使用find與選項last查明B中

A=[152 271 280 320]; 
B=[107 266 314 517 538 732]; 

for interval = 1:numel(A)-1 
    %get the index of the lower interval bound in B 
    index=find(B<=A(interval),1,'last'); 
    %increase the upper interval bound if nessecary 
    B(index+1)=max(B(index+1),A(interval+1)); 
end 

指數由於你沒有指定任何一個角落的情況下(在A間隔超過B)我沒有conciser他們。如果可能發生,您需要擴展代碼。

0
A=[152 271]; 
B=[107 266 314 517 538 732];  
mat=[A B]; 
A1 = vec2mat(mat,2) 
n = size(mat,1); 
[t,p] = sort(mat(:)); 
z = cumsum(accumarray((1:2*n)',2*(p<=n)-1)); 
z1 = [0;z(1:end-1)]; 
A2 = [t(z1==0 & z>0),t(z1>0 & z==0)] 
% Reference Link: (http://www.mathworks.com/matlabcentral/newsreader/view_thread/171594) by Roger Stafford 
相關問題