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}]. > > > Thanks in advance for any advice you can give. > > Regards, Nader Tajvidi 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] ====