[Date Index]
[Thread Index]
[Author Index]
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
Prev by Date:
**Squares in Q[r], a question about algebraic numbers in mathematica**
Next by Date:
**Re: How to Extract Conditional Expression?**
Previous by thread:
**Re: Symmetrizing function arguments**
Next by thread:
**Re: Symmetrizing function arguments**
| |