1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| function [x_opt, fx_opt, iter] = Simplex_eye(A, b, c) [m, n] = size(A); iter = 0;
basic_indices = [];
for j = 1:n
if isequal(A(:, j:j + m - 1), eye(m)) basic_indices = j:j + m - 1; break; end
end
nonbasic_indices = setdiff(1:n, basic_indices);
while (true && iter < 1000) iter = iter + 1;
s = zeros(1, n); s(nonbasic_indices) = c(nonbasic_indices)' - c(basic_indices)' * A(:, nonbasic_indices);
if all(s <= 0) break; end
[~, k] = max(s);
d = b ./ A(:, k); d(d <= 0) = inf; [~, l] = min(d); l = basic_indices(l);
basic_indices(basic_indices == l) = k; nonbasic_indices(nonbasic_indices == k) = l;
A(:, nonbasic_indices) = A(:, basic_indices) \ A(:, nonbasic_indices); b = A(:, basic_indices) \ b; A(:, basic_indices) = eye(m); end
x = zeros(n, 1); x(basic_indices) = b; fx_opt = c' * x; x_opt = x; end
|