ApCoCoA:LinAlg.REF

From CoCoAWiki

LinAlg.REF

Computes a row echelon form of a matrix.

Syntax

LinAlg.REF(M:MAT, CompRREF:BOOL, BACKEND:STRING):MAT
LinAlg.REF(M:MAT, P:INT, CompRREF:BOOL, BACKEND:STRING):MAT

Description

Please note: The function(s) explained on this page is/are using the ApCoCoAServer. You will have to start the ApCoCoAServer in order to use it/them.

This function allows you to compute a (reduced) row echelon form of a matrix M defined over a (finite) field. If you want to use the first version without the parameter P, the components of the input matrix M must be castable to type RAT (BACKEND = "INTERNAL") or ZMOD (BACKEND = "IML" or BACKEND = "LINBOX") and your current working ring must be a finite field in the latter case. The second version of this function lets you compute a (reduced) row echelon form of M mod P and the components of M must be of type INT.

The parameter CompRREF lets you specify if you want to compute a row echelon form or the reduced row echelon form of M. If CompRREF is set to TRUE, the reduced row echelon form will be computed, and if it is set to FALSE, a row echelon form where all pivot elements are equal to one will be computed.

The optional parameter BACKEND lets you choose between an internal implementation (BACKEND = "INTERNAL") or IML or LinBox driven computations (BACKEND = "IML" or BACKEND = "LINBOX"). The default value of BACKEND is "INTERNAL".

  • @param M A matrix whose (reduced) row echelon form to compute. If parameter P is given, the components of M must be of type INT. Otherwise, they must be castable to type RAT or ZMOD (please see description above).

  • @param CompRREF Set to TRUE if you want to compute the reduced row echelon form of M or to FALSE otherwise.

  • @return A (reduced) row echelon form of M.

The following parameters are optional.

  • @param P An integer value. If P is specified, the (reduced) row echelon form computation will be carried out over the ring Z/pZ.

  • @param BACKEND Allowed values are "IML", "INTERNAL", and "LINBOX".

Example

Use QQ[x,y];
M := Mat([[ 1/2, 1/3, 2], [200, 3000, 1], [2, 5, 17], [1, 1, 1]]);
LinAlg.REF(M, FALSE);

-------------------------------
Mat([
  [1, 2/3, 4],
  [0, 1, -2397/8600],
  [0, 0, 1],
  [0, 0, 0]
])
-------------------------------

Example

Use QQ[x,y];
M := Mat([[ 1, 1, 2], [200, 3000, 1], [2, 5, 17], [1, 1, 1]]);
LinAlg.REF(M, 17, TRUE);

-------------------------------
Mat([
  [1, 0, 0],
  [0, 1, 0],
  [0, 0, 1],
  [0, 0, 0]
])
-------------------------------

Example

Use QQ[x,y];
M := Mat([[ 1, 1, 2], [200, 3000, 1], [2, 5, 17], [1, 1, 1]]);
LinAlg.REF(M, 17, TRUE, "IML");

-------------------------------
Mat([
  [1, 0, 0],
  [0, 1, 0],
  [0, 0, 1],
  [0, 0, 0]
])
-------------------------------

Example

Use ZZ/(239)[x];
M := Mat([[1, 2, 3], [4, 5, 6], [7, 8, 9], [11, 12, 13]]);
LinAlg.REF(M, FALSE, "LINBOX");

-------------------------------
Mat([
  [1 % 239, 2 % 239, 3 % 239],
  [0 % 239, 1 % 239, 2 % 239],
  [0 % 239, 0 % 239, 0 % 239],
  [0 % 239, 0 % 239, 0 % 239]
])

ApCoCoA:Introduction to CoCoAServer

ApCoCoA:IML.REF

ApCoCoA:LinBox.REF