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