range = min(x):0.0001:max(x);
N = numel(range);
x = sort(x);
hit = 0;
i=1;
for j = 1:(N-1)
if range(j) <= x(i) && x(i) < range(j+1)
hit = hit + 1;
i = i+1;
if x(i) == x(i-1)
while x(i) == x(i-1) % If there are more than one of the same
hit = hit + 1; % numbers in succession, this allows x and
i = i+1; % hit to carry on incrementing.
end %while
end %if
end %if
end %for
disp(hit)
このコードは、「range」と「x」を比較します。'x' が 'range' の値の間にあるかどうかを確認します。そうであれば、'hit' カウンターがインクリメントされ、'x' の現在の値もインクリメントされます。
問題は、x のいくつかのランダムな値 (ランダムであることがわかる限り) では、「IF」ステートメントの不等式を満たす必要がありますが、「IF」ステートメントは無視され、for ループが継続し、最終的な'hit' 値が間違っています。
「x」は通常、幅が約 100 万程度の 1D 配列です。
この例では、
`x = [-2.1792 -2.1759 -2.1758 -2.1748 -2.1658 -2.1648 -2.1646 -2.1604 -2.1603 -2.1550]`
'hit' は '10' に等しくなければなりませんが、'j=35' で 'IF' ステートメントをスキップすることを決定したため、代わりに '2' を出力します。
明確にするために。'j=35' の場合、range(j) = -2.1758 および i=3 は x(i)=-2.1758 を意味します
私はそれを確信しています:
range(j) <= x(i) && x(i) < range(j+1)
-2.1758 <= -2.1758 && -2.1758 < -2.1757 %**edited, meant -2.1757 not -2.1759**
本当です。
ここで、目に見えないばかげたことをしているだけだといいのですが。質問の形式が悪い場合は申し訳ありませんが、ここにいるのは初めてです。事前に乾杯。