2015-01-07 155 views
1

我正在实施大学课程的单纯形算法。向量比较失败

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

一行比较两个向量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 

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

+0

你不应该忽略“warning:using binary expansion”...因此pMinC> zeros(n,1)是一个矩阵 - >求和一个向量。使用if(any(pMinC> zeros(1,n)) – Andy

+0

我删除了'optimisation'标签,因为它与问题无关,也删除了'matlab'标签,因为这是一个八度的特殊问题。一个'尺寸不匹配' – Daniel

回答

3

问题是你正在比较n * 1向量与1 * n向量。在这种情况下,八度广播变量(类似于matlabs bsxfun)产生矩阵。矩阵的总和是一个向量。

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

0

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

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

ans = 

2 

>> pMinC > zeros(1,7) 

ans = 

0  1  1  0  0  0  0 

>>