2

ゼロ以外の3つの中で最小の数を見つけるにはどうすればよいですか?

私は非常に小さな数を導入しようとしましたeps = 1e-6(私の数はゼロか、eps よりも明らかに大きい)、min(x,eps)、min(y,eps) などの間でテストを行いましたが、何も得られませんでした。関数でそれを行う方法はありますか?

4

2 に答える 2

5

数値がすべてベクトルに格納されている場合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);

あまりエレガントに見えません。おそらくもっと直接的な方法があります。

于 2013-10-30T21:52:52.347 に答える
4
numbers = [1 3 4 -2 1 0];
answer = min(numbers(numbers>0));

answer == 1
于 2013-10-30T21:53:00.490 に答える