《用c语言实现单纯形法的编程.doc》由会员分享,可在线阅读,更多相关《用c语言实现单纯形法的编程.doc(5页珍藏版)》请在金锄头文库上搜索。
1、用c语言实现单纯形法的编程#include stdio.h#include math.h#include int M,N;float c100,a100100,b100,CZ100,Dn100,th100,x100;int Fn100;int K,L,ths;float zy;int shuru();void findmm();void chang();main() float max_Z,sum=0,s=0;int i,j,r=0;if(!shuru() printf(ERROR!n);return 0;while(rN) r=0; for(j=0;j0)findmm(); if(ths=M
2、) goto loop; else chang(); else r+; loop:if(ths=M) printf(n此线性规划没有有限最优解!n); printf(n此线性规划最终迭代结果为:); printf(n Cj ); for(j=0;jN;j+) printf(%.3f ,cj);printf(n); printf(Cb Xb b ); for(j=0;jN;j+) printf( x%d ,j+1); printf( th ); for(i=0;iM;i+) printf(n%.1f ,CZi); printf(x%d ,Fni+1); printf(%.3f ,bi); for
3、(j=0;jN;j+) printf( %.3f ,aij); printf( %.3f ,thi); printf(n); printf( Dn ); for(j=0;jN;j+) printf( %.3f ,Dnj); printf(n);printf(n此时的解为:);sum=0;for(i=0;iM;i+) sum+=CZi*bi; printf(nx%d=%.3f,Fni+1,bi);max_Z=sum;printf(n此时目标函数的值为:Z= %.3fn,max_Z); else printf(n此线性规划最终迭代结果为:); printf(n Cj ); for(j=0;jN;j
4、+) printf(%.3f ,cj);printf(n); printf(Cb Xb b ); for(j=0;jN;j+) printf( x%d ,j+1); printf( th ); for(i=0;iM;i+) printf(n%.1f ,CZi); printf(x%d ,Fni+1); printf(%.3f ,bi); for(j=0;jN;j+) printf( %.3f ,aij); printf( %.3f ,thi); printf(n); printf( Dn ); for(j=0;jN;j+) printf( %.3f ,Dnj); printf(n);print
5、f(n故,目标函数的基解为:);sum=0;for(i=0;iM;i+) sum+=CZi*bi; printf(nx%d=%.3f,Fni+1,bi);max_Z=sum;printf(n目标函数的值为:max_Z= %.3fn,max_Z); system(pause);return 1;int shuru() int i,j;float sum=0; printf(请输入线性规划问题的约束条件个数M:); scanf(%d,&M); printf(请输入线性规划问题的决策变量个数N:); scanf(%d,&N);printf(请输入目标函数的系数:);for(i=0;iN;i+) sc
6、anf(%f,&ci);printf(请输入线性规划问题的约束矩阵:n);for(i=0;iM;i+) for(j=0;jN;j+) scanf(%f,&aij); scanf(%f,&bi);printf(请输入线性规划问题的初始基:n);for(j=0;jN;j+) scanf(%f,&xj);for(i=j=0;jN;j+)if(xj!=0) Fni=j;CZi=cj;i+;for(j=0;jN;j+) sum=0; for(i=0;iM;i+) sum+=CZi*aij; Dnj=cj-sum;return 1;void findmm() int i;int max,min;max=0
7、; K=max;for(i=1;iDnK) max=i; K=max;for(i=0;iM;i+) if(aiK!=0) thi=bi/aiK;min=i; else thi=-1; ths=0; for(i=0;iM;i+)if(thi0) ths=ths+1; for(i=0;i0)&(thithmin) min=i;L=min;zy=aLK;FnL=K;CZL=cK; void chang() int i,j;float t;for(j=0;jN;j+) aLj=aLj/zy;bL=bL/zy;for(i=0;iM;i+) if(i=L) continue; t=aiK; bi=bL*(-t)+bi; for(j=0;jN;j+) aij=aLj*(-t)+aij; t=DnK;for(j=0;jN;j+) Dnj=(-t)*aLj+Dnj;K=0; for(i=1;iDnK) K=i; for(i=0;iM;i+) if(aiK!=0) thi=bi/aiK; else thi=-1;