单纯形法matlab程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

functionZ=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,sigma]opt=1;step=0;whileoptstep=step+1;%定义循环,直到第“step”步找到最优解(opt=0)。ifsum(sigma0)==0%利用检验数判断是否得到最优解,并给出提示。display('没有得到最优解,继续迭代.');opt=0;elseinb=find(sigma==max(sigma));%利用单纯形方法找到入基变量的位置num=length(inb);Inb=inb(num)flag=0;fori=1:m%利用单纯形方法找出出基变量的位置ifA(i,inb)0theta(i)=b(i)/A(i,inb);elsetheta(i)=inf;endendoutb=find(theta==min(theta));num=length(outb);%判断足否出现退化现象,如出现退化,给il{语言提示,并取最后出现的符合出基条件的变量为出基变量。ifnum~=1display('出现退化情况.');endoutb=outb(num);fori=1:m%将单纯形表进行“转轴”运算,得到新的单纯形表。forj=1:n-1ifi==outbAnew(i,j)=A(outb,j)/A(outb,inb);bnew(i)=b(outb)/A(outb,inb);elseAnew(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);endendenddisplay('主元素为:'),a=[A(outb,inb),outb,inb]%输出主元素,计算新单纯形表的检验数。A=Anew;b=bnew;N(outb)=inb;fori=1:lCB(i)=c(N(i));endsigma=c-CB*A;enddisplay('迭代得到的单纯形表为:');%输出得到的新单纯形表。并给出提示语句。table=[nan,nan,nan,c;CB',N',b',A;nan,nan,nan,sigma]enddisplay('得到最优解:');Z=CB*b';%计算检验数

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功