找到一个标量,使矢量加法为正

问题描述 投票:1回答:1

我有两个向量a =(a_1,a_2,...,a_n)和b =(b_1,b_2,...,b_n)。我想找到一个标量“s”,使得s = max {s:a + sb> = 0}。这里不等式是元素,即对于所有i = [1,...,n],a_i + sb_i> = 0。如何计算这样一个标量?此外,如果s =无穷大是解,我们将s = s = 1。

矢量“a”也是非负的(即每个元素> = 0)。

vector max linear-algebra
1个回答
1
投票

好吧,使用a_i> = 0,我们可以看到s = 0始终是一个解决方案。一种可能的方法是解决所有组件的不等式,然后采用域的交集。它们的上限(如果有限,它是交集的一部分)则是你想要的数字。这意味着:

inequalities

是你想要解决的问题。注意,因为在第二种情况下b_i是负的,所以右侧的数字是正的。这意味着你得到的所有s_i的交集都是非空的。最大值的下限为0,所以从技术上讲,你可以忽略b_i为正的不等式,无论如何它们都是正确的。但是,为了完整性和说明目的:

示例:a =(1,1),b =( - 0,5,1)

  1. 1 - s * 0.5> = 0,表示s <= 2,或s in(-inf,2]
  2. 1 + s * 1> = 0,表示s> = -1,或者[-1,inf]中的s

交集:[-1,2]这意味着两个方程式保持的最大值为2。

这是最直接的方式,当然可能有更优雅的方式。

编辑:作为算法:检查b_i是正还是负。如果为正,则保存s_i = 1(如果您希望将值绑定为1)。如果为负数,请保存s_i = -a_i / b_i。最后你想要真正采取最低限度!

但效率更高:当b_i为正时,你实际上并不需要关心。无论如何,你的最大值将大于或等于零。因此,只需检查小于0的情况,并保持最小值-a_i / b_i,因为这是该区域的上限。

伪代码:

s = 1
for i in range = 1 to length(b):
    if b[i]<0:
        s = min(s, -a[i]/b[i]) 

为什么最低?因为-a [i] / b [i]是该区域的上限。

© www.soinside.com 2019 - 2024. All rights reserved.