1 | initial version |
Here's a way. First we define our variables:
k = 2
n = 3
R = PolynomialRing(QQ, 'x',(n-k)*k)
Then we introduce the following function:
def indet_rref(k, n, pivots, ring):
assert len(pivots) == k and sorted(pivots) == list(pivots)
M = Matrix(ring, k, n)
taken = []
for (row, pivot) in enumerate(pivots):
M[row, pivot] = 1
taken.extend((i, pivot) for i in range(k))
taken.extend((row,j) for j in range(pivot))
indet_nonzeros = [(i,j) for i in range(k) for j in range(n) if not (i,j) in taken]
for (idx, y) in zip(indet_nonzeros, ring.gens()):
M[idx] = y
return M
The pivots
argument is a list of k
column indices (one per row), and the generators of ring
are taken as the indeterminates.
For example:
sage: indet_rref(k, n, range(k), R)
[ 1 0 x0]
[ 0 1 x1]
We can test all the combinations:
import itertools
for pivots in itertools.combinations(range(n), k):
M = indet_rref(k, n, pivots, R)
assert M.rref() == M
assert M.rank() == k
print M
print
Output:
[ 1 0 x0]
[ 0 1 x1]
[ 1 x0 0]
[ 0 0 1]
[0 1 0]
[0 0 1]
2 | No.2 Revision |
Here's a way. First we define our variables:
k = 2
n = 3
R = PolynomialRing(QQ, 'x',(n-k)*k)
Then we introduce the following function:
def indet_rref(k, n, pivots, ring):
assert len(pivots) == k and sorted(pivots) == list(pivots)
M = Matrix(ring, k, n)
taken = []
for (row, pivot) in enumerate(pivots):
M[row, pivot] = 1
taken.extend((i, pivot) for i in range(k))
taken.extend((row,j) for j in range(pivot))
indet_nonzeros indet_indices = [(i,j) for i in range(k) for j in range(n) if not (i,j) in taken]
for (idx, y) in zip(indet_nonzeros, zip(indet_indices, ring.gens()):
M[idx] = y
return M
The pivots
argument is a list of k
column indices (one per row), and the generators of ring
are taken as the indeterminates.
For example:
sage: indet_rref(k, n, range(k), R)
[ 1 0 x0]
[ 0 1 x1]
We can test all the combinations:
import itertools
for pivots in itertools.combinations(range(n), k):
M = indet_rref(k, n, pivots, R)
assert M.rref() == M
assert M.rank() == k
print M
print
Output:
[ 1 0 x0]
[ 0 1 x1]
[ 1 x0 0]
[ 0 0 1]
[0 1 0]
[0 0 1]