pari's qflllgram function returns (given input a positive semidefinite
square G, not necessarily positive definite) a "unimodular" U such
that the columns of GT are an LLL-reduced basis for the lattice
spanned by the columns of G.  That's from the documentation, but when
G is singular U will not be square, so I would not call it unimodular.

So what is wrong is Sage's interface in the case where G is not
definite.  In the lines

MS = matrix_space.MatrixSpace(ZZ,n)
        U = MS(U.python())
        # Fix last column so that det = +1
        if U.det() == -1:
            for i in range(n):
                U[i,n-1] = - U[i,n-1]
        return U

in the first line it should say MatrixSpace(ZZ,n,U.ncols())  and then
the determinant fix should be omitted unless U.nows()==U.ncols().

That would be an easy patch!

John

On 20 March 2013 17:03, Dima Pasechnik <dimp...@gmail.com> wrote:
> On 2013-03-19, Victor Miller <victorsmil...@gmail.com> wrote:
>> ------=_Part_554_9793948.1363718282627
>> Content-Type: text/plain; charset=ISO-8859-1
>>
>> Suppose that A is an m by n integer matrix.  Its Gram matrix is G = A*A^t.
>> If A is not full rank, then G has some eigenvalues of 0.  If I do
>> G.LLL_gram() I get a somewhat uniformative error message like:
>>
>> Value Error: ma matrix from Full MatrixSpace of 10 by 2 dense matrices over
>> Integer Ring cannot be converted to a matrix in Full MatrixSpace of 10 by
>> 10 dense matrices over Integer Ring!
>>
>> I understand that pari (which is what I understand, actually computes
>> LLL_gram) doesn't like non-definite matrices.  But, in this case it looks
>> like it returned something to SAGE of lower dimension (what?) and SAGE
>> didn't know what to do with it.  Can the error message at least be changed
>> to something more informative.
>
> This is certainly easy to fix, but here is a workaround that seems to
> work.  Let's make a low rank, say, 3x3 matrix:
>
> sage: A=matrix([[1,2,3]])
> sage: G=A.T*A; G
> [1 2 3]
> [2 4 6]
> [3 6 9]
> sage: x=G._pari_(); x # this is what PARI will get
> [1, 2, 3; 2, 4, 6; 3, 6, 9]
> sage: x.lllgram() # compute its LLL in PARI
> [1; 0; 0]
>
> HTH,
> Dmitrii
>>
>> I've found a work around for some of my matrices:   Let N be some big
>> integer, and let G'= N*G + identity_matrix(G.nrows()).  This perturbs G a
>> little so that the 0 eigenvalues go away.
>>
>> Victor
>>
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sage-support" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sage-support+unsubscr...@googlegroups.com.
> To post to this group, send email to sage-support@googlegroups.com.
> Visit this group at http://groups.google.com/group/sage-support?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-support?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to