2017-10-16 11 views
0

のベクトルにおける1つの最初の最長の連続したセットを探すI持ってMathWorks社のMATLABで次のベクター:私はこのような場合には1の(最長の連続したセットを見つけることができるようにしたいMathWorks社のMATLAB

[1 0 1 1 1 0 0 1 1 0 1 1 1] 

それ3)、このセットが出現するインデックスを印刷します(35)。

このシナリオでは、1 1 1が2回表示されますが、最初のセットのインデックスが印刷されていることを確認したいと思います。

私はこれにどのようなコーディングを使うことができますが、組み込みのmatlab関数を使わずに、ループ専用です。ここで

+0

は 'else else'も許可されていませんか?何か試しましたか? –

+0

関連[matlabの解析](https://stackoverflow.com/q/9192507/5358968)、[Matlab:範囲の検索方法](https://stackoverflow.com/q/18909268/5358968) – Steve

+0

@SardarUsamaはい私は他のステートメントを使用することができますが、私は多くのループを試しましたが、正しく動作するように見えません – mathshelp101

答えて

1

は、組み込み関数のないソリューションです。最初の最長シーケンスの開始と終了のインデックスがほしいと思っています。

data=[1 0 1 1 1 0 0 1 1 0 1 1 1]; 

x=[data 0]; 

c=0; 
for k=1:length(x) 
    if x(k)==1 
    c=c+1; 
    else 
    ind(k)=c; 
    c=0; 
    end 
end 

a=ind(1); 
for k=2:length(ind) 
    if ind(k)>a 
     a=ind(k); 
     b=k; 
    end 
end 

Ones_start_ind=b-a 
Ones_end_ind=b-1 

% results: 
Ones_start_ind = 
3 
Ones_end_ind = 
5 
+0

'max'は組み込み関数です – Irreducible

+0

' max'を使いたくない場合は編集しました。 – Adiel

2

MATLAB関数なしの実装:ここ

%Example Vector 
V=[1 0 1 1 1 0 0 1 1 1 0 1 1 0 1 1 1 0] ; 

%calculate the diff of input 
diff_V=V(2:end)-V(1:end-1); 
N=length(diff_V); 

% prepare start and end variables 
start_idx=[]; end_idx=[]; 
%loop to find start and end 
for kk=1:N 

    if diff_V(kk)==1 %starts with plus 
     start_idx=[start_idx kk+1]; 
    end 

    if diff_V(kk)==-1 %ends with minus 
     end_idx=[end_idx kk]; 
    end 

end 
% check if vector starts with one and adapt start_idx 
if start_idx(1)>end_idx(1) 
start_idx=[1 start_idx]; 
end 

% check if vector ends with one and adapt end_idx 
if start_idx(end)>end_idx(end) 
end_idx=[end_idx length(V)]; 
end 

%alloc output 
max_length=0; 
max_start_idx=0; 
max_end_idx=0; 
%search for start and length of longest epoch 
for epoch=1:length(start_idx) 
    epoch_length=end_idx(epoch)-start_idx(epoch)+1; 
    if epoch_length> max_length 
     max_length=epoch_length; 
     max_start_idx=start_idx(epoch); 
     max_end_idx=end_idx(epoch); 
    end 
end 

出力

max_length = 

3 


max_start_idx = 

3 

max_end_idx = 

5 
関連する問題