线性规划的对偶单纯形法用c语言实现 对偶单纯形法例题详解

minZ=x1+x2+x3

s.t3x1+x2+x3>=1

-x1+4x2+x3>=2

x1,x2,x3>=0

先将其化为标准型

minZ=x1+x2+x3

s.t3x1+x2+x3-x4=1

-x1+4x2+x3-x5=2

x1,x2,x3>=0

请输入方程组的系数矩阵A(2行5列):
3 1 1 -1 0
-1 4 1 0 -1

请输入初始基变量的数字代码num矩阵:
4 5

请输入方程组右边的值矩阵b:
1 2

请输入目标函数各个变量的系数所构成的系数阵C:
1 1 1 0 0

--------------------------------------------------------------------------
X(1)X(2)X(3)X(4)X(5)RHS

--------------------------------------------------------------------------
-1.000 -1.000-1.000 0.0000.000 0.000
--------------------------------------------------------------------------
x(4)-3.000 -1.000-1.000 1.0000.000 -1.000
x(5)1.000 -4.000-1.000 0.0001.000 -2.000

--------------------------------------------------------------------------

--------------------------------------------------------------------------
-1.250 0.000-0.750 0.000-0.250 0.500
--------------------------------------------------------------------------
x(4)-3.250 0.000-0.750 1.000-0.250 -0.500
x(2)-0.250 1.0000.2500.000 -0.2500.500

--------------------------------------------------------------------------

所得解已经是最优解!

--------------------------------------------------------------------------
0.0000.000 -0.462-0.385 -0.154 0.692
--------------------------------------------------------------------------
x(1)1.0000.0000.231 -0.3080.077 0.154
x(2)0.0001.0000.308 -0.077-0.231 0.538

--------------------------------------------------------------------------
x(1)=0.154x(2)=0.538z=0.692Press any key to continue

#include<stdio.h>
#include<math.h>
#define m 2
#define n 5
float M=1000000.0;
float A[m][n];
floatC[n];
floatb[m];
float seta[n];
intnum[n];
float z=0;
void input();
void print();
int duioudanchunxing1();
int duioudanchunxing2(int a);
void duioudanchunxing3(int a,int b);

