@wb_by
Учусь

Подматрица некорректно определена. В чем ошибка?

Делаю программу на scilab, но тут такого тега вроде нет.

Проблема заключается в части кода, где я пытаюсь из матрицы ограничений Aeq и правой части неравенств beq сделать фомулы типо у = 2x + 1 для функции plot. То, что ошибка там я узнал потому, что первый disp в цикле выводит значения, а потом программа выбрасывает ошибку и прекращает работу. Текст ошибки:
exec('/Users/nikita/Desktop/лабы/scilab/lab4/lab4.sce', -1)

   4.242D-16
  -4.
на строке    19 исполняемого файла /Users/nikita/Desktop/лабы/scilab/lab4/lab4.sce

Подматрица некорректно определена.

Сам код программы:

//Использую вариант (c)

c = [1; 2];
Aeq = [
1, 1;
3, 1;
1, 5;
1, 0;
0, 1;
];
beq = [4; 4; 4; 3; 3];
n = length(beq) - 1;
xv = zeros(n);
yv = zeros(n);
x = zeros(n+1);
y = zeros(n+1);

for i = 1:n
   K = [
   Aeq(i, 1), Aeq(i, 2);
   Aeq(i+1, 1), Aeq(i+1, 2)
   ];
   k = [beq(i); beq(i+1)];
   x0 = linsolve(K, k);
   xv(i) = abs(x0(1));
   yv(i) = abs(x0(2));
   
   disp(x0);
   
   if ((Aeq(i, 1) <> 0) && (Aeq(i, 2) <> 0)) then //ОШИБКА ГДЕ-ТО ТУТ
      x(i) = 0:0.1:4;
      y(i) = (beq(i) - Aeq(i, 1) * x(i))/Aeq(i, 2);
   elseif (Aeq(i, 1) == 0) then
      y(i) = [beq(i); beq(i)];
      x(i) = [0; 4];
   else
      y(i) = [0; 4];
      x(i) = [beq(i); beq(i)];
   end
   
   disp(y, x);
   
   plot2d(x(i), y(i));
   
end

if ((Aeq(n+1, 1) <> 0) && (Aeq(n+1, 2) <> 0)) then
   x(n+1) = 0:0.1:4;
   y(n+1) = (beq(n+1) - Aeq(n+1, 1) * x(n+1))/Aeq(n+1, 2);
elseif (Aeq(n+1, 1) == 0) then
   y(n+1) = [beq(n+1); beq(n+1)];
   x(n+1) = [0; 4];
else
   y(n+1) = [0; 4];
   x(n+1) = [beq(n+1); beq(n+1)];
end

plot2d(x(n+1), y(n+1));

a=gca();
a.data_bounds=[0,0;4,4];

Я не особо в сайлабе разбираюсь поэтому не могу понять в чем проблема. Сама программа у меня в итоге должна показывать решение задач линейного программирования графическим методом (рисовать ограничения, выделять область допустимых значений и показывать точку оптимума)
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы