2017-03-03 8 views
-1

私のプログラムのこの部分ではIDという変数をRealTagID変数に割り当てたいと思います。次に、私はID変数をRealTagID_NEWに割り当てようとしています。 ID変数は私の測定データから得たもので、下にアップロードしました(EPCから来ています)。それは私がしたいどのように働いていない、最初の部分に何らかの理由で同じであるMatlabの9BとBBのためのbecuase ...ここMatlabのプログラムでismemberが正しく動作しないのはなぜですか?

が私のコードです:

close all 
clc 

RealTagID=['A3 ' ;'A1 ' ; '9F ' ;'9D ' ; '9B ' ; 'A9 ' ; 'A7 ' ; 'A5 ' ]; 
%The last two characters of the EPC code of the tags 
RealPOSX=[40 31 0 -31 -40 -32 0 +31]; 
%The x positions of fixed tags 
RealPosY=[0 27 40 27 0 -27 -40 -27]; 
% The y positions of fixed tags 

for i=1:length(XLocalization) 
    temp=Epc{i}; 
    ID(i,:)=temp(end-2:end); 
    %Makes a new variable, called 'ID', which is the last two characters from 
    %the measured EPC codes 
end 

for i =1 :length(RealPOSX) 

    idx = all(ismember(ID,RealTagID(i,:)),2) 
    pos=find(idx==1); 
    POS{i}=pos; 
end 
%------------------------------------------------------------------------------------------------------------------------------- 

RealPOSX_NEW=[20 17 0 -17 -20 -17 0 17]; 
%The x positions of fixed tags 
RealPosY_NEW=[0 12 20 12 0 -12 -20 -12]; 
% The y positions of fixed tags 
RealTagID_NEW=['B3 ' ;'B5 ' ; 'B7 ' ;'BB ' ; 'AD ' ; 'AB ' ; 'AF ' ; 'B1 ' ]; 
%The last two characters of the EPC code of the tags 

for i =1 :length(RealPOSX_NEW) 
    idxx = all(ismember(ID,RealTagID_NEW(i,:)),2) 
    poss=find(idxx==1); 
    POSS{i}=poss; 


end 

第二部ではそれも価値があります。その場合のmatlabについては、B1はBBと等しく、B3はBB、BBはBB、BBはBB、BBはBBである。

私はそれらを比較したい、それらが同じであれば、0でないなら論理1にしましょう。しかし、このBB変数のためか、わかりません。

私はismember関数を使用していますが、それは最良の選択ではないようです。何か案が?私は何を使うべきですか?

私の目標は、POS変数とPOSS変数を等しくすることです。つまり、それらのすべてが1x8セルで、各セルの要素が58である必要があります。今のところmatlab BBの場合も9B、B1、B3、B5、B7、B9と等しいので、それらのいくつかは116を持っています。だから、BBはBBだけでなく、この他の変数でも同じでなくてはなりません。

は、ここで私は進展なしでそれに私の一日のすべてを費やし、私はあなたが私を助けることを願って、私の測定Measurement

です。

+0

私は思う*あなたが問題を抱えている理由は、「BB」は単一の配列要素ではなく、2つの要素を持つ文字配列です。 'ismember( 'BB'、 '9B')'はこのエラーを示します。それを超えて、あなたの質問にはあなたの本当の質問に答えるのに役立たない余分な情報がたくさんあり、いくつかの変数を定義していないのでコードは実行できません。希望の結果を[mcve]に入力してください。 – beaker

+0

大変申し訳ありませんが、私はそれを修正しました! RealPOSXが2番目のループに必要であることを忘れてしまった。私もテキストをchancged、私は今より明らかに私の質問があることを望む。 あなたは正しいと思いますが、問題の解決方法はまだ分かりません。 – tiby007

+0

誰も考えられませんか? – tiby007

答えて

0

最後に、strfindで解決しました。 ここに私のコードですが、それは完全に動作しています。

close all 
clc 
RealPOSX=[40 31 1 -31 -40 -32 1 +31]; 
%The x positions of fixed tags 
RealPosY=[1 27 40 27 1 -27 -40 -27]; 
% The y positions of fixed tags 
RealTagID=['A3 ' ;'A1 ' ; '9F ' ;'9D ' ; '9B ' ; 'A9 ' ; 'A7 ' ; 'A5 ' ]; 

for i=1:length(XLocalization) 
    temp=Epc{i}; 
    ID(i,:)=temp(end-2:end); 

end 



for i =1 :length(RealPOSX)   
    idx = strfind(string(ID), RealTagID(i,:)) 

    pos= find(not(cellfun('isempty', idx))) 
    POS{i}=pos; 
    end 

%------------------------------------------------------------------------------------------------------------------------------- 

RealPOSX_NEW=[20 17 0 -17 -20 -17 0 17]; 
%The x positions of fixed tags 
RealPosY_NEW=[0 12 20 12 0 -12 -20 -12]; 
% The y positions of fixed tags 
RealTagID_NEW=['B3 ' ;'B5 ' ; 'B7 ' ;'BB ' ; 'AD ' ; 'AB ' ; 'AF ' ; 'B1 ' ]; 
%The last two characters of the EPC code of the tags 

for i =1 :length(RealPOSX) 
    %idxx = all(ismember(ID,RealTagID_NEW(i,:)),2) 
    %poss=find(idxx==1); 
    idxx = strfind(string(ID), RealTagID_NEW(i,:)) 
    poss= find(not(cellfun('isempty', idxx))) 
    POSS{i}=poss; 
関連する問題