X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Fcone%2Fcone.py;h=8adc51cdd4836e8d1a405fb342f6c4bb8fa50fb6;hb=c4fdc3d232c1c6c179f7919ebb4fd169017edafd;hp=87cdf704580e68b55fa72cd93b8dfa6c1d08a484;hpb=0bdf2bb8ca97eeb065e7dd3c36bdac6879a52116;p=sage.d.git diff --git a/mjo/cone/cone.py b/mjo/cone/cone.py index 87cdf70..8adc51c 100644 --- a/mjo/cone/cone.py +++ b/mjo/cone/cone.py @@ -8,6 +8,26 @@ addsitedir(abspath('../../')) from sage.all import * +def drop_dependent(vs): + r""" + Return the largest linearly-independent subset of ``vs``. + """ + if len(vs) == 0: + # ...for lazy enough definitions of linearly-independent + return vs + + result = [] + old_V = VectorSpace(vs[0].parent().base_field(), 0) + + for v in vs: + new_V = span(result + [v]) + if new_V.dimension() > old_V.dimension(): + result.append(v) + old_V = new_V + + return result + + def basically_the_same(K1,K2): r""" ``True`` if ``K1`` and ``K2`` are basically the same, and ``False`` @@ -56,7 +76,7 @@ def iso_space(K): # Create the space W \times W^{\perp} isomorphic to V. # First we get an orthogonal (but not normal) basis... M = matrix(V.base_field(), K.rays()) - W_basis,_ = M.gram_schmidt() + W_basis = drop_dependent(K.rays()) W = V.subspace_with_basis(W_basis) W_perp = W.complement()