[GiNaC-list] Symbolic computation and derivatives

Antoine Begault antoine.begault at inrialpes.fr
Fri May 11 12:11:19 CEST 2007


I am currently trying the functionalities of GiNaC in order to translate
some Maple code to C++ code, for a Matrix-using application. But I'm
facing some difficulties for which some help could be very useful.

First, I need to represent a symbolic vector and then functions of this
vector. So far, I've been using 'n' distincts symbols for a vector of
size 'n', which is certainly not the best way, especially for what I  
to do afterwards (c.f the example below).

Then, I need to compute the derivative of a function with respect to the
previous vector, i.e. a gradient or a Jacobian matrix. With the "n  
symbols" solution, I would do that by derivating n times, but it  
would be
much more efficient if the whole gradient computation could be done in
only one step: do you see any better way to do so within GiNaC?

Finally, it happens that this vector is itself a function of time and  
I need
sometimes to compute derivatives of functions of this vector with  
to time (in a more efficient way than just computing the aforementioned
gradient or Jacobian and remultiplyling it by the time-derivative of the
vector). I need therefore to express that a symbol (the members of the
vector) is in fact a function of another symbol, with respect to  
which I can
compute derivatives.

How we do this in Maple is substitute symbols q[i] by functions q[i](t),
differentiate with respect to t, then substitute back q[i](t) with q 
[i] and
diff(q[i](t),t) with qdot[i] with the following code:

> R=matrix(3,3);//+ initialization
> map(x->subs({seq(q[i](t)=q[i], i=1..NDDL),
>                seq(diff(q[i](t), t)=qdot[i], i=1..NDDL)},
>                diff(subs({seq(q[i]=q[i](t), i=1..NDDL)}, x), t)), P)):

Doing something similar with GiNaC requires that we deal with user
defined functions, but the "function" objects don't look like they  
are really
made on this purpose: am I understanding correctly? We would define 'n'
functions q[i](t) with derivatives defined as 'n' other functions qdot 
something like that, but isn't there any simpler and more effective way?

Many thanks for your time and help,

A. Begault.
View this message in context: http://www.nabble.com/Symbolic-computation-and-derivatives-tf3726576.html#a10429229
Sent from the Ginac - General mailing list archive at Nabble.com.

More information about the GiNaC-list mailing list