13 int i,ip,ir,is,k,kh,kp,m12,nl1,nl2;
21 for (k=1;k<=n;k++) l1[k]=izrov[k]=k;
24 if (a[i+1][1] < 0.0)
nrerror(
"Bad input tableau in SIMPLX");
30 for (k=1;k<=(n+1);k++) {
32 for (i=1;i<=m;i++) q1 += a[i+1][k];
36 simp1(a,m+1,l1,nl1,0,&kp,&bmax);
37 if (bmax <=
EPS1 && a[m+2][1] < -
EPS1) {
40 }
else if (bmax <=
EPS1 && a[m+2][1] <=
EPS1) {
41 for (ip=1;ip<=m;ip++) {
42 if (iposv[ip] == (ip+n)) {
43 simp1(a,ip,l1,nl1,1,&kp,&bmax);
44 if (bmax > 0.0)
goto one;
50 simp2(a,n,l2,nl2,&ip,kp,&q1);
55 one:
simp3(a,m+1,n,ip,kp);
56 if (iposv[ip] >= (n+1)) {
58 if (l1[k] == kp)
break;
60 for (is=k;is<=nl1;is++) l1[is]=l1[is+1];
62 for (i=1;i<=m+2;i++) a[i][kp+1] = -a[i][kp+1];
70 simp1(a,0,l1,nl1,0,&kp,&bmax);
75 simp2(a,n,l2,nl2,&ip,kp,&q1);
int * ivector(int nl, int nh)
void nrerror(char *error_text)
void simp2(double **a, int n, int *l2, int nl2, int *ip, int kp, double *q1)
void simp1(double **a, int mm, int *ll, int nll, int iabf, int *kp, double *bmax)
void simp3(double **a, int i1, int k1, int ip, int kp)