Re: Difficulties in patterns matching

• To: mathgroup at smc.vnet.net
• Subject: [mg3749] Re: Difficulties in patterns matching
• From: Juergen.Schmidt at math.uni.giessen.de (Juergen Schmidt)
• Date: Sun, 14 Apr 1996 03:02:23 -0400
• Organization: Institut fuer Mathematische Physik
• Sender: owner-wri-mathgroup at wolfram.com

```In article <4jvrv2\$nt1 at dragonfly.wolfram.com>, nader at math.chalmers.se says...

>        Hi,
>
>        I spent some time to get a grip on the following patterns
>matching problem but to no avail.
>
>        Consider the following expression.
>
>test = (2*Sum[(gamma*x[i])/(sigma^2*(1 - (gamma*x[i])/sigma)), {i, 1, n}])/
>    gamma^3 + (-1 + gamma^(-1))*
>    Sum[(2*gamma*x[i]^3)/(sigma^4*(1 - (gamma*x[i])/sigma)^3) +
>      (2*x[i]^2)/(sigma^3*(1 - (gamma*x[i])/sigma)^2), {i, 1, n}] -
>   (2*Sum[(gamma*x[i]^2)/(sigma^3*(1 - (gamma*x[i])/sigma)^2) +
>        x[i]/(sigma^2*(1 - (gamma*x[i])/sigma)), {i, 1, n}])/gamma^2
>
>        I would like to apply the following transformation rules to
>the above expression.
>
>1) Sum[x[i]/(1-gamma x[i]/sigma),{i,1,n}]-> n f1[gamma,sigma]
>
>2) Sum[x[i]^2/(1-gamma x[i]/sigma)^2,{i,1,n}]-> n f2[gamma,sigma]
>
>3) And generally for different m's:
>
>Sum[x[i]^m/(1-gamma x[i]/sigma)^m,{i,1,n}]-> n fm[gamma,sigma]
>
>
>        There are lots of such expressions and the main problem is
>that I can't define a general transformation rule which can handle for
>example rule no 1 for all different coefficients of x[i] in the numerator of
>expressions and also for different coefficients of (1-gamma
>x[i]/sigma) in the denominator of expressions. This means that the
>first sum in "test" should be transformed to
>
>                n gamma f1[gamma,sigma] /sigma^2
>
>These rules should also handle sums like
>
>        Sum[x[i]+y[i],{i,n}]=Sum[x[i],{i,n}]+Sum[y[i],{i,n}].
>
>
>

Hello,

try this:

rel =
{Literal at Sum[c_*f_, {i_, n__}]       :> c*Sum[f, {i, n}] /; FreeQ[c, i],

Literal at Sum[a_ + b_, range_List]    :> Sum[a, range] + Sum[b, range],

Literal at Sum[c1_.*x[i_]^m_. * (c2_.*(1-gamma x[i_]/sigma))^n_.,  {i_, 1, N_}] :>
c1/c2* N ToExpression["f"<>ToString[m]][gamma, sigma] /;
(FreeQ[{c1, c2}, i]) && (m + n === 0)
};

test//.rel

The real problem is caused by such pattern:

MatchQ[ a/b,     a^n_. * b^(-n_.)]
True

MatchQ[ a^2/b^2, a^n_. * b^(-n_.)]
False

This can be circumvented by using

MatchQ[ a^2/b^2, a^n_. * b^m_. /; n + m === 0]
True

Juergen

--------------------------------------------------------
Dipl.-Phys. Juergen Schmidt
Mathematisches Institut (Math. Physik)
der Justus-Liebig-Universitaet Giessen
Arndtstr. 2
D-35392 Giessen
Tel. +49 641702-2542 (-2535 Secr./-2548 Fax)
http://www.uni-giessen.de/www-Mathematische-Physik/
---------------------------------------------------------

==== [MESSAGE SEPARATOR] ====

```