linprog дает неправильное решение?

Я пытаюсь решить задачу линейного программирования в Matlab, ввод

[weights,~,flag]=linprog(f,[],[],C,b,0,10);

так что, согласно мануалу, это должно решить проблему min f*x with the constraints C*x=b and 0<=x<=10. Таким образом, все записи x должны быть положительными. Однако решение, которое я получаю, содержит отрицательные записи (см. пример, чтобы воспроизвести проблему ниже). Флаг, который я возвращаю, равен 1, что, согласно документам, означает, что метод сошелся.

Что я делаю не так?

вот ввод

C =

    19    20    18    20    18
     3     3     4     5     3
     1     1     1     1     2
     1     1     1     1     1

и

b =

    19
     4
     1
     1

и

f =

     1
     1
     1
     1

результат

weights =

   84.1104
  -62.8328
  -41.5552
   21.2776
   -0.0000

person olamundo    schedule 08.03.2012    source источник


Ответы (1)


Хорошо, я нашел проблему: я думал, что нижняя граница и верхняя граница являются скалярами, но они являются векторами, указывающими для каждой координаты, каковы ее верхняя и нижняя границы, поэтому правильный способ вызвать функцию:

[weights,~,flag]=linprog(f,[],[],C,b,zeros(size(C,2),1,1),ones(size(C,2))*10);
person olamundo    schedule 08.03.2012