# Singular

#### D.3.2.11 gaussred

Procedure from library `linalg.lib` (see linalg_lib).

Usage:
gaussred(A); A any constant matrix

Return:
list Z: Z[1]=P , Z[2]=U , Z[3]=S , Z[4]=rank(A)
gives a row reduced matrix S, a permutation matrix P and a normalized lower triangular matrix U, with P*A=U*S

Note:
This procedure is designed for teaching purposes mainly. The straight forward implementation in the interpreted library is not very efficient (no standard basis computation).

Example:
 ```LIB "linalg.lib"; ring r=0,(x),dp; matrix A[5][4]=1,3,-1,4,2,5,-1,3,1,3,-1,4,0,4,-3,1,-3,1,-5,-2; print(A); ==> 1, 3,-1,4, ==> 2, 5,-1,3, ==> 1, 3,-1,4, ==> 0, 4,-3,1, ==> -3,1,-5,-2 list Z=gaussred(A); //construct P,U,S s.t. P*A=U*S print(Z[1]); //P ==> 1,0,0,0,0, ==> 0,1,0,0,0, ==> 0,0,0,0,1, ==> 0,0,0,1,0, ==> 0,0,1,0,0 print(Z[2]); //U ==> 1, 0, 0, 0,0, ==> 2, 1, 0, 0,0, ==> -3,-10,1, 0,0, ==> 0, -4, 1/2,1,0, ==> 1, 0, 0, 0,1 print(Z[3]); //S ==> 1,3, -1,4, ==> 0,-1,1, -5, ==> 0,0, 2, -40, ==> 0,0, 0, 1, ==> 0,0, 0, 0 print(Z[4]); //rank ==> 4 print(Z[1]*A); //P*A ==> 1, 3,-1,4, ==> 2, 5,-1,3, ==> -3,1,-5,-2, ==> 0, 4,-3,1, ==> 1, 3,-1,4 print(Z[2]*Z[3]); //U*S ==> 1, 3,-1,4, ==> 2, 5,-1,3, ==> -3,1,-5,-2, ==> 0, 4,-3,1, ==> 1, 3,-1,4 ```