Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Symmetrizing function arguments

  • To: mathgroup at smc.vnet.net
  • Subject: [mg127633] [mg127633] Re: Symmetrizing function arguments
  • From: "djmpark" <djmpark at comcast.net>
  • Date: Wed, 8 Aug 2012 21:37:20 -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: problem in solving inconsistent system of equations