2022年单纯形法C程序源代码 .pdf
单纯形法 C程序源代码2008-05-15 15:59 #include #include #define m 3 /*定义约束条件方程组的个数*/ #define n 5 /*定义未知量的个数 */ float M=1000000.0; float Amn; /*用于记录方程组的数目和系数;*/ float Cn; /*用于存储目标函数中各个变量的系数*/ float bm; /*用于存储常约束条件中的常数*/ float CBm; /*用于存储基变量的系数 */ float setam; /*存放出基与入基的变化情况*/ float deltan; /*存储检验数矩阵 */ float xn; int numm; /*用于存放出基与进基变量的情况*/ float ZB=0; /*记录目标函数值 */ void input(); void print(); int danchunxing1(); int danchunxing2(int a); void danchunxing3(int a,int b); int danchunxing1() int i,k=0; int flag=0; float min=0; for(i=0;i=0) flag=1; else flag=0;break; if(flag=1) return -1; for(i=0;ideltai) min=deltai;k=i; return k; int danchunxing2(int a) int i,k,j; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - int flag=0; float min; k=a; for(i=0;im;i+) if(Aik=0) flag=1; else flag=0;break; if(flag=1) printf(n该线性规划无最优解 !n); return -1; for(i=0;i0) setai=bi/Aik; else setai=M; min=M; for(i=0;i=setai) min=setai;j=i; numj=k+1; CBj=Ck; return j; void danchunxing3(int p,int q) int i,j,c,l; float temp1,temp2,temp3; c=p;/* 行号*/ l=q;/*列号*/ temp1=Acl; bc=bc/temp1; for(j=0;jn;j+) Acj=Acj/temp1; for(i=0;im;i+) if(i!=c) if(Ail!=0) temp2=Ail; bi=bi-bc*temp2; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - for(j=0;jn;j+) Aij=Aij-Acj*temp2; temp3=deltal; for(i=0;in;i+) deltai=deltai-Aci*temp3; void print() int i,j=0; printf(n-n); for(i=0;im;i+) printf(%8.2ftX(%d) %8.2f ,CBi,numi,bi); for(j=0;jn;j+) printf(%8.2f ,Aij); printf(n); printf(n-n); printf(ttt); for(i=0;in;i+) printf( %8.2f,deltai); printf(n-n); void input() int i,j; /*循环变量 */ int k; printf(请输入方程组的系数矩阵A(%d行%d列):n,m,n); for(i=0;im;i+) for(j=0;jn;j+) scanf(%f,&Aij); printf(n请输入初始基变量的数字代码num矩阵:n); for(i=0;im;i+) scanf(%d,&numi); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - printf(n请输入方程组右边的值矩阵b:n); for(i=0;im;i+) scanf(%f,&bi); printf(n请输入目标函数各个变量的系数所构成的系数阵C:n); for(i=0;in;i+) scanf(%f,&Ci); for(i=0;in;i+) deltai=Ci; for(i=0;im;i+) k=numi-1; CBi=Ck; void main() int i,j=0; int p,q,temp; input(); printf(n-n); printf( tCBtXBtbt); for(i=0;in;i+) printf( X(%d)t,i+1); for(i=0;in;i+) xi=0; printf(n); while(1) q=danchunxing1(); if(q=-1) print(); printf(n所得解已经是最优解 !n); printf(n最优解为 :n); for(j=0;jm;j+) temp=numj-1; xtemp=bj; for(i=0;in;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - printf(x%d=%.2f ,i+1,xi); ZB=ZB-xi*Ci; printf(ZB=%.2f,ZB); break; print(); p=danchunxing2(q); printf(np=%d,q=%d,p,q); if(q=-1) break; danchunxing3(p,q); 运行结果如下:请输入方程组的系数矩阵A(3 行 5 列): 1 2 1 0 0 4 0 0 1 0 0 4 0 0 1 请输入初始基变量的数字代码num矩阵: 3 4 5 请输入方程组右边的值矩阵b: 8 16 12 请输入目标函数各个变量的系数所构成的系数阵C: -2 -3 0 0 0 - CB XB b X(1) X(2) X(3) X(4) X(5) - 0.00 X(3) 8.00 1.00 2.00 1.00 0.00 0.00 0.00 X(4) 16.00 4.00 0.00 0.00 1.00 0.00 0.00 X(5) 12.00 0.00 4.00 0.00 0.00 1.00 -名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - - -2.00 -3.00 0.00 0.00 0.00 - p=2,q=1 - 0.00 X(3) 2.00 1.00 0.00 1.00 0.00 -0.50 0.00 X(4) 16.00 4.00 0.00 0.00 1.00 0.00 -3.00 X(2) 3.00 0.00 1.00 0.00 0.00 0.25 - -2.00 0.00 0.00 0.00 0.75 - p=0,q=0 - -2.00 X(1) 2.00 1.00 0.00 1.00 0.00 -0.50 0.00 X(4) 8.00 0.00 0.00 -4.00 1.00 2.00 -3.00 X(2) 3.00 0.00 1.00 0.00 0.00 0.25 - 0.00 0.00 2.00 0.00 -0.25 - p=1,q=4 - -2.00 X(1) 4.00 1.00 0.00 0.00 0.25 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 0.00 0.00 X(5) 4.00 0.00 0.00 -2.00 0.50 1.00 -3.00 X(2) 2.00 0.00 1.00 0.50 -0.13 0.00 - 0.00 0.00 1.50 0.13 0.00 - 所得解已经是最优解 ! 最优解为 : x1=4.00 x2=2.00 x3=0.00 x4=0.00 x5=4.00 ZB=14.00 Press any key to continue 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -