On May 15, 10:55 am, "William Stein" <[EMAIL PROTECTED]> wrote:
> On Thu, May 15, 2008 at 7:48 AM, Jason Grout
>
>
>
> <[EMAIL PROTECTED]> wrote:
>
> > Jason Grout wrote:
> >> Based on some conversations with linear algebra people and classroom
> >> demonstrations in a linear algebra class, people are confused that when
> >> they create a matrix with matrix(3, range(9)), for example, that the
> >> echelon_form is not the rref output that they get from most any other
> >> program they have ever used, and certainly not what is taught in an
> >> undergrad linear algebra class. There is additional confusion if the
> >> entries specified have a fraction in them; then the matrix defaults to
> >> being over QQ, and the echelon_form functino gives the expected naive
> >> rref! The problem, of course, lies in the matrix defaulting to having
> >> base_ring == ZZ (i.e., non-field).
>
> >> What do people think about making the default ring for matrices QQ?
> >> Additionally, if the ring R is determined from the elements provided,
> >> then the matrix would be over R.fraction_field(). Of course, the
> >> documentation for matrix() would clearly indicate what is happening if
> >> the ring is not specified.
>
> > More concisely, this proposal could be worded:
>
> > What do people think of making matrix() return a matrix over a field by
> > default, unless a ring is explicitly specified. The default field would
> > either be the fraction field of the ring containing the specified
> > elements, or would be QQ if no elements are specified. This logic would
> > *only* be applied if a ring is not specified. The documentation of
> > matrix() would also be changed accordingly.
>
> +1
>
> I suggested this idea. I would never do this is Sage were "just for me",
> but Sage isn't. Please keep that in mind when reading the above proposal...
>
> -- William
I was just discussing this very issue with my chair yesterday. He had
created some wrappers to make using the elementary operations a little
easier for linear algebra students (though I think ended up sticking
with Octave for this semester for unrelated reasons), and then noticed
this with scaling rows under his first implementation.
What happens if you start with something like matrix(3, range(9)), but
then want to turn it into a complex matrix and scale a row by (say) i/
2? Under the current scaling code, this happens:
sage: N.rescale_col(2,i/2)
---------------------------------------------------------------------------
<type 'exceptions.TypeError'> Traceback (most recent call
last)
<snip>
<type 'exceptions.TypeError'>: unable to convert I/2 to a rational
I certainly have no problem with matrices starting off as rational
ones - a great idea! But it doesn't directly affect this sort of
issue - one could still start with a matrix over ZZ and then want to
multiply it later on by 1/2 without using change_ring().
What I am wondering is whether throwing an exception of TypeError
under the current code should be replaced by a try statement first
attempting N.changering(??) . The problem is I have no idea what to
use for ??, because unfortunately i/2 lives in Symbolic Ring, not in
CC, so I can't just put in ??=parent(i/2). It would sort of be beside
of the point of making Sage easier to use in the linear algebra
classroom if we had to explicitly type CC(i/2) everytime we wanted to
use i/2.
In any case, what "should" happen in the scaling context when scaling
by something mathematically legitimate, but not in the ring the matrix
is defined over in Sage?
- kcrisman
(By the way, the wrapper code is nice and well-documented, at
https://sage.math.gordon.edu/home/pub/1/)
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@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-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---