单纯型法的c语言实现!
<P><FONT color=#ffffff><FONT color=#000000> /*本程序是单纯形法,参考书目:河海大学<吴凤平>运筹学方法与应用*/<BR>#include<stdio.h><BR>#include<math.h><BR>#define X 5<BR>#define Y 7<BR>void xi_max(int *m2,int *mn1,float *c,int *is,int *ir,int *j0,float (*a))<BR>{<BR>int j;<BR>*c=0;<BR>for(j=1;j<=*is;j++) <BR> {<BR> if((*a)[*ir]-*c>0)<BR> {<BR> *c=(*a)[*ir];<BR> *j0=j;<BR> }<BR> }<BR>}<BR><BR> /***************** 参数说明 **********************/<BR> /* m_约束方程个数(基变量个数),n_非基变量个数 */<BR> /* m2-m+2整个变量,(*a)存放初始数据 */<BR> /* (*k)[]存放基变量脚标,(*x)存放基变量最优值 */<BR> /********* </FONT><a href="http://happyyangxu.home.sunbo.net*******/" target="_blank" >http://happyyangxu.home.sunbo.net*******/</A><FONT color=#000000> <BR>int xi_sm(int m,int n,int m2,int mn1,int l1,float (*a),<BR> int(*k)[],float(*x)[])<BR>{<BR>int i,m1,mn,j0,i0,j;<BR>float c,g;<BR>m1=m+1;<BR>mn=m+n;<BR>for(i=1;i<=m;i++)<BR> (*k)=n+i;<BR>leap1:<BR>if(l1-1==0)<BR> xi_max(&m2,&mn1,&c,&mn,&m1,&j0,a);<BR>else<BR> {<BR>leap2: if(l1-50==0)<BR> xi_max(&m2,&mn,&c,&n,&m2,&j0,a);<BR> else<BR> xi_max(&m2,&mn1,&c,&mn,&m2,&j0,a);<BR> }<BR> c-=1e-8;<BR> if((c<=0)&&(l1==1)&&((*a)-1e-8>0))<BR> {<BR> printf("\n\t*********Not min&&No solution**********\n");<BR> return(-1);<BR> }<BR> if((c<0)&&(l1==1))<BR> {<BR> l1=50;<BR> goto leap2;<BR> }<BR> if(c<=0)<BR> {<BR> for(i=1;i<=m;i++)<BR> (*x)=(*a);<BR> printf("\n\t********Optimal solution********\n");<BR> for(i=1;i<=m;i++)<BR> printf("\ni=%d,x=%f\n",(*k),(*x));<BR> printf("\nF=%f\n",(*a));<BR> return 0;<BR> }<BR> c=1e8;<BR> for(i=1;i<=m;i++)<BR> {<BR> if((*a)>1e-8)<BR> {<BR> g=(*a)/(*a);<BR> if(g-c<0);<BR> {<BR> c=g;<BR> i0=i;<BR> }<BR> }<BR> }<BR> if(c==1e+8)<BR> {<BR> printf("\n\t*******Lp no solution********\n");<BR> return -3;<BR> }<BR> (*k)=j0;<BR> for(j=1;j<=mn1;j++)<BR> {<BR> if((j==j0)||(l1==50)&&(n<j)&&(j<mn1))<BR> continue;<BR> g=(*a)/(*a);<BR> (*a)=g;<BR> for(i=1;i<=m2;i++)<BR> {<BR> if((i==i0)||(!(l1==1)&(i==m1)))<BR> continue;<BR> (*a)=(*a)-(*a)*g;<BR> }<BR> }<BR> for(i=1;i<=m2;i++)<BR> (*a)=0;<BR> (*a)=1;<BR> goto leap1;<BR>}<BR>main()<BR>{<BR>float a={{0,0,0, 0,0,0,0},<BR> {0,3,-4,3,1,0,12},<BR> {0,3,0, 6,0,1,12},<BR> {0,0,0, 0,0,0,0},<BR> {0,69,0,144,0,0,300}};<BR>int k;<BR>float x;<BR>clrscr();<BR>xi_sm(2,3,4,6,0,&a,&k,&x);<BR>}</FONT><BR></FONT></P> 版主可以讲讲没部迭代的原理吗。回复:(aya331)版主可以讲讲没部迭代的原理吗。[em0...
<DIV class=quote><B>以下是引用<I>aya331</I>在2005-10-10 22:11:22的发言:</B><BR>版主可以讲讲没部迭代的原理吗。</DIV><P>没部迭代是什么意思?没太看懂,请原谅</P> 这个程序应该是把单纯型表中两阶法计算过程用c实现的程序。我的意思是可否解释下程序每部运算的过程,谢谢了。 谢谢分享好资源 编译出错了 xiexie
页:
[1]