📄 dualsimplex.c
字号:
xi_dsm(m, n, m1, mn1, a, k, x)
int m, n, m1, mn1, k[];
float a[5][7], x[];
{
int i, mn, i0, j0, j;
float c, g;
mn=m+n;
for(i=0; i<=m; i++)
k[i]=n+i;
loop120:
c=1e+10;
for(i=1; i<=m; i++)
{
if(a[i][mn1] - c <= 0)
{
c=a[i][mn1];
i0=i;
}
}
if(c >= 0)
{
for(i=1; i<=m ; i++)
x[i]=a[i][mn1];
for(i=1; i<=m ; i++)
printf("\n I=%d, X[%d] = %f \n", k[i],k[i], x[i]);
printf("\n F = %f\n", a[m1][mn1]);
return (0);
}
c=1e+10;
for(j=1;j<=mn; j++)
{
if(a[m1][j]<0)
{
g=a[m1][j]/a[i0][j];
if(g-c<0)
{
c=g;
j0=j;
}
}
}
if(c==1e+10)
{
printf("LP_NO_SOLUTION\n");
return (-1);
}
k[i0]=j0;
for(j=1; j<=mn1; j++)
{
if(j !=j0 )
{
g=a[i0][j]/a[i0][j0];
a[i0][j] = g;
for(i=1; i<=m1; i++)
{
if(i != i0)
a[i][j]=a[i][j]-a[i][j0]*g;
}
}
}
for(i=1; i<=m1; i++)
a[i][j0]=0;
a[i0][j0]=1;
goto loop120;
} /*End of Func*/
#include <stdio.h>
#include <math.h>
main()
{
float a[5][7] = { {0, 0, 0, 0, 0, 0, 0},
{0,-3,-1, 1, 0, 0,-3},
{0,-4,-3, 0, 1, 0,-6},
{0,-1,-2, 0, 0, 1,-2},
{0,-2,-1, 0, 0, 0, 0}
};
int k[4], rtn;
float x[4];
rtn = xi_dsm(3, 2, 4, 6, a, k, x);
} /*End of main*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -