Search code examples
maple

Recovering the name of a variable in Maple


I am programming a procedure in Maple. This procedure receive a list of vector fields (from the ``DifferentialGeometry'' package). I want that in the output they appear, together with the performed computations, the name of the vector fields introduced by the user.

During the procedure I refer to them by the name I have given to the parameter, but I don't actually know the "names of the variables". Is there a way to recover them? I have being looking for in the Maple documentation and in the DGinfo help, but I didn't get anything.

EXAMPLE ADDED

I have simplified the problem to the following. Consider the code:

with(DifferentialGeometry); 
DGsetup([x, u], M); 
X := evalDG(D_u*x+2*D_x); 

myproc := proc (var) 
  return evalDG(var+D_u) 
end proc; 

myproc(X)

The output is

enter image description here

But I want modify the code in such a way that the output were something like

X+D_u is 2 D_x + (1+x) D_u

That is, I want to use the name ("X") of the variable in the output, not only the value (2 D_x + x D_u).

Thank you for your time.


Solution

  • Here is one way of handling your example.

    restart;
    with(DifferentialGeometry):
    DGsetup([x, u], M):
    
    myproc := proc(var::uneval) local evar;
      evar := eval(var);
      return evalDG(var+D_u) = evalDG(evar+D_u);
    end proc:
    
    X := evalDG(D_u*x+2*D_x):
    
    myproc(X);
    
        X + D_u = 2 D_u + (1 + x) D_u
    

    Here is a variant on that idea, with two such parameters on the procedure, but also handling then in a more general manner.

    restart;
    with(DifferentialGeometry):
    DGsetup([x, u], M):
    
    myproc := proc(var1::uneval, var2::uneval)
      local evars, res;
      evars := [var1=eval(var1), var2=eval(var2)];
      res := var1 + var2 + D_u;
      return res = evalDG(eval(res, evars));
    end proc:
    
    X1 := evalDG(D_u*x+2*D_x):
    X2 := evalDG(D_u*x+3*D_x):
    
    myproc(X1, X2);
    
        X1 + X2 + D_u = 5 D_x + (1 + 2 x) D_x