資源描述:
《單純形法matlab程序.doc》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、functionZ=dcxf(c,A,N)%定義函數(shù)名稱(chēng)為dcxf。l=length(N);CB=c(N(1):N(l))[m,n]=size(A);b=A(:,n);A=A(:,1:n-1);%參數(shù)包括目標(biāo)函數(shù)系數(shù)(C),約束條件的系數(shù)矩陣(A),%其中A的最后一列為約束條件的右端值b,初始基向量的位置(N)。sigma=c-CB*A;%計(jì)算檢驗(yàn)數(shù)sigma。display('初始單純形表為:');%輸出初始的單純形表table=[nan,nan,nan,c;CB',N',b,A;nan,nan,nan,sigma]opt=1;step=0;whileoptstep=step+1;%定義
2、循環(huán),直到第“step”步找到最優(yōu)解(opt=0)。ifsum(sigma>0)==0%利用檢驗(yàn)數(shù)判斷是否得到最優(yōu)解,并給出提示。display('沒(méi)有得到最優(yōu)解,繼續(xù)迭代.');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=le
3、ngth(outb);%判斷足否出現(xiàn)退化現(xiàn)象,如出現(xiàn)退化,給il{語(yǔ)言提示,并取最后出現(xiàn)的符合出基條件的變量為出基變量。ifnum~=1display('出現(xiàn)退化情況.');endoutb=outb(num);fori=1:m%將單純形表進(jìn)行“轉(zhuǎn)軸”運(yùn)算,得到新的單純形表。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,in
4、b)*A(i,inb);endendenddisplay('主元素為:'),a=[A(outb,inb),outb,inb]%輸出主元素,計(jì)算新單純形表的檢驗(yàn)數(shù)。A=Anew;b=bnew;N(outb)=inb;fori=1:lCB(i)=c(N(i));endsigma=c-CB*A;enddisplay('迭代得到的單純形表為:');%輸出得到的新單純形表。并給出提示語(yǔ)句。table=[nan,nan,nan,c;CB',N',b',A;nan,nan,nan,sigma]enddisplay('得到最優(yōu)解:');Z=CB*b';%計(jì)算檢驗(yàn)數(shù)