Re: Fold and Cross
- To: mathgroup at smc.vnet.net
- Subject: [mg83885] Re: Fold and Cross
- From: Szabolcs Horvát <szhorvat at gmail.com>
- Date: Mon, 3 Dec 2007 07:09:38 -0500 (EST)
- References: <fj0moc$ifi$1@smc.vnet.net>
Peter Breitfeld wrote:
> to teach Cross how die differentiate I did:
>
> Unprotect[Cross];
> (1) Cross/: D[Cross[u_,v_],x_]:=Cross[D[u,x],v]+Cross[u,D[v,x]];
> (2) Cross/: D[Cross[u_, v_], {x_, n_}] :=
> Sum[Binomial[n, k] Cross[D[u, {x, k}], D[v, {x, n - k}]], {k, 0, n}];
> Protect[Cross];
>
> This works very well für things like D[(u x v), t] or D[(u x v), {t,3}].
> Now I tried to implement a tag for D[(u x v),x,y,...] and did the
> following:
>
> Unprotect[Cross];
> (3) Cross /: D[Cross[u_, v_], x_, y__] := Fold[D, Cross[u, v], Flatten[{x, y}]];
> Protect[Cross];
>
> But this doesn't do what I expected. It seems that tag (1) is not used,
> so there remain term with Derivative[n,m][Cross][...].
>
> What I am doing wrong?
Unfortunately I don't have a solution for you ... but the problem is
that D[] does not work in a way that one would naively expect: D[a[x] +
b[x], x] does not seem to evaluate to D[a[x], x] + D[b[x], x]. So even
with definition (1), D[Cross[a[x],b[x]] + Cross[c[x],d[x]], x] will not
work (Derivative[m,n][Cross] will appear). Another problem is that D[]
assumes that all your functions and variables are scalars, e.g.
D[f[g[x]], x] evaluates to f'[g[x]] g'[x]. So I don't believe that it
is possible to get D[] to work *symbolically* with vectors/tensors. You
could write your vectors explicitly as {x,y,z}, and D[] will work
perfectly with them, but this may not be what you want. Another
solution is to define your own set of operations for vectors and
scalars, and your own derivation function. I haven't used them, but I
know that there are some tensor manipulation and quantum mechanics
packages for Mathematica---they might (or might not) provide some
inspiration.
--
Szabolcs