向量之间的比较失败

Comparision between vectors fails

我正在为一门大学课程实现单纯形算法。

代码运行良好,但是当我使用提供的测试问题进行测试时,我没有得到正确的结果。

代码中有一行比较两个向量pMinCzeros(n,1),其中npMinC的维度,判断结果是否最优。

在第二次迭代中,我得到了明显大于零的向量 pMinC = [ 0.00000 4.00000 3.50000 -33.00000 -3.00000 0.00000 0.00000],但是算法终止了。

代码如下所示:

while(done == false)
   % compute pMinC
   if (sum(pMinC > zeros(n,1)))
      % do stuff
   else
      done = true;
   endif
endwhile

为什么第一次比较成功,第二次又失败了?

问题是您正在将 n*1 向量与 1*n 向量进行比较。在这种情况下,octave 广播变量(类似于 matlabs bsxfun),从而产生一个矩阵。矩阵的总和是一个向量。

使用if any(pMinC>0)解决问题。

比较是逻辑测试结果的总和,而不是正偏差的总和。那是你想要的吗?

>> sum(pMinC > zeros(1,7))

ans =

 2

>> pMinC > zeros(1,7)

ans =

 0     1     1     0     0     0     0

>>