单纯形法matlab程序

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

function Z=dcxf(c,A,N) %定义函数名称为dcxf。

l=length(N);

CB=c(N(1):N(l))

[m,n]=size(A);

b=A(:,n);

A=A(:,1:n-1);

%参数包括目标函数系数(C),约束条件的系数矩阵(A),

%其中A的最后一列为约束条件的右端值b,初始基向量的位置(N)。

sigma=c-CB*A;%计算检验数sigma。

display('初始单纯形表为:');%输出初始的单纯形表table=[nan,nan,nan,c;CB',N',b,A;nan,nan,nan,si gma]

opt=1;step=0;

while opt

step=step+1;%定义循环,直到第“step”步找到最优解(opt=0)。

if sum(sigma>0)==0 %利用检验数判断是否得到最优解,并给出提示。

display('没有得到最优解,继续迭代.'); opt=0;

else

inb=find(sigma==max(sigma)); %利用单纯形方法找到入基变量的位置

num=length(inb);

Inb=inb(num)

flag=0;

for i=1:m %利用单纯形方法找出出基变量的位置

if A(i,inb)>0

theta(i)=b(i)/A(i,inb);

else

theta(i)=inf;

end

end

outb=find(theta==min(theta));

num=length(outb); %判断足否出现退化现象,如出现退化,给il{语言提示,并取最后出现的符合出基条件的变量为出基变量。

if num~=1

display('出现退化情况.');

end

outb=outb(num);

for i=1:m %将单纯形表进行“转轴”运算,得到新的单纯形表。

for j=1:n-1

if i==outb

Anew(i,j)=A(outb,j)/A(outb,inb);

bnew(i)=b(outb)/A(outb,inb);

else

Anew(i,j)=A(i,j)-A(outb,j)/A(outb,inb)*A(i,inb );

bnew(i)=b(i)-b(outb)/A(outb,inb)*A(i,inb);

end

end

end

display('主元素为:'),a=[A(outb,inb),outb,inb] %输出主元素,计算新单纯形表的检验数。

A=Anew;b=bnew;

N(outb)=inb;

for i=1:l

CB(i)=c(N(i));

end

sigma=c-CB*A;

end

display('迭代得到的单纯形表为:'); %输出得到的新单纯形表。并给出提示语句。

table=[nan,nan,nan,c;CB',N',b',A;nan,nan,nan,s igma]

end

display('得到最优解:');

Z=CB*b'; %计算检验数

相关文档
最新文档