高分急问:线性规划问题怎么解?有没有现成代码? 现有一个线性规划问题,要用单纯形法解,哪位GGJJ有现成解法?或者给予点拨一二,小女子这厢多谢了![email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你到sourceForge.net上搜索mfc,是个JAVA的数学库 MFC不是VC的类库吗?怎么 #include<stdio.h>#include<math.h>#define m 3 /*定义约束条件方程组的个数*/#define n 5 /*定义未知量的个数*/float M=1000000.0;float A[m][n]; /*用于记录方程组的数目和系数;*/float C[n]; /*用于存储目标函数中各个变量的系数*/float b[m]; /*用于存储常约束条件中的常数*/float CB[m]; /*用于存储基变量的系数*/float seta[m]; /*存放出基与入基的变化情况*/float delta[n]; /*存储检验数矩阵*/float x[n];int num[m]; /*用于存放出基与进基变量的情况*/float ZB=0; /*记录目标函数值*/void input();void print();int huanruorder(); /*确定换入变量*/int huanchuorder(int a); /*确定换出变量*/void quzhuorder(int a,int b); /*实现取主变换*/void main(){ int i,j=0; int p,q,temp; input(); printf("\n-------------------------------------------------------------------------------\n"); printf(" \tCB\tXB\tb\t"); for(i=0;i<n;i++) printf(" X(%d)\t",i+1); for(i=0;i<n;i++) x[i]=0; printf("\n"); while(1) { q=huanruorder(); if(q==-1) { print(); printf("\n所得解已经是最优解!\n"); printf("\n最优解为:\n"); for(j=0;j<m;j++) { temp=num[j]-1; x[temp]=b[j]; } for(i=0;i<n;i++) { printf("x%d=%.2f ",i+1,x[i]); ZB=ZB+x[i]*C[i]; } printf("ZB=%.2f",ZB); break; } print(); p=huanchuorder(q); printf("\np=%d,q=%d",p+1,q+1); quzhuorder(p,q); } getchar();}int huanruorder(){ int i,k=0; int flag=0; float min=0; for(i=0;i<n;i++) /*判定向量delta[]中是否有负值*/ if(delta[i]>=0) flag=1; else { flag=0; break; } if(flag==1) /*如果都为+数,返回 -1*/ return -1; for(i=0;i<n;i++) /*找出delta[]中的最小值,并记录下标*/ { if(min>delta[i]) { min=delta[i]; k=i; } } return k; /*返回delta[]中的最小值的下标*/}int huanchuorder(int a){ int i,k,j; int flag=0; float min; k=a; for(i=0;i<m;i++) if(A[i][k]<=0) flag=1; else { flag=0; break; } if(flag==1) { printf("\n该线性规划无最优解!\n"); return -1; } for(i=0;i<m;i++) { if(A[i][k]>0) seta[i]=b[i]/A[i][k]; else seta[i]=M; } min=M; for(i=0;i<m;i++) { if(min>=seta[i]) { min=seta[i]; j=i; } } num[j]=k+1; CB[j]=C[k]; return j;}void quzhuorder(int p,int q){ int i,j,c,l; float temp1,temp2,temp3=0; c=p;/*行号*/ l=q;/*列号*/ 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&&A[i][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; } } for(j=0;j<n;j++) { for(i=0;i<m;i++) { temp3+=C[num[i]-1]*A[i][j]; } delta[j]=C[j]-temp3; temp3=0; }}void print(){ int i,j=0; printf("\n-------------------------------------------------------------------------------\n"); for(i=0;i<m;i++) { printf("%8.2f\tX(%d) %8.2f ",CB[i],num[i],b[i]); for(j=0;j<n;j++) printf("%8.2f ",A[i][j]); printf("\n"); } printf("\n-------------------------------------------------------------------------------\n"); printf("\t\t\t\t"); for(i=0;i<n;i++) printf(" %8.2f",delta[i]); printf("\n-------------------------------------------------------------------------------\n");}void input(){ int i,j; /*循环变量*/ int k; 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]); for(i=0;i<n;i++) delta[i]=0; for(j=0;j<n;j++) { for(i=0;i<m;i++) { delta[j]+=C[num[i]-1]*A[i][j]; } delta[j]=C[j]-delta[j]; } for(i=0;i<m;i++) { k=num[i]-1; CB[i]=C[k]; }} 求解释,java与数据库相连的问题。。。 字符串处理 java可以访问其他机器的硬盘吗? 针对一个同名方法,当implements interface遭遇上override method,谁是勇者??? 菜鸟级问题(java文件的编译) 两个frame之间的传值?高分求助!!!解决了立即揭帖 如何制作自己的按钮,例如圆形按钮? Java 怎么更改控件的????谢谢!! java 2 中的加解密技术 杭电的1013出错,找不到原因 请问如何设置JDialog的显示大小? 用jdic调用本地浏览器,但老是报错,那位高人帮忙解决一下,谢谢!!
#include<math.h>
#define m 3 /*定义约束条件方程组的个数*/
#define n 5 /*定义未知量的个数*/
float M=1000000.0;
float A[m][n]; /*用于记录方程组的数目和系数;*/
float C[n]; /*用于存储目标函数中各个变量的系数*/
float b[m]; /*用于存储常约束条件中的常数*/
float CB[m]; /*用于存储基变量的系数*/
float seta[m]; /*存放出基与入基的变化情况*/
float delta[n]; /*存储检验数矩阵*/
float x[n];
int num[m]; /*用于存放出基与进基变量的情况*/
float ZB=0; /*记录目标函数值*/
void input();
void print();
int huanruorder(); /*确定换入变量*/
int huanchuorder(int a); /*确定换出变量*/
void quzhuorder(int a,int b); /*实现取主变换*/
void main()
{
int i,j=0;
int p,q,temp;
input();
printf("\n-------------------------------------------------------------------------------\n");
printf(" \tCB\tXB\tb\t");
for(i=0;i<n;i++)
printf(" X(%d)\t",i+1);
for(i=0;i<n;i++)
x[i]=0;
printf("\n");
while(1)
{
q=huanruorder();
if(q==-1)
{
print();
printf("\n所得解已经是最优解!\n");
printf("\n最优解为:\n");
for(j=0;j<m;j++)
{
temp=num[j]-1;
x[temp]=b[j];
}
for(i=0;i<n;i++)
{
printf("x%d=%.2f ",i+1,x[i]);
ZB=ZB+x[i]*C[i];
}
printf("ZB=%.2f",ZB);
break;
}
print();
p=huanchuorder(q);
printf("\np=%d,q=%d",p+1,q+1);
quzhuorder(p,q);
}
getchar();
}
int huanruorder()
{
int i,k=0;
int flag=0;
float min=0;
for(i=0;i<n;i++) /*判定向量delta[]中是否有负值*/
if(delta[i]>=0)
flag=1;
else
{
flag=0;
break;
}
if(flag==1) /*如果都为+数,返回 -1*/
return -1;
for(i=0;i<n;i++) /*找出delta[]中的最小值,并记录下标*/
{
if(min>delta[i])
{
min=delta[i];
k=i;
}
}
return k; /*返回delta[]中的最小值的下标*/
}
int huanchuorder(int a)
{
int i,k,j;
int flag=0;
float min;
k=a;
for(i=0;i<m;i++)
if(A[i][k]<=0)
flag=1;
else
{
flag=0;
break;
}
if(flag==1)
{
printf("\n该线性规划无最优解!\n");
return -1;
}
for(i=0;i<m;i++)
{
if(A[i][k]>0)
seta[i]=b[i]/A[i][k];
else seta[i]=M;
}
min=M;
for(i=0;i<m;i++)
{
if(min>=seta[i])
{
min=seta[i];
j=i;
}
}
num[j]=k+1;
CB[j]=C[k];
return j;
}
void quzhuorder(int p,int q)
{
int i,j,c,l;
float temp1,temp2,temp3=0;
c=p;/*行号*/
l=q;/*列号*/
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&&A[i][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;
}
}
for(j=0;j<n;j++)
{
for(i=0;i<m;i++)
{
temp3+=C[num[i]-1]*A[i][j];
}
delta[j]=C[j]-temp3;
temp3=0;
}
}
void print()
{
int i,j=0;
printf("\n-------------------------------------------------------------------------------\n");
for(i=0;i<m;i++)
{
printf("%8.2f\tX(%d) %8.2f ",CB[i],num[i],b[i]);
for(j=0;j<n;j++)
printf("%8.2f ",A[i][j]);
printf("\n");
}
printf("\n-------------------------------------------------------------------------------\n");
printf("\t\t\t\t");
for(i=0;i<n;i++)
printf(" %8.2f",delta[i]);
printf("\n-------------------------------------------------------------------------------\n");
}
void input()
{
int i,j; /*循环变量*/
int k;
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]);
for(i=0;i<n;i++)
delta[i]=0;
for(j=0;j<n;j++)
{
for(i=0;i<m;i++)
{
delta[j]+=C[num[i]-1]*A[i][j];
}
delta[j]=C[j]-delta[j];
} for(i=0;i<m;i++)
{
k=num[i]-1;
CB[i]=C[k];
}
}