Re: Define an antisymmetric function
- To: mathgroup at smc.vnet.net
- Subject: [mg107449] Re: Define an antisymmetric function
- From: Szabolcs <szhorvat at gmail.com>
- Date: Fri, 12 Feb 2010 06:58:05 -0500 (EST)
- References: <hl0r36$uu$1@smc.vnet.net> <201002111307.IAA03558@smc.vnet.net>
On Feb 12, 11:44 am, Torsten Schoenfeld <kaffeetisch at gmx.de> wrote: > On 12.02.10 10:45, Leonid Shifrin wrote: > > > ClearAll[G]; > > G[a, b] := f[a, b] > > G[a, c] := g[a, c] > > G[b, c] := h[b, c] > > G[x_, y_] := -G[y, x] /; > > Hold[G[y, x]] =!= (Hold[G[y, x]] /. Most@DownValues[G]) > > This actually works perfectly fine even if pattern-based definitions are > involved! (Pattern-based definitions appear normally in DownValues.) I > neglected to mention it, but G[_, _] is also supposed to act as a > derivative in both slots, e.g. G[x_, y_^2] := 2 G[x, y] y. Your > approach handles this gracefully: G[x^2, y] yields -2 x G[y, x]. > > So, thanks a lot! Thanks also for all the other suggestions in this > thread; I learned many nice tricks. I believe that what Leonid referred to when he said that it might not work if you add pattern based definitions later on was that this approach assumed that the "antisymmetry definition" is the very last one in the DownValue list. Mathematica tries to automatically order definitions from most specific to most general, but this is not always possible. When it can't do this, it just adds rules to the DownValue list in the order they were defined. So a general pattern based definition *may* displace the antisymmetry rule from the very last position, especially if it is added later. Just be careful with the order in which definitions are made.
- References:
- Re: Define an antisymmetric function
- From: Szabolcs Horvát <szhorvat@gmail.com>
- Re: Define an antisymmetric function