我正在为大学课程实施单纯形算法。
代码运行良好,但是当我使用提供的测试问题进行测试时,我得不到正确的结果。
代码中的一行比较了两个向量pMinC
和zeros(n,1)
,其中n
是pMinC
的维度,以确定结果是否是最优的。
在第二次迭代中,我得到的矢量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
为什么比较先工作然后第二次失败?
答案 0 :(得分:3)
问题是你正在将n * 1向量与1 * n向量进行比较。在这种情况下,八度音程广播变量(类似于matlabs bsxfun
),从而产生矩阵。矩阵之和是一个向量。
使用if any(pMinC>0)
解决问题。
答案 1 :(得分:0)
比较是总结逻辑测试的结果,而不是正偏差的总和。这就是你想要的吗?
>> sum(pMinC > zeros(1,7))
ans =
2
>> pMinC > zeros(1,7)
ans =
0 1 1 0 0 0 0
>>