Octave 向量之间的比较失败

Octave 向量之间的比较失败,octave,Octave,我正在为大学课程实施单纯形算法 代码运行良好,但是当我使用提供的测试问题进行测试时,我没有得到正确的结果 代码中的一行比较两个向量pMinC和0(n,1)其中n是pMinC的维度,以确定结果是否最优 在第二次迭代中,我得到的向量pMinC=[0.000004.000003.50000-33.00000-3.000000.00000]明显大于零,但算法终止 代码如下所示: while(done == false) % compute pMinC if (sum(pMinC > z

我正在为大学课程实施单纯形算法

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

代码中的一行比较两个向量
pMinC
0(n,1)
其中
n
pMinC
的维度,以确定结果是否最优

在第二次迭代中,我得到的向量
pMinC=[0.000004.000003.50000-33.00000-3.000000.00000]
明显大于零,但算法终止

代码如下所示:

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

为什么比较会先工作,然后第二次失败?

问题是您正在比较n*1向量和1*n向量。在这种情况下,倍频程广播变量(类似于matlabs
bsxfun
),生成矩阵。矩阵的和是向量


使用
如果有(pMinC>0)
修复问题

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

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

ans =

 2

>> pMinC > zeros(1,7)

ans =

 0     1     1     0     0     0     0

>> 

您不应该忽略“警告:使用二进制扩展”。。。因此,pMinC>zeros(n,1)是一个矩阵->和一个向量。使用if(any(pMinC>zeros(1,n))我删除了
优化
标记,因为它与问题无关。也删除了
matlab
标记,因为这是倍频程的一个特殊问题。matlab将抛出
维度不匹配