2017-01-18 5 views
1

を使用して、再び、私は見つけ対応する値とのトラブルを持っている:はどのように内容isMember-コマンド正しく

考えてみましょうベクトルP_INとベクトルspacing_Pin: spacing_Pinは-27から始まるとの間隔が2で終了ベクトルであります0.0001。 spacing_Pinの最初のエントリは、次のとおり

  • -27
  • -26.9999
  • -26.9998
  • ...
  • -26.7400(2601thエントリ)

最初のエントリP_inの値は-26.7400であり、P_inとspacing_Pinの両方に明確に含まれている。私はMATLABでismember(P_in,spacing_Pin)入力するときしかし、結果はベクトルが始まるです:だから

、それはP_INの最初のエントリが含まれていないと言いますin spacing_Pin。しかしそれは間違っている!

P_in1   = table(:,1) 
P_out1   = table(:,2) 
spacing_Pin  = transpose(linspace(-27,2,290001)); % spacing = 0.0001 
P_out1_intrp = interp1(P_in1,P_out1,spacing_Pin,'spline'); 

P_in = P_in1 + some_constant; 

% max(some_constant) = 0.0205, min(some_constant) = -1.135 
% the entries of some_constant have many digits after the dot. 
% The first entry for example is: -0,117094826063334 
% this might be the issue since my spacing has accurracy 0.0001 
% this is probably not the problem with ismember(), but another one I have to solve 

P_out = P_out1_intrp(ismember(P_in,spacing_Pin)); 

OK:

は、ここに私のコードの小型版です。 some_constantやその他の変数の値が必要な場合は、何とかアップロードしてみることができます。すべてのテーブルがかなり長いので、私はどのように現時点ではわかりません。

+0

もう一度!あなたのコードを投稿してください。実行していることを正確に理解することなく、あなたを助けることは不可能です。また、最小限の完全な例を作成する方法については、[here](http://stackoverflow.com/help/mcve)を参照してください。 – buzjwa

+0

私はちょうど私の質問を編集しました。私の執筆があまり混乱しないように願っています。 –

答えて

0

your previous questionのように、ismembertolを用いることが好ましい。

freq = -27:0.01:2; 
P_in = [-26.74, pi, 0, 42]; 
P_in_isInFreq = ismembertol(P_in, freq, eps); 

ここで、P_in_isInFreq[1 0 1 0]となります。出力が最初の入力と同じサイズの論理配列であることに注意してください。

+0

ok、thy for oyur help Naveh!私のサンプルコードの最後の行を 'P_out = P_out1_intrp(ismembertol(P_in、spacing_Pin、0.01));'に変更しました。今、 'ismembertol(P_in、spacing_Pin、0.01)'はすべてのエントリに1を持ちます。 P_inには40のエントリがあります。変更されたコード行はP_out1_intrpの最初の40個のエントリを返すようになりました。しかし、これは私が望むものではありません。例えば、-17.77はP_inの10番目のエントリです。 spacing_Pinにも含まれています(エントリ92301)。したがって、私のP_outは 'P_out1_intrp(92301)' = 45.9905というエントリを持つべきです。しかし私のP_outにはそのような価値はありません! –

関連する問題