Singular

D.3.1.15 gauss_col

Procedure from library `matrix.lib` (see matrix_lib).

Usage:
gauss_col(A[,e]); A a matrix, e any type

Return:
- a matrix B, if called with one argument; B is the complete column- reduced upper-triangular normal form of A if A is constant, (resp. as far as this is possible if A is a polynomial matrix; no division by polynomials).
- a list L of two matrices, if called with two arguments; L satisfies L[1] = A * L[2] with L[1] the column-reduced form of A and L[2] the transformation matrix.

Note:
* The procedure just applies interred to A with ordering (C,dp). The transformation matrix is obtained by applying 'lift'. This should be faster than the procedure colred.
* It should only be used with exact coefficient field (there is no pivoting and rounding error treatment).
* Parameters are allowed. Hence, if the entries of A are parameters, B is the column-reduced form of A over the rational function field.

Example:
 ```LIB "matrix.lib"; ring r=(0,a,b),(A,B,C),dp; matrix m[8][6]= 0, 2*C, 0, 0, 0, 0, 0, -4*C,a*A, 0, 0, 0, b*B, -A, 0, 0, 0, 0, -A, B, 0, 0, 0, 0, -4*C, 0, B, 2, 0, 0, 2*A, B, 0, 0, 0, 0, 0, 3*B, 0, 0, 2b, 0, 0, AB, 0, 2*A,A, 2a;""; ==> list L=gauss_col(m,1); print(L[1]); ==> 0,0,2*C, 0, 0,0, ==> A,0,-4*C,0, 0,0, ==> 0,0,-A, (b)/2*B,0,0, ==> 0,0,B, -1/2*A, 0,0, ==> 0,1,0, 0, 0,0, ==> 0,0,B, A, 0,0, ==> 0,0,0, 0, 1,0, ==> 0,0,0, 0, 0,1 print(L[2]); ==> 0, 0, 0, 1/2, 0, 0, ==> 0, 0, 1, 0, 0, 0, ==> 1/(a), 0, 0, 0, 0, 0, ==> -1/(2a)*B, 1/2, 0, C, 0, 0, ==> 0, 0, -3/(2b)*B, 0, 1/(2b), 0, ==> 1/(2a2)*AB,-1/(2a)*A,(-2b+3)/(4ab)*AB,-1/(a)*AC,-1/(4ab)*A,1/(2a) ring S=0,x,(c,dp); matrix A[5][4] = 3, 1, 1, 1, 13, 8, 6,-7, 14,10, 6,-7, 7, 4, 3,-3, 2, 1, 0, 3; print(gauss_col(A)); ==> 8/9,-5/9,-1/3,7/9, ==> 1, 0, 0, 0, ==> 0, 1, 0, 0, ==> 0, 0, 1, 0, ==> 0, 0, 0, 1 ```