# Singular

#### D.3.1.16 gauss_row

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

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

Return:
- a matrix B, if called with one argument; B is the complete row- reduced lower-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 transpose(L[2])*A=transpose(L[1])
with L[1] the row-reduced form of A
and L[2] the transformation matrix.

Note:
* This procedure just applies gauss_col to the transposed matrix. The transformation matrix is obtained by applying lift. This should be faster than the procedure rowred.
* 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 row-reduced form of A over the rational function field.

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