Error in dual simplex algorithm

1 回表示 (過去 30 日間)
SUSHMA MB
SUSHMA MB 2015 年 6 月 20 日
コメント済み: cwshep 2015 年 6 月 20 日
I have a code for dual simplex algorithm, given below. But i am not able to rectify the error shown by this code. I want to run the code for the following constraints, type = 'min'; c = [-2 3 4]; A = [-1 –1 –1;2 2 2]; b = [-1;4]; "subs = dsimplex(type, c, A, b)" . Please help me to sort the error.
function varargout = dsimplex(type, c, A, b)
% The Dual Simplex Algorithm for solving the LP problem
% min (max) z = c*x
% Subject to Ax >= b
% x >= 0
%
if type == 'min'
mm = 0;
else
mm = 1;
c = -c;
end
str = 'Would you like to monitor the progress of computations?';
A = -A;
b = -b(:);
c = c(:)';
[m, n] = size(A);
A = [A eye(m) b];
A = [A;[c zeros(1,m+1)]];
question_ans = questdlg(str,'Make a choice Window','Yes','No','No');
if strcmp(question_ans,'Yes')
p1 = 'y';
else
p1 = 'n';
end
if p1 == 'y'
disp(sprintf('\n\n Initial tableau'))
A
disp(sprintf(' Press any key to continue ...\n\n'))
pause
end
subs = n+1:n+m;
[bmin, row] = Br(b);
tbn = 0;
while ~isempty(bmin) & bmin < 0 & abs(bmin) > eps
if A(row,1:m+n) >= 0
disp(sprintf('\n\n Empty feasible region\n'))
varargout(1)={subs(:)};
varargout(2)={A};
varargout(3) = {zeros(n,1)};
varargout(4) = {0};
return
end
col = MRTD(A(m+1,1:m+n),A(row,1:m+n));
if p1 == 'y'
disp(sprintf(' pivot row-> %g pivot column-> %g',...
row,col))
end
subs(row) = col;
A(row,:)= A(row,:)/A(row,col);
for i = 1:m+1
if i ~= row
A(i,:)= A(i,:)-A(i,col)*A(row,:);
end
end
tbn = tbn + 1;
if p1 == 'y'
disp(sprintf('\n\n Tableau %g',tbn))
A
disp(sprintf(' Press any key to continue ...\n\n'))
pause
end
[bmin, row] = Br(A(1:m,m+n+1));
end
x = zeros(m+n,1);
x(subs) = A(1:m,m+n+1);
x = x(1:n);
if mm == 0
z = -A(m+1,m+n+1);
else
z = A(m+1,m+n+1);
end
disp(sprintf('\n\n Problem has a finite optimal solution\n\n'))
disp(sprintf('\n Values of the legitimate variables:\n'))
for i=1:n
disp(sprintf(' x(%d)= %f ',i,x(i)))
end
disp(sprintf('\n Objective value at the optimal point:\n'))
disp(sprintf(' z= %f',z))
disp(sprintf('\n Indices of basic variables in the final tableau:'))
varargout(1)={subs(:)};
varargout(2)={A};
varargout(3) = {x};
varargout(4) = {z};
  1 件のコメント
cwshep
cwshep 2015 年 6 月 20 日
Please specify the error you are receiving. The only one I am getting is
Undefined function or variable 'Br'.
If I remove that line (but set bmin and brow) it completes successfully. It looks like you are just missing the Br function.

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangeDates and Time についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by