I am working nearly full-time on a big project to add detailed
explanations to my introductory linear algebra textbook about how to
use Sage to study linear algebra.  At every turn, this work suggests
additions or modifications to the Sage library.  At a minimum, I think
the final product will be a very good demonstration of how useful and
comprehensive Sage can be in teaching undergraduate mathematics
courses.  You can view the suggested patches, and a work-in-progress
version of the textbook at:
http://wiki.sagemath.org/devel/LatexToWorksheet

There are several goals to these modifications of the Sage code:

(a) Simply conversions between vectors and matrices.  For example, a
patch allows for augmenting a matrix with a vector, rather than the
previous behavior which required three steps: converting the vector to
a 1-row matrix, then transposing it to a 1-column matrix, and then
augmenting with the column matrix.  (Dan Drake's "basic moves.")

(b) Allied with (a), make it as easy to take a column-oriented view of
linear algebra as a row-oriented view.  This has been much easier than
I suspected it would be, while still allowing for Sage's preference
for rows to dominate.

(c) Plan ahead for more advanced topics in matrix algebra which
naturally occur over the complex numbers.  Adding a "Hermitian inner
product" (name suggested by Dima P.) should not be controversial, I
hope.  From there, Sage needs a convenient way to take a conjugate
transpose of a matrix or a vector (yes, the transpose is irrelevant
for a Sage vector), then checks for Hermitian and unitary matrices,
etc.

(d) Fix various bugs and improve documentation.

Despite trying to start early, I am now at a junction where I am
postponing major decisions relative to (c).  I could be beating a dead
horse, but here's the situation relative to the conjugate-transpose.
A common construction is  (v^*)(A^*)Av, where  v  is a column vector,
A  is a matrix, and the * represents the conjugate-transpose.
Alternatives for expressing this in Sage:

v = vector(....)
A = matrix(....)

(1) v.conjugate()*A.conjugate_tranpose()*A*v
Basically status quo.  v.conjugate() does not exist yet, but would be
easy to add.

(2) v.H*A.H*A*v
New "H" property at Trac #8094 for matrices, would need to add it for
vectors.  I feel the lack of parentheses will be confusing to
beginners.

(3) v.adjoint()*A.adjoint()*A*v
Requires a change in the meaning of "adjoint" as discussed in this
thread.  One objection lodged on Trac #10501.

(4) v.star()*A.star()*A*v
A new suggestion made above.  Yes, using a word for a symbol is
probably a bad precedent.  But it is compact and mirrors a common
notational use without deprecating anything.

Comments, suggestions, and/or votes appreciated.  I need to get moving
on this.

Thanks,
Rob

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to