       Re: Grouping similar indices together in an expression

• To: mathgroup at smc.vnet.net
• Subject: [mg65246] Re: [mg65242] Grouping similar indices together in an expression
• From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
• Date: Wed, 22 Mar 2006 06:13:36 -0500 (EST)
• References: <200603211246.HAA19581@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

On 21 Mar 2006, at 13:46, David Sanders wrote:

> Hi,
>
> I am a newbie in Mathematica, and am trying to do the following.
>
> I have terms which look like
> a[i] a[j] b[i] b[j]
>
> I need to apply a function F, for which I need to group the different
> indices (by which I mean i, j) together as follows:
>
> F(a[i] a[j] b[i] b[j]) = F(a[i] b[i]) F(a[j] b[j])
>
> I do not in general know how many different indices there might be
> in a
> term.  E.g. I might have
> a[i] a[j] a[k] b[j]
>
> Could somebody please give me a hint as to how to do this?
>
> Thanks,
> David.
>
As long as you do not mind the order of the terms being re-arranged,
the following should do what you want:

GroupTerms[m_Times, f_] := Times @@ Apply[f, Split[Sort[List @@ m,
OrderedQ[{#1[], #2[]}] & ],
#1[] === #2[] & ], {1}]

For example:

GroupTerms[a*a*b*b*c*c, f]

f[c]*f[a, b]*f[a, b, c]

which separates all terms according to the "index" .

Andrzej Kozlowski

• Prev by Date: Re: Grouping similar indices together in an expression
• Next by Date: Re: Grouping similar indices together in an expression
• Previous by thread: Grouping similar indices together in an expression
• Next by thread: Re: Grouping similar indices together in an expression