void input()
{
int i,j;

printf("请输入方程组的系数矩阵A(%d行%d列):n",m,n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%f",&A[i][j]);

printf("n请输入初始基变量的数字代码num矩阵:n");
for(i=0;i<m;i++)
scanf("%d",&num[i]);

printf("n请输入方程组右边的值矩阵b:n");
for(i=0;i<m;i++)
scanf("%f",&b[i]);
printf("n请输入目标函数各个变量的系数所构成的系数阵C:n");
for(i=0;i<n;i++)
scanf("%f",&C[i]);

}

intduioudanchunxing1()
{
int i,k;
int flag;
float min=0;
for(i=0;i<m;i++)
if(b[i]>=0)
flag=1;
else {flag=0;break;}
if(flag==1)
return -1;
线性规划的对偶单纯形法用c语言实现 对偶单纯形法例题详解
for(i=0;i<m;i++)
{
if(min>b[i])
{min=b[i];k=i;}
}
return k;
}

intduioudanchunxing2(int a)
{
int i,j;
int flag=0;
float min;
for(j=0;j<n;j++)
if(A[a][j]>=0)
flag=1;
else {flag=0;break;}
if(flag==1)
{printf("n该线性规划无最优解!n"); return -1;}
for(j=0;j<n;j++)
{
if(A[a][j]<0)
seta[j]=-C[j]/A[a][j];
else seta[j]=M;
}
min=M;
for(j=0;j<n;j++)
{
if(min>=seta[j])
{min=seta[j];i=j;}
}
num[a]=i+1;
return i;
}

voidduioudanchunxing3(int p,int q)
{
int i,j,c,l;
float temp1,temp2,temp3;
c=q;
l=p;
temp1=A[c][l];
b[c]=b[c]/temp1;
for(j=0;j<n;j++)
A[c][j]=A[c][j]/temp1;
for(i=0;i<m;i++)
{
if(i!=c)
if(A[c][l]!=0)
{
temp2=A[i][l];
b[i]=b[i]-b[c]*temp2;

for(j=0;j<n;j++)
A[i][j]=A[i][j]-A[c][j]*temp2;
}
}
temp3=C[l];
for(i=0;i<n;i++)
C[i]=C[i]-A[l][i]*temp3;
z=z+b[c]*temp3;

}

void print()
{
int i,j;
printf("n--------------------------------------------------------------------------n");
printf("t");
for(i=0;i<n;i++)
{
printf("%.3ft",-C[i]);


}
printf("%.3f",z);
printf("n--------------------------------------------------------------------------n");

for(i=0;i<m;i++)
{
printf("x(%d)t",num[i]);
for(j=0;j<n;j++)
printf("%.3ft",A[i][j]);
printf("%.3fn",b[i]);
}

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

}

main()
{
int i,j=0;
int p,q;
input();
for(i=0;i<m;i++)
{
if(A[i][num[i]-1]<=0)
{
b[i]=-b[i];
for(j=0;j<n;j++)
A[i][j]=-A[i][j];
}
}
printf("n--------------------------------------------------------------------------n");
printf("t");
for(i=0;i<n;i++)
printf("X(%d)t",i+1);printf("RHSn");

while(1)
{
q=duioudanchunxing1();
if(q==-1)
{
printf("n所得解已经是最优解!n");
print();
printf("x(%d)=%.3ft",num[i],b[i]);
printf("z=%.3f",z);
break;
}
print();
p=duioudanchunxing2(q);
if(q==-1) break;
duioudanchunxing3(p,q);
}
}

  

爱华网本文地址 » http://www.aihuau.com/a/25101016/323061.html

更多阅读

夏季最新鱼尾辫编法步骤详解 鱼尾辫公主头

鱼尾辫、鱼尾辫这款从去年夏天就一直在重复的发型关键字,你有尝试过吗?因为麻花辫元素的发型大热,美国甚至应运而生了专门的“麻花辫沙龙”,专门的技师可以帮你打造各种漂亮的麻花辫发型。今天我们就请模特走进麻花辫沙龙,让造型师给我们

pid算法的c语言实现和升级 fuzzypid的c语言算法

struct _pid{ floatSetSpeed;//定义设定值 floatActualSpeed;//定义实际值 floaterr;//定义偏差值 floaterr_last;//定义上一个偏差值 floatKp,Ki,Kd;//定义比例、积分、微分系数 floatvoltage;//定义电压值(控制执行器的变量) floati

C语言在K叉哈夫曼编码教学中的应用 c语言哈夫曼编码译码

摘 要:字符编码与信息压缩是计算机应用的重要研究课题,许多学者对此作了很多非常有价值的研究。文章简单分析了二叉哈夫曼树的构造及编码,通过比较三种构造三叉哈夫曼树的算法,提出了构造任意K叉哈夫曼树及K进制的最优前缀编码的算法,并

C语言中scanf函数输入回车符的问题 c语言scanf连续输入

在用c语言编写输入语句的时候常用到scanf函数,初学者在刚用scanf函数输入时,经常会遇到各种各样的输入错误,最重要的是一定要记住scanf函数的输入格式,scanf函数里包含了哪些东西,输入的时候就必须有哪些东西,比如:scanf("%c%c%c"),那么输入

PIC单片机C语言编程教程(1) pic单片机c语言教程

PIC 单片机 C 语言编程简介用 C语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C 语言编程在单片机系统设计中已得到越来越广泛的运用。针

声明:《线性规划的对偶单纯形法用c语言实现 对偶单纯形法例题详解》为网友换我追你分享!如侵犯到您的合法权益请联系我们删除