# Difference between revisions of "ApCoCoA-1:Slinalg.SGEF"

Line 3: | Line 3: | ||

<short_description>Computes the row echelon form of a sparse matrix over F2 using Structured Gaussian Elimination.</short_description> | <short_description>Computes the row echelon form of a sparse matrix over F2 using Structured Gaussian Elimination.</short_description> | ||

<syntax> | <syntax> | ||

− | Slinalg.SGEF(NRow:INT ,NCol:INT, | + | Slinalg.SGEF(NRow:INT, NCol:INT, M:LIST, CSteps:STRING):LIST |

</syntax> | </syntax> | ||

<description> | <description> | ||

Line 19: | Line 19: | ||

<item>@param <em>NRow</em>: Number of rows of the matrix.</item> | <item>@param <em>NRow</em>: Number of rows of the matrix.</item> | ||

<item>@param <em>NCol</em>: Number of Columns of the matrix.</item> | <item>@param <em>NCol</em>: Number of Columns of the matrix.</item> | ||

− | <item>@param <em> | + | <item>@param <em>M</em>: List of lists containing positions of non zero elements.</item> |

− | <item>@param <em>CSteps</em>: The parameter CSetps lets you specify which steps of the | + | <item>@param <em>CSteps</em>: The parameter CSetps lets you specify which steps of the Structured Gaussian Elimination you want to use.</item> |

<item>@return A list of lists containing the row echelon form of the matrix.</item> | <item>@return A list of lists containing the row echelon form of the matrix.</item> | ||

</itemize> | </itemize> | ||

Line 38: | Line 38: | ||

NCol := 13; | NCol := 13; | ||

CSteps:=<quotes>GE_v2</quotes>; | CSteps:=<quotes>GE_v2</quotes>; | ||

− | + | M := [[1, 2, 6, 7], | |

[1, 2, 4, 5, 6], | [1, 2, 4, 5, 6], | ||

[2, 3], | [2, 3], | ||

Line 49: | Line 49: | ||

[10, 13]]; | [10, 13]]; | ||

− | + | Slinalg.SGEF(NRow, NCol, M, CSteps); | |

[[1, 2, 6, 7], | [[1, 2, 6, 7], | ||

[2, 3], | [2, 3], | ||

Line 67: | Line 67: | ||

NCol := 13; | NCol := 13; | ||

CSteps:=<quotes>SGE1</quotes>; | CSteps:=<quotes>SGE1</quotes>; | ||

− | + | M := [[1, 2, 6, 7], | |

[ 2, 4, 5, 6], | [ 2, 4, 5, 6], | ||

[2, 3], | [2, 3], | ||

Line 78: | Line 78: | ||

[10, 13]]; | [10, 13]]; | ||

− | + | Slinalg.SGEF(NRow, NCol, M, CSteps); | |

[[2, 3], | [[2, 3], | ||

[3, 13], | [3, 13], | ||

Line 91: | Line 91: | ||

NCol := 13; | NCol := 13; | ||

CSteps:=<quotes>SGE2</quotes>; | CSteps:=<quotes>SGE2</quotes>; | ||

− | + | M := [[1, 2, 6, 7], | |

[ 2, 4, 5, 6], | [ 2, 4, 5, 6], | ||

[2, 3], | [2, 3], | ||

Line 102: | Line 102: | ||

[10, 13]]; | [10, 13]]; | ||

− | + | Slinalg.SGEF(NRow, NCol, M, CSteps); | |

[ ] | [ ] | ||

## Revision as of 16:49, 12 May 2010

## Slinalg.SGEF

Computes the row echelon form of a sparse matrix over F2 using Structured Gaussian Elimination.

### Syntax

Slinalg.SGEF(NRow:INT, NCol:INT, M:LIST, CSteps:STRING):LIST

### 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.

*Structured Gaussian Elimination:* Structured Gaussian Elimination has the following four steps:

*Step 1:*Delete all columns that have a single non-zero coefficient and the rows in which those columns have non-zero coefficients.*Step 2:*Declare some additional light columns to be heavy, chossing the heaviest ones.*Step 3:*Delete some of the rows, selecting those which have the largest number of non-zero elements in the light columns.*Step 4:*For any row which has only a single non-zero coefficient equal to 1 in the light column, subtract appropriate multiples of that row from all other rows that have non-zero coefficients on that column so as to make those coefficients 0.

After performing the four steps above we apply usual Gaussian Elimination, specially on heavy part of the matrix.

@param

*NRow*: Number of rows of the matrix.@param

*NCol*: Number of Columns of the matrix.@param

*M*: List of lists containing positions of non zero elements.@param

*CSteps*: The parameter CSetps lets you specify which steps of the Structured Gaussian Elimination you want to use.@return A list of lists containing the row echelon form of the matrix.

We have to distinguish the following cases:

CSteps is set to "GE": Then this function is the same as Slinalg.SEF.

CSteps is set to "GE_v2": Then this function is the same as Slinalg.SEF.

CSteps is set to "SGE0": Then it performs the following:

`{loop Step 2, Step 4 End}`and at the end it performs usual Gaussian Elimination.CSteps is set to "SGE1": Then it performs the following:

`{Step 1, {loop Step 2, Step 4 End}}`and at the end it performs usual Gaussian Elimination.CSteps is set to "SGE2": Then it performs the following:

`{Step 1, {loop Step 2, Step 4 End}, Step 1, Step 3}`and at the end it performs usual Gaussian Elimination.

#### Example

Use ZZ/(2)[x]; NRow := 10; NCol := 13; CSteps:=<quotes>GE_v2</quotes>; M := [[1, 2, 6, 7], [1, 2, 4, 5, 6], [2, 3], [2, 3, 10, 11], [2, 4, 6, 7, 9, 10], [2, 10, 11, 13], [5, 6, 8], [ 6, 8, 9,10,12], [6, 10, 12], [10, 13]]; Slinalg.SGEF(NRow, NCol, M, CSteps); [[1, 2, 6, 7], [2, 3], [3, 10, 11, 13], [4, 5, 7], [5, 6, 8], [6, 10, 12], [8, 9], [10, 11], [11, 13]] -------------------------------

#### Example

NRow := 10; NCol := 13; CSteps:=<quotes>SGE1</quotes>; M := [[1, 2, 6, 7], [ 2, 4, 5, 6], [2, 3], [2, 3, 10, 11], [2, 4, 6, 7, 9, 10], [2, 10, 11, 13], [5, 6, 8], [ 6, 8, 9,10,12], [6, 10, 12], [10, 13]]; Slinalg.SGEF(NRow, NCol, M, CSteps); [[2, 3], [3, 13], [10, 11], [11, 13]]

#### Example

NRow := 10; NCol := 13; CSteps:=<quotes>SGE2</quotes>; M := [[1, 2, 6, 7], [ 2, 4, 5, 6], [2, 3], [2, 3, 10, 11], [2, 4, 6, 7, 9, 10], [2, 10, 11, 13], [5, 6, 8], [ 6, 8, 9,10,12], [6, 10, 12], [10, 13]]; Slinalg.SGEF(NRow, NCol, M, CSteps); [ ]

### See also