向量之间的比较失败
Comparision between vectors fails
我正在为一门大学课程实现单纯形算法。
代码运行良好,但是当我使用提供的测试问题进行测试时,我没有得到正确的结果。
代码中有一行比较两个向量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
为什么第一次比较成功,第二次又失败了?
问题是您正在将 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
>>
我正在为一门大学课程实现单纯形算法。
代码运行良好,但是当我使用提供的测试问题进行测试时,我没有得到正确的结果。
代码中有一行比较两个向量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
为什么第一次比较成功,第二次又失败了?
问题是您正在将 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
>>