# getSubmatrixOfRank -- tries to find a submatrix of the given rank

## Synopsis

• Usage:
getSubmatrixOfRank(n1, M1)
• Inputs:
• Optional inputs:
• DetStrategy => ..., default value Rank, DetStrategy is a strategy for allowing the user to choose how determinants (or rank), is computed
• MaxMinors => ..., default value null, an option to control depth of search
• PointOptions => ..., default value {Strategy => Default, Homogeneous => false, Replacement => Binomial, ExtendField => true, PointCheckAttempts => 0, DecompositionStrategy => Decompose, NumThreadsToUse => 1, DimensionFunction => dim, Verbose => false}, options to pass to functions in the package RandomPoints
• Strategy => ..., default value new OptionTable from {Points => 0, Random => 0, GRevLexLargest => 0, LexSmallestTerm => 25, LexLargest => 0, LexSmallest => 25, GRevLexSmallestTerm => 25, RandomNonzero => 0, GRevLexSmallest => 25}, strategies for choosing submatrices
• Threads => ..., default value 1
• Verbose => ..., default value false
• Outputs:
• a list, the first entry is a list of row indices, the second is a list of column indices

## Description

This function looks at submatrices of the given matrix, and tries to find one of the specified rank. If it succeeds, it returns a list of two lists. The first is the list of row indices, the second is the list of columns, of the desired rank submatrix. If it fails to find such a matrix, the function returns null. The option MaxMinors is used to control how many minors to consider. If left null, the number considered is based on the size of the matrix.

 i1 : R = QQ[x,y]; i2 : M = matrix{{x,y,2,0,2*x+y}, {0,0,1,0,x}, {x,y,0,0,y}}; 3 5 o2 : Matrix R <--- R i3 : l = getSubmatrixOfRank(2, M) o3 = {{1, 2}, {2, 1}} o3 : List i4 : (M^(l#0))_(l#1) o4 = | 1 0 | | 0 y | 2 2 o4 : Matrix R <--- R i5 : l = getSubmatrixOfRank(2, M) o5 = {{1, 0}, {2, 1}} o5 : List i6 : (M^(l#0))_(l#1) o6 = | 1 0 | | 2 y | 2 2 o6 : Matrix R <--- R i7 : getSubmatrixOfRank(3, M)

The option Strategy is used to used to control how the function computes the rank of the submatrices considered. See getSubmatrixOfRank(...,Strategy=>...). In the future, we hope to speed up the function to use multiple threads of execution, in which case the threading would be controlled by the option Threads.