matlab单纯形法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%求解标准型线性规划:max c*x;s.t. A*x=b;x>=0

%本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b %N是初始的基变量的下标

%输出变量sol是最优解

%输出变量val是最优值,kk是迭代次数

function [sol,val,kk]=ssimplex(A,N)

[mA,nA]=size(A);

kk=0; %迭代次数

flag=1;

while flag

kk=kk+1;

if A(mA,:)<=0 %已找到最优解

flag=0;

sol=zeros(1,nA-1);%给每个变量赋初值0

for i=1:mA-1

sol(N(i))=A(i,nA);%给基变量赋新值(替换0)

end %给出最优解

val=-A(mA,nA);

else

for i=1:nA-1

if A(mA,i)>0&A(1:mA-1,i)<=0 %问题有无界解

disp('have infinite solution!');

flag=0;

break;

end

end

if flag %还不是最优表,进行转轴运算

temp=0;

for i=1:nA-1

if A(mA,i)>temp

temp=A(mA,i);

inb=i; % 进基变量的下标

end

end %选择最大检验数纵向对应的变量为进基变量

sita=zeros(1,mA-1);

for i=1:mA-1

if A(i,inb)>0

sita(i)=A(i,nA)/A(i,inb);

end

end

temp=inf;

for i=1:mA-1

if sita(i)>0&sita(i)

temp=sita(i);

outb=i; %出基变量下标

end

end %选择最小的sita横向对应的变量为出基变量

%以下更新N

for i=1:mA-1

if i==outb

N(i)=inb;%以进基变量的下标替代出基变量的下标

end

end

%以下进行转轴运算

A(outb,:)=A(outb,:)/A(outb,inb);%将主元化为1

for i=1:mA

if i~=outb

A(i,:)=A(i,:)-A(outb,:)*A(i,inb);%将进基变量所在列除主元外的其余元素化为0

end

end

end

end

end

相关文档
最新文档