ゼロ以外の3つの中で最小の数を見つけるにはどうすればよいですか?
私は非常に小さな数を導入しようとしましたeps = 1e-6
(私の数はゼロか、eps よりも明らかに大きい)、min(x,eps)、min(y,eps) などの間でテストを行いましたが、何も得られませんでした。関数でそれを行う方法はありますか?
数値がすべてベクトルに格納されている場合x
は、次のことができます。
x = [1 0 2 0 3 0 4];
y = min(x(x>0));
これはあなたの声明に基づいています
数値がゼロであるか、明らかに大きい
eps
マグニチュードが大きいことを意味し、ゼロ以外の負の値を受け入れたい場合は、次を使用できます。
x = [1 0 -2 0 3 0 4];
y = min(x(x~=0));
これは、負の数が存在する場合、ゼロ以外の最小の大きさを持つ数ではなく、最も負の数を返すことに注意してください。最小のゼロ以外の大きさの数値を取得するには、次を使用できます。
x = [1 0 -2 0 3 0 4];
xnonzero = x(x~=0);
[~,idx] = min(abs(xnonzero));
y = xnonzero(idx);
あまりエレガントに見えません。おそらくもっと直接的な方法があります。
numbers = [1 3 4 -2 1 0];
answer = min(numbers(numbers>0));
answer == 1