通用对偶单纯形法的C语言程序.doc

上传人:b****2 文档编号:1707675 上传时间:2022-10-23 格式:DOC 页数:9 大小:54KB
下载 相关 举报
通用对偶单纯形法的C语言程序.doc_第1页
第1页 / 共9页
通用对偶单纯形法的C语言程序.doc_第2页
第2页 / 共9页
通用对偶单纯形法的C语言程序.doc_第3页
第3页 / 共9页
通用对偶单纯形法的C语言程序.doc_第4页
第4页 / 共9页
通用对偶单纯形法的C语言程序.doc_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

通用对偶单纯形法的C语言程序.doc

《通用对偶单纯形法的C语言程序.doc》由会员分享,可在线阅读,更多相关《通用对偶单纯形法的C语言程序.doc(9页珍藏版)》请在冰豆网上搜索。

通用对偶单纯形法的C语言程序.doc

#include

#include

#defineMAX_N100

#defineM1000000.0;

intm,n;

floatA[MAX_N][MAX_N],C[MAX_N],b[MAX_N],seta[MAX_N],CZ[MAX_N];

intnum[MAX_N];

intGetOutCow()//求换出基

{

inti,k;

intflag;

floatmin=0;

for(i=0;i

{

if(b[i]>=0)

flag=1;

else

{

flag=0;

break;

}

}

if(flag==1)

return-1;

for(i=0;i

{

if(b[i]<0&&min>b[i])

{

min=b[i];

k=i;

}

}

returnk;

}

intGetInCow(intp)//求换入基

{

inti,j;

intflag=0;

floatmin;

for(j=0;j

{

if(A[p][j]>=0)

flag=1;

else

{

flag=0;

break;

}

}

if(flag==1)

{

printf("\n原线性规划问题无可行解!

\n");

return-1;

}

for(j=0;j

{

if(A[p][j]<0)

seta[j]=CZ[j]/A[p][j];

else

seta[j]=M;

}

min=M;

for(j=0;j

{

if(min>=seta[j])

{

min=seta[j];

i=j;

}

}

num[p]=i+1;

returni;

}

voidchange(intp,intq)//计算新的单纯形表

{

inti,j;

floattemp1,temp2,temp3;

temp1=A[p][q];

for(i=0;i

{

if(i!

=p)

{

if(A[i][q]!

=0)

{

temp2=A[i][q]/temp1;

for(j=0;j

A[i][j]=A[i][j]-A[p][j]*temp2;

b[i]=b[i]-b[p]*temp2;

}

}

}

temp3=CZ[q]/temp1;

for(i=0;i

CZ[i]=CZ[i]-A[p][i]*temp3;

for(j=0;j

A[p][j]=A[p][j]/temp1;

b[p]=b[p]/temp1;

}

voidprint1()

{

inti;

printf("\n---------------------------------------------------------------\n");

printf("\t");

for(i=1;i<=n;i++)

printf("X(%d)\t",i);

printf("RHS\n");

printf("-----------------------------------------------------------------\n");

printf("\t");

for(i=0;i

{

printf("%.3f\t",-C[i]);

}

printf("\n---------------------------------------------------------------\n");

}

voidprint2()

{

inti,j;

printf("\n---------------------------------------------------------------\n");

for(i=0;i

{

printf("X(%d)\t",num[i]);

for(j=0;j

printf("%.3f\t",A[i][j]);

printf("%.3f\n",b[i]);

}

printf("\n---------------------------------------------------------------\n");

printf("cj-zj\t");

for(i=0;i

printf("%.3f\t",CZ[i]);

printf("\n---------------------------------------------------------------\n");

}

voidInput()

{

inti,j;

printf("请输入约束条件的个数:

\n");

scanf("%d",&m);

printf("请输入变量的个数:

\n");

scanf("%d",&n);

printf("请输入方程组的系数矩阵A(%d行%d列):

\n",m,n);

for(i=0;i

{

for(j=0;j

{

scanf("%f",&A[i][j]);

}

}

printf("\n请输入初始基变量的数字代码num矩阵:

\n");

for(i=0;i

scanf("%d",&num[i]);

printf("\n请输入方程组右边的值矩阵b:

\n");

for(i=0;i

scanf("%f",&b[i]);

printf("\n请输入目标函数各个变量的系数阵C:

\n");

for(i=0;i

scanf("%f",&C[i]);

}

voidmain()

{

inti,j;

intp,q;

floatz=0;

Input();

for(i=0;i

{

if(A[i][num[i]-1]<=0)

{

b[i]=-b[i];

for(j=0;j

A[i][j]=-A[i][j];

}

}

for(i=0;i

{

CZ[i]=-C[i];

}

print1();

print2();

while

(1)

{

p=GetOutCow();

if(p==-1)

{

printf("\n所得解已经是最优解!

\n");

for(i=0;i

z+=b[i]*C[num[i]-1];

for(i=0;i

printf("X(%d)=%.3f\t",num[i],b[i]);

printf("z=%.3f\n",z);

break;

}

q=GetInCow(p);

if(q==-1)

break;

change(p,q);

print2();

}

}

if(flag==1)

return-1;

for(i=0;i

{

if(b[i]<0&&min>b[i])

{

min=b[i];

k=i;

}

}

returnk;

}

intGetInCow(intp)//求换入基

{

inti,j;

intflag=0;

floatmin;

for(j=0;j

{

if(A[p][j]>=0)

flag=1;

else

{

flag=0;

break;

}

}

if(flag==1)

{

printf("\n原线性规划问题无可行解!

\n");

return-1;

}

for(j=0;j

{

if(A[p][j]<0)

seta[j]=CZ[j]/A[p][j];

else

seta[j]=M;

}

min=M;

for(j=0;j

{

if(min>=seta[j])

{

min=seta[j];

i=j;

}

}

num[p]=i+1;

returni;

}

voidchange(intp,intq)//计算新的单纯形表

{

inti,j;

floattemp1,temp2,temp3;

temp1=A[p][q];

for(i=0;i

{

if(i!

=p)

{

if(A[i][q]!

=0)

{

temp2=A[i][q]/temp1;

for(j=0;j

A[i][j]=A[i][j]-A[p][j]*temp2;

b[i]=b[i]-b[p]*temp2;

}

}

}

temp3=CZ[q]/temp1;

for(i=0;i

CZ[i]=CZ[i]-A[p][i]*temp3;

for(j=0;j

A[p][j]=A[p][j]/temp1;

b[p]=b[p]/temp1;

}

voidprint1()

{

inti;

printf("\n---------------------------------------------------------------\n");

printf("\t");

for(i=1;i<=n;i++)

printf("X(%d)\t",i);

printf("RHS\n");

printf("-----------------------------------------------------------------\n");

printf("\t");

for(i=0;i

{

printf("%.3f\t",-C[i]);

}

printf("\n---------------------------------------------------------------\n");

}

voidprint2()

{

inti,j;

printf("\n---------------------------------------------------------------\n");

for(i=0;i

{

printf("X(%d)\t",num[i]);

for(j=0;j

printf("%.3f\t",A[i][j]);

printf("%.3f\n",b[i]);

}

printf("\n---------------------------------------------------------------\n");

printf("cj-z

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1