1、单纯形法程序整理.txt% 单纯形法% 主程序% 单纯形法% 求解线性规划问题% 编程:范中允% 标准矩阵A% 输入标准形式的约束条件系数矩阵A、右端列向量b、约束条件未知数对应目标函数的系数c;% 有需要可以指定迭代的初始单位阵(一组基本可行解);A=1,1,2,1,0;1,4,-1,0,1;c=-2,-1,1,0,0;b=6;4;Table=A,b;c,0;%初始表h,l=size(A);% 给出初始基本主元B=1,1;2,4;BK=B;TableK=Table;% 迭代for j=1:100TableK,BK=SubFc_DieDai(TableK,BK,h,l);t=0;disp(第,
2、num2str(j),次迭代);for i=1:lif(TableK(h+1,i)0)t=TableK(i,l+1)/TableK(i,s);break;endif(i=h)%若元素全为负,则报错error(主列元素全为非正,规划问题有无界解!);endend%k=1;for i=1:h%若未知数出现负值,则是初始迭代标准性表产生的,应更换初始主元;if(TableK(i,l+1)2)%有两个及以上最小值时,移动分子的列位k=k-1;for i=1:k%检查比值是否为负if(TableK(R(i),j)/TableK(R(i),s)=0)t=TableK(R(i),j)/TableK(R(i)
3、,s);break;endif(i=k)%若比值全为负,则寻找下一列flag=1;break;endendif(j=6)asdfa=1;endif(flag=1)%判断是否需要移动列位flag=0;%重置标记k=k+1;%恢复kcontinue;endfor i=1:kif(TableK(R(i),j)/TableK(R(i),s)0)%排除负元素continue;endif(TableK(R(i),j)/TableK(R(i),s)=t)t=TableK(R(i),j)/TableK(R(i),s);%记录判别数最小值r=i;%记录下标endend endk=1;for i=1:h%判断有无
4、相等的最小值及最小值的重数if(TableK(i,s)=0)continue;%跳过为0的项endif(TableK(i,j)/TableK(i,s)=t)R(k)=i;%记录下标k=k+1;endendif(k=2)%若已无重复最小值,退出循环break;endendend%第 3 页单纯形法程序整理.txt% 子程序-迭代function TableK,BK = SubFc_DieDai( TableK,BK,h,l )%迭代一步 % 给出上一步得到的TableK,和这一步的主元位置BK,得到这一步的TableK和下一步的BK% 初等行变换 将主元对应列化成单位列向量TableK=SubFc_ChuDengHangBianHuan(TableK,BK);disp(当前标准性表:);disp(TableK);%检查判别数是否全为正t=0;for i=1:lif(TableK(h+1,i)=t)t=TableK(h+1,i);%记录判别数最小值s=i;%记录下标endendif(t=0)return;end% TableK=functionTable,B;% TableK=Table;% 选主元素r,s= SubFc_XuanZhuYuan(TableK,h,l);disp(更换主元位置:行/列);disp(r,s);% 更换主元BK(r,:)=r,s;%更换主元end第 4 页