【问题标题】:finding the minimum between 3 numbers找到3个数字之间的最小值
【发布时间】:2013-11-10 17:53:46
【问题描述】:

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

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

【问题讨论】:

  • 很难准确地说出您想要做什么。你试过min(x, min(y, z))吗?
  • 是的,这个不起作用,因为例如当 y=0 时,结果为零(所有系数都是正数)但我想保持最小的严格正数

标签: matlab minimum


【解决方案1】:

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

x = [1 0 2 0 3 0 4];
y = min(x(x>0));

这是基于您的陈述

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

如果您的意思是 magnitude 更大,并且您想接受非零负值,您可以使用:

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);

看起来不是很优雅。可能还有更直接的方法。

【讨论】:

  • 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)));
  • @Frederick 我不确定是否要回复“酷!”或“糟糕!”
  • @Frederick +1 for y = x(x~=0); ans = y(abs(y) == min(abs(y))); 您可以保留您发布的第一个。 :)
  • 我希望 Mathworks 能够提供更简洁的语法来实现 builtin('_paren', ... )。我会一直使用类似的东西如果它是可读的
  • 是的 - 我同意 - 像 foo(1)(2) 这样的东西在 python 中工作(当然,对吧?),它真的很有帮助
【解决方案2】:
numbers = [1 3 4 -2 1 0];
answer = min(numbers(numbers>0));

answer == 1

【讨论】:

    猜你喜欢
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2019-06-11
    • 2015-10-27
    相关资源
    最近更新 更多