找到3个数字之间的最小值

时间:2013-10-30 21:49:12

标签: matlab minimum

如何找到三个非零的最小数字。

我尝试引入一个非常小的数字eps = 1e-6(我的数字为零或明显大于eps)并在min(x,eps),min(y,eps)等之间进行测试。我没有得到任何东西有没有办法用函数做到这一点?

2 个答案:

答案 0 :(得分: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);

看起来并不优雅。可能有更直接的方式。

答案 1 :(得分:4)

numbers = [1 3 4 -2 1 0];
answer = min(numbers(numbers>0));

answer == 1