Делаю программу на 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];
Я не особо в сайлабе разбираюсь поэтому не могу понять в чем проблема. Сама программа у меня в итоге должна показывать решение задач линейного программирования графическим методом (рисовать ограничения, выделять область допустимых значений и показывать точку оптимума)