Akshat Nathani
M = 1000;
A = [1 1 1 0 1 0 0;
1 3 0 1 0 1 0;
1 -1 0 0 0 0 1];
B = [2; 3; 1];
C = [3 2 0 0 -M -M -M];
index = [5 6 7];
m = length(B);
n = length(C);
BS = [];
CB = [];
for i = 1:m
CB(i) = C(index(i));
BS = [BS A(:,index(i))];
end
Y = inv(BS)*A;
XB = inv(BS)*B;
z = C - CB*Y;
while max(z) > 0
[~, EV] = max(z);
ratio = [];
for i = 1:m
if Y(i,EV) > 0
ratio(i) = XB(i)/Y(i,EV);
else
ratio(i) = 10^8;
end
end
test = min(ratio);
if test == 10^8
fprintf('unbounded\n');
return
else
[~, LV] = min(ratio);
index(LV) = EV;
end
BS = [];
CB = [];
for i = 1:m
CB(i) = C(index(i));
BS = [BS A(:,index(i))];
end
Y = inv(BS)*A;
XB = inv(BS)*B;
z = C - CB*Y;
end
z_max = CB*XB;
X = zeros(1,n);
X(index) = XB;
X
z_maX
102303375
3C31
Akshat Nathani
A = [-5 -1 1 0 0;
-6 -5 0 1 0;
-1 -4 0 0 1];
B = [-10; -30; -8];
C = [12 10 0 0 0];
index = [3 4 5];
m = length(B);
n = length(C);
BS = [];
CB = [];
for i = 1:m
CB(i) = C(index(i));
BS = [BS A(:,index(i))];
end
Y = inv(BS)*A;
XB = inv(BS)*B;
z = CB*Y - C;
while min(XB) < 0
[~, LV] = min(XB);
ratio = [];
for j = 1:n
if Y(LV,j) < 0
ratio(j) = abs(z(j)/Y(LV,j));
else
ratio(j) = 10^8;
end
end
test = min(ratio);
if test == 10^8
fprintf('infeasible\n');
return
else
[~, EV] = min(ratio);
index(LV) = EV;
end
BS = [];
CB = [];
for i = 1:m
CB(i) = C(index(i));
BS = [BS A(:,index(i))];
end
Y = inv(BS)*A;
XB = inv(BS)*B;
z = CB*Y - C;
end
z_min = CB*XB;
X = zeros(1,n);
X(index) = XB;
X
z_min
102303375
3C31
Akshat Nathani
102303375
3C31