Since M. Hampton mentioned some of the things he missed in Sage, I  
thought I'd talk about the things that prevent me from using Sage for  
many things.

1. Commands to parse expressions. I regularly pull apart expressions  
to work with terms or parts of terms so I really miss an op command  
(and subsop). Easy access to these along with getting terms of various  
types and commands for working with integrals.

2. Like M. Hampton, I miss implicit variables. I'm an engineer at  
heart so I don't understand rings or fields because I was never taught  
them. Also, since I often work
with trig functions, I won't be able to use Polynomial Rings (at least  
if I understand
what I've read here).

3. Somewhat related to #1, is the ability to make new variables/ 
function names from old ones. For example, when in the Calculus of  
Variations, I'll create the variation function with a name based on  
the function to be varied (e.g., v(x,y,z,t) to \delta v(x,y,z,t)).
I also need this to carry out my EulerLagrange calculation. To  
illustrate this, my
Maple code for this is:

EulerLagrange := proc(Lagrangian::anything, variables::list)
        local num_list, qv_name, vel_var, qv_subs, qv_unsubs, Lagrange_subs1,
        Lagrange_subs2, dL_dqv1, dL_dqv2, dL_dqv, dL_dqvt, dL_dq, dL_dq1,
        dL_dq2, dL_dq3, q_name, q_subs, q_unsubs:
        # create a list of indices from 1 to the number of variables
        # used in the formulation
        num_list := [seq(i,i=1..nops(variables))]:

        # Define a list of generalized velocity and position variables
        qv_name := map2(cat,qv,num_list):
        q_name := map2(cat,q,num_list):

        # Equate the time derivatives of the system variable to the
        # generalized velocities and also define the reverse mapping
        vel_var := map(diff,variables,t):
        qv_subs := zip(equate,vel_var,qv_name):
        qv_unsubs := zip(equate,qv_name,vel_var):

        # Equate the generalized positions to the system variables
        # and define the reverse mapping
        q_subs := zip(equate,variables,q_name):
        q_unsubs := zip(equate,q_name,variables):

        # Convert the Lagrangian to the generalized position and velocity  
variables
        Lagrange_subs1 := subs(qv_subs,Lagrangian):
        Lagrange_subs2 := subs(q_subs,Lagrange_subs1):

        # Differentiate the Lagrangian with respect to the
        # generalized velocities and positions
        dL_dqv1 := map2(diff,Lagrange_subs2,qv_name):
        dL_dq1 := map2(diff,Lagrange_subs2,q_name):

        # Revert back to the system variables
        dL_dq2 := map2(subs,qv_unsubs,dL_dq1):
        dL_dqv2 := map2(subs,qv_unsubs,dL_dqv1):
        dL_dqv := map2(subs,q_unsubs,dL_dqv2):
        dL_dq := map2(subs,q_unsubs,dL_dq2):
        dL_dqvt := map(diff,dL_dqv,t):

        # Return the two components of the Euler-Lagrange Equation
        return (dL_dqvt, dL_dq):
end proc:

where the equate function used in zip is defined as:
equate := (x,y)->x=y:

I presume that Sage can't take a derivative with respect to a function  
(Maple can't
which is why this code is written this way). This code as written is  
two orders
of magnitude faster than Maple's code in the calculus of variations  
package. Plus,
it retains the order since it doesn't use sets.

This is one of the simpler functions in my package. My code to  
manipulate integrands in place is much more complicated since it needs  
to take into account the possibility of nested integrals.

If someone can help with #1 and #3, I might be able to port my code to  
Sage. I'd really like to do it since Sage has much better LaTeX  
support than Maple.

Cheers,

Tim.

---
Tim Lahey
PhD Candidate, Systems Design Engineering
University of Waterloo

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to