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