I had made this a ticket a few days ago:
http://sagetrac.org/sage_trac/ticket/1587

--Mike

On 12/26/07, William Stein <[EMAIL PROTECTED]> wrote:
>
> On Dec 26, 2007 7:35 PM, Marshall Hampton <[EMAIL PROTECTED]> wrote:
> >
> > At least in the United States, and I assume some other places as well,
> > matrices are usually considered to act from the left.  So the kernel
> > of a matrix A would be the set of vectors x such that Ax = 0.  In
> > sage, the kernel is given for the matrix acting from the right, i.e.
> > the set of vectors y such that yA  = 0.  If there is compelling
> > argument as to why that makes sense, I can live with it.
>
> There are 2 or 3 reasons why things are as they are with matrix
> actions on vectors in Sage.
>
> 1. In Sage vectors are row vectors:
> sage: v = vector([1,2,3])
> sage: v
> (1, 2, 3)              # <-- that's a row
>
> Matrices act naturally from the right on row vectors.
>
> Nonetheless, we now allow both actions in Sage for convenience:
>
> sage: A = random_matrix(QQ,3)
> sage: A*v
> (5, -4, 3)
> sage: v*A
> (6, 3/2, -1)
>
> 2. David Kohel and I made the decision about which side matrices would act on
> when I started Sage, i.e., back when Sage was called "Software for Arithmetic
> Geometry Experimentation", and the main goal of Sage was to provide a viable
> open source alternative to the subset of Magma that David Kohel and I used, 
> and
> to do so in a way that made it as easy as possible to port our code from 
> Magma,
> and to go back and forth between Sage and Magma.
> In Magma matrices act from the right, probably because vectors are row vectors
> and also because Magma is Australian.
>
> 3. At some point I was about to change everything to matrices acting from the
> left, and David Kohel stopped me.
>
> I don't know if that is a compelling enough reason.   A fourth reason is that
> changing things now would be really really really hard, and would likely
> introduce numerous bugs all over the place.
>
> A Magma example:
> -----
>
> sage: A = random_matrix(QQ,3)
> sage: v = vector([1,2,3])
> sage: v*A
> (9, 4, 3/2)
> sage: A*v
> (-5, 2, 15/2)
> sage: aa = magma(A)
> sage: vv = magma('VectorSpace(RationalField(),3)![1,2,3]')   # trac
> 1605 -- I'm on it.
> sage: vv*aa
> (  9   4 3/2)
> sage: aa*vv
> ... (boom!)
> <type 'exceptions.TypeError'>: Error evaluation Magma code.
> IN:_sage_[7] := _sage_[4] * _sage_[5];
> OUT:
> >> _sage_[7] := _sage_[4] * _sage_[5];
>                           ^
> Runtime error in '*': Arguments are not compatible
> Argument types given: AlgMatElt[FldRat], ModTupFldElt[FldRat]
>
>
> > But the
> > documentation for kernel() obscures, rather than clarifies, this
> > issue:
> >
> > Docstring:
> >
> >     Return the kernel of x.
> >
> >     EXAMPLES:
> >         sage: M = MatrixSpace(QQ,3,3)
> >         sage: A = M([1,2,3,4,5,6,7,8,9])
> >         sage: kernel(A)
> >         Vector space of degree 3 and dimension 1 over Rational Field
> >         Basis matrix:
> >         [ 1 -2  1]
> >
> > The problem with this example is that A is quite an unusual matrix:
> > its left-kernel is equal to its right-kernel.  I recommend that a non-
> > square example be given that makes the current behavior clearer.
>
> Good idea.  Please create a trac ticket, then put in some examples.
> You'll modify the file
>     sage/matrix/matrix_rational_dense.pyx
> Please put in a bunch (i.e., maybe 4 or 5) of examples to illustrate all
> kinds of things, including edge cases (0 by n or n by 0 matrices,
> denominators, etc.).
>
>  -- William
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://sage.math.washington.edu/sage/ and http://sage.scipy.org/sage/
-~----------~----~----~----~------~----~------~--~---

Reply via email to