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

tea*_*eef 2 matlab minimum

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

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

nis*_*pio 5

如果数字都存储在向量中,x您可以执行以下操作:

x = [1 0 2 0 3 0 4];
y = min(x(x>0));
Run Code Online (Sandbox Code Playgroud)

这是基于你的陈述

数字要么为零,要么明显大于 eps

如果你的意思是在较大的幅度,并要接受,你可以使用非零负值:

x = [1 0 -2 0 3 0 4];
y = min(x(x~=0));
Run Code Online (Sandbox Code Playgroud)

请注意,当存在负数时,这将返回最负数,而不是具有最小非零幅度的数.要获得具有最小非零幅度的数字,您可以使用:

x = [1 0 -2 0 3 0 4];
xnonzero = x(x~=0);
[~,idx] = min(abs(xnonzero));
y = xnonzero(idx);
Run Code Online (Sandbox Code Playgroud)

它似乎并不优雅.可能有更直接的方式.

  • `builtin('_ paren',x(x~ = 0),abs(x(x~ = 0))== min(abs(x(x~ = 0))))`或`y = x(x~ = 0); ans = y(abs(y)== min(abs(y)));` (2认同)