单纯形算法 matlab
%单纯形 %目标函数标准化 % min x1-3x2+2x3 %输入参量 N=[3 -1 2;-2 4 0;-4 3 8]; B=eye(3); A=[N B]; cn=[1;-3;2]; cb=zeros(3,1); c=[cn;cb]; b=[7;12;10]; while(1) invb=inv(B); cn=cn-N'*invb'*cb; if cn>=0 xb=B\b; disp('find') xb break else p=(find(cn==min(cn)));%enter to B b=B\b; a=A(:,p); a=B\a; m=b./a; q=(find(m==min(m(m>0))));%out of B %swap t=B(:,q); B(:,q)=N(:,p); N(:,p)=t; t=cb(q); cb(q)=cn(p); cn(p)=t; end end B n=size(A,2); %提取A的列数 a=zeros(size(A')); for i=1:n a(i,:)=A(:,i); end x=zeros(1,6); for i=1:n for j=1:3 if a(i,:)==B(:,j)' x(i)=xb(j); end end end x
朝闻道