# Singular

### 5.1.138 simplex

`Syntax:`
`simplex (` matrix_expression`,` int_expression`,` int_expression`,` int_expression`,` int_expression`,` int_expression`)`
`Type:`
list
`Purpose:`
perform the simplex algorithm for the tableau given by the input, e.g. `simplex (`M, m, n, m1, m2, m3 `)`:

M matrix of numbers :
first row describing the objective function (maximize problem), the remaining rows describing constraints;
m, n, m1, m2, m3 int :
n = number of variables; m = total number of constraints; m1 = number of inequalities "<=" (rows 2 ... m1+1 of M); m2 = number of inequalities ">=" (rows m1+2 ... m1+m2+1 of M); m3 = number of equalities.

* ground field is of type `(real,N)`, N>=4;
* the matrix M is of size m x n;
* m=m1+m2+m3;
* the entries M[2,1] ,..., M[m+1,1] are non-negative;
* the variables x(i) are non-negative;
* a row b, a(1) ,..., a(n) corresponds to b+a(1)x(1)+...+a(n)x(n);
* for a <=, >=, or == constraint: add "in mind" >=0, <=0, or ==0.

The output is a list L with

* L = matrix
* L = int:
0 = finite solution found; 1 = unbounded; -1 = no solution; -2 = error occured;
* L = intvec :
L[k] = number of variable which corresponds to row k+1 of L;
* L = intvec :
L[j] = number of variable which is represented by column j+1 of L ("non-basis variable");
* L = int :
number of constraints (= m);
* L = int :
number of variables (= n).

The solution can be read off the first column of L as it is done by the procedure simplexOut in `solve.lib`.

`Example:`
 ``` ring r = (real,10),(x),lp; // consider the max. problem: // // maximize x(1) + x(2) + 3*x(3) - 0.5*x(4) // // with constraints: x(1) + 2*x(3) <= 740 // 2*x(2) - 7*x(4) <= 0 // x(2) - x(3) + 2*x(4) >= 0.5 // x(1) + x(2) + x(3) + x(4) = 9 // matrix sm=( 0, 1, 1, 3,-0.5, 740,-1, 0,-2, 0, 0, 0,-2, 0, 7, 0.5, 0,-1, 1,-2, 9,-1,-1,-1,-1); int n = 4; // number of constraints int m = 4; // number of variables int m1= 2; // number of <= constraints int m2= 1; // number of >= constraints int m3= 1; // number of == constraints simplex(sm, n, m, m1, m2, m3); ==> : ==> _[1,1]=17.025 ==> _[1,2]=-0.95 ==> _[1,3]=-0.05 ==> _[1,4]=1.95 ==> _[1,5]=-1.05 ==> _[2,1]=730.55 ==> _[2,2]=0.1 ==> _[2,3]=-0.1 ==> _[2,4]=-1.1 ==> _[2,5]=0.9 ==> _[3,1]=3.325 ==> _[3,2]=-0.35 ==> _[3,3]=-0.15 ==> _[3,4]=0.35 ==> _[3,5]=0.35 ==> _[4,1]=0.95 ==> _[4,2]=-0.1 ==> _[4,3]=0.1 ==> _[4,4]=0.1 ==> _[4,5]=0.1 ==> _[5,1]=4.725 ==> _[5,2]=-0.55 ==> _[5,3]=0.05 ==> _[5,4]=0.55 ==> _[5,5]=-0.45 ==> : ==> 0 ==> : ==> 5,2,4,3 ==> : ==> 1,6,8,7 ==> : ==> 4 ==> : ==> 4 ```
See simplexOut.

### Misc 