欢迎来到天天文库
浏览记录
ID:55091394
大小:188.00 KB
页数:14页
时间:2020-04-27
《单纯形法C语言程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验:编制《线性规划》计算程序一、实验目的:(1)使学生在程序设计方面得到进一步的训练,掌握Matlab(C或VB)语言进行程序设计中一些常用方法。(2)使学生对线性规划的单纯形法有更深的理解.二、实验用仪器设备、器材或软件环境计算机,MatlabR2009a三、算法步骤、计算框图、计算程序等本实验主要编写如下线性规划问题的计算程序:其中初始可行基为松弛变量对应的列组成.对于一般标准线性规划问题:1.求解上述一般标准线性规划的单纯形算法(修正)步骤如下:对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。设初
2、始基为B,然后执行如下步骤:(1).解,求得,(2).计算单纯形乘子w,,得到,对于非基变量,计算判别数,可直接计算令,R为非基变量集合若判别数,则得到一个最优基本可行解,运算结束;否则,转到下一步(3).解,得到;若,即的每个分量均非正数,则停止计算,问题不存在有限最优解,否则,进行步骤(4).确定下标r,使;142、计算框图为:开始初始可行基B是否得到最优解是否不存在有限最优解确定下标r,使得3.计算程序(Matlab):14A=input('A=');b=input('b=');c=input('c=');formatrat
3、%可以让结果用分数输出[m,n]=size(A);E=1:m;E=E';F=n-m+1:n;F=F';D=[E,F];%创建一个一一映射,为了结果能够标准输出X=zeros(1,n);%初始化Xif(n4、=w*A-c%计算判别数,后面没有加分号,就是为了计算后能够显示出来。。[z,k]=max(panbieshu);%k作为进基变量下标。。fprintf('b''./(B\A(:,%d))为',k);b'./(BA(:,k))if(z<0.)flag=0;%所有判别数都小于0时达到最优解。。fprintf('已找到最优解!');xB=(Bb')';f=cB*xB';fori=1:nmark=0;forj=1:mif(D(j,2)==i)mark=1;X(i)=xB(D(j,1));%利用D找出xB与X之间的关系。。end5、endifmark==0X(i)=0;%如果D中没有X(i),则X(i)为非基变量,所以X(i)=0。。endendfprintf('基向量为:');Xfprintf('目标函数值为:');f14elseif(BA(:,k)<=0)%如果BA(;,k)中的每一个分量都小于零。。flag=0;fprintf('此问题不存在最优解!');%若BA(:,k)的第k列均不大于0,则该问题不存在最优解。。elseb1=Bb';temp=inf;fori=1:mif((A(i,k)>0)&&(b1(i)/(A(i,k)+eps6、))7、-4-1000]运行后的结果为:panbieshu=41000b'./(BA(:,2))为;ans=-463x(1)进基,x(5)退基panbieshu=0500-4b'./(BA(:,2))为;ans=412/5-3x(2)进基,x(4)退基panbieshu=000-1-2b'./(BA(:,2))为;ans=1/01/03已找到最优解!基向量为:X=1421/56/529/500目标函数值为:f=-181)S.t窗口输入:rundanchunxinA=[2310;-1101]b=[61]c=[-1-300]运行后的结果8、为:panbieshu=1300b'./(BA(:,2))为;ans=21x(2)进基,x(4)退基panbieshu=400-3b'./(BA(:,2))为;ans=6/5-114x(1)进基,x(3)退基panbieshu=00-4/5-3
4、=w*A-c%计算判别数,后面没有加分号,就是为了计算后能够显示出来。。[z,k]=max(panbieshu);%k作为进基变量下标。。fprintf('b''./(B\A(:,%d))为',k);b'./(BA(:,k))if(z<0.)flag=0;%所有判别数都小于0时达到最优解。。fprintf('已找到最优解!');xB=(Bb')';f=cB*xB';fori=1:nmark=0;forj=1:mif(D(j,2)==i)mark=1;X(i)=xB(D(j,1));%利用D找出xB与X之间的关系。。end
5、endifmark==0X(i)=0;%如果D中没有X(i),则X(i)为非基变量,所以X(i)=0。。endendfprintf('基向量为:');Xfprintf('目标函数值为:');f14elseif(BA(:,k)<=0)%如果BA(;,k)中的每一个分量都小于零。。flag=0;fprintf('此问题不存在最优解!');%若BA(:,k)的第k列均不大于0,则该问题不存在最优解。。elseb1=Bb';temp=inf;fori=1:mif((A(i,k)>0)&&(b1(i)/(A(i,k)+eps
6、))7、-4-1000]运行后的结果为:panbieshu=41000b'./(BA(:,2))为;ans=-463x(1)进基,x(5)退基panbieshu=0500-4b'./(BA(:,2))为;ans=412/5-3x(2)进基,x(4)退基panbieshu=000-1-2b'./(BA(:,2))为;ans=1/01/03已找到最优解!基向量为:X=1421/56/529/500目标函数值为:f=-181)S.t窗口输入:rundanchunxinA=[2310;-1101]b=[61]c=[-1-300]运行后的结果8、为:panbieshu=1300b'./(BA(:,2))为;ans=21x(2)进基,x(4)退基panbieshu=400-3b'./(BA(:,2))为;ans=6/5-114x(1)进基,x(3)退基panbieshu=00-4/5-3
7、-4-1000]运行后的结果为:panbieshu=41000b'./(BA(:,2))为;ans=-463x(1)进基,x(5)退基panbieshu=0500-4b'./(BA(:,2))为;ans=412/5-3x(2)进基,x(4)退基panbieshu=000-1-2b'./(BA(:,2))为;ans=1/01/03已找到最优解!基向量为:X=1421/56/529/500目标函数值为:f=-181)S.t窗口输入:rundanchunxinA=[2310;-1101]b=[61]c=[-1-300]运行后的结果
8、为:panbieshu=1300b'./(BA(:,2))为;ans=21x(2)进基,x(4)退基panbieshu=400-3b'./(BA(:,2))为;ans=6/5-114x(1)进基,x(3)退基panbieshu=00-4/5-3
此文档下载收益归作者所有