Re: Symmetrizing function arguments
- To: mathgroup at smc.vnet.net
- Subject: [mg127633] Re: Symmetrizing function arguments
- From: "djmpark" <djmpark at comcast.net>
- Date: Wed, 8 Aug 2012 03:19:05 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <30176350.22535.1344323226826.JavaMail.root@m06>
Do you mean that from F[a,b,c,d,e,f] you want to write a new function fSym that is invariant to the interchange of any two of its arguments? Here is how you might do it for a three argument function. Create all the permutations of the arguments. There are 3! == 6 of them. Permutations[{a, b, c}] Length[%] {{a, b, c}, {a, c, b}, {b, a, c}, {b, c, a}, {c, a, b}, {c, b, a}} 6 Then write the new function as: fSym[a_, b_, c_] = Total[F @@@ Permutations[{a, b, c}]]/3! 1/6 (F[a, b, c] + F[a, c, b] + F[b, a, c] + F[b, c, a] + F[c, a, b] + F[c, b, a]) fSym[a, b, c] == fSym[b, a, c] True For a six argument function use: fSym[a_, b_, c_, d_, e_, f_] = Total[F @@@ Permutations[{a, b, c, d, e, f}]]/6!; fSym[a, b, c, d, e, f] == fSym[b, a, c, d, e, f] True fSym[a, b, c, d, e, f] == fSym[b, a, c, d, f, e] True David Park djmpark at comcast.net http://home.comcast.net/~djmpark/index.html From: Hauke Reddmann [mailto:fc3a501 at uni-hamburg.de] I'd like to define a quasi 6j symbol which has tetrahedron symmetry in its 6 arguments. At the moment (I'm a n00b, still :-) I use a cheap hack: f[a_,b_] := If[a>b,F[a,b],F[b,a]]; Bingo, f now is commutative and sorts by descending arguments, and NOOOOO endless loops. My, am I proud of myself :-) Needless to say, using this method to implement the symmetries of h[a_,b_,c_,d_,e_,f] is a royal pain in the backside, as you see with the hassle needed already for just 3 arguments... g[a_,b_,c_]:=If[b>c,If[a>c,If[a>b,G[a,b,c],g[b,a,c]],g[c,b,a]],g[a,c,b]]; ...especially considering all the subcases needed when two arguments are equal. Surely, you can offer a more elegant way? It more or less suffices to bring the largest value to position 1 and the second-largest to 2 or 3 (assume a,b and c,d and e,f are the opponent edges of the tetrahedron), but optimal would be if none of the 24 tetrahedron operations gives a smaller lexicalic ordering even in the case of equal entries. P.S. No, the inbuilt 6j symbol is useless - wrong Lie group :-) -- Hauke Reddmann <:-EX8 fc3a501 at uni-hamburg.de Out on deck the dawn arrived Your grey sweater oversized The rooftops glimmered before our eyes
- Follow-Ups:
- Re: Symmetrizing function arguments
- From: James Stein <mathgroup@stein.org>
- Re: Symmetrizing function arguments