Re: Re: how to find n in expression x^n using a pattern?

*To*: mathgroup at smc.vnet.net*Subject*: [mg58502] Re: [mg58487] Re: [mg58426] how to find n in expression x^n using a pattern?*From*: Andrzej Kozlowski <akozlowski at gmail.com>*Date*: Tue, 5 Jul 2005 01:57:42 -0400 (EDT)*References*: <200507020806.EAA01589@smc.vnet.net> <200507040624.CAA05758@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

On 4 Jul 2005, at 15:24, Pratik Desai wrote: > steve wrote: > > >> I am learning patterns in Mathemtica, and I thought this will be >> easy. >> >> suppose you are given a factored expression, such as x^n(x^2+2)(x^3 >> +4) >> where 'n' above can be any number, including zero (i.e. there is no >> (x) as a separate factor). I need to find 'n', which can be >> 0,1,2,3,..etc.. >> >> i.e I need to find the power of the factor x by itself if it exist in >> the expression. not (x^n+anything), just (x^n) byitself. >> >> For example >> >> p= x (x^2+2) ---> here n=1 >> >> I tried this >> >> p /. x^n_(any_) -> n >> >> This did not work since x^1 does not match pattern x^n_. I would >> have >> worked if I had x^2 (x^3+2) for example. >> >> I know that I need to use something like x^_:1 to make it match x, >> which >> is really x^1, but I do not know how to use it in a replacement rule, >> becuase >> when I write >> >> p /. (x^n_:1)(any_) -> n >> >> it is an error. >> >> If I write >> >> p /. (x^_:1)(any_) -> _ >> >> I do not get back anything. >> >> Next I tried the Cases command, and again had no luck. >> >> The main problem is that Mathematica makes a difference between >> x, x^1, and x^2, etc... when it comes to matching with pattern x^n_ >> >> any idea how to do this? >> thanks, >> steve >> >> >> >> > Why not do something like this , it sounds quite simplistic but it > works :) > Clear[p] > p[x_] = x ^5(x^3 + 2x^2 + 3x - 13) > sol2 = Solve[p[x] == 0, x] > y = x /. sol2 > n = Count[y, 0] > > Best regards > > -- > Pratik Desai > Graduate Student > UMBC > Department of Mechanical Engineering > Phone: 410 455 8134 > > > In fact after seeing this posting I understood what the original poster wanted (probably). (He wrote that he was learning patterns so I thought this was meant just to be an exercise in pattern matching). However, using algebraic method, like the one above, could be unnecessarily complicated if the second factor of the equation is a high degree polynomial or something even more complicated. It is in fact easier to use patterns. Compare: p[x_] = x^5*(x^32 + 2x^21 + 3x^17 - 13); Timing[Cases[p[x], x^(n_.) -> n, {1}]] {0.0005019999999973379*Second, {5}} (as I wrote in my first response, giving the correct level specification is important). Timing[Count[x /. Solve[p[x] == 0, x], 0]] {0.08699899999999872*Second, 5} Andrzej Kozlowski Chiba, Japan

**References**:**how to find n in expression x^n using a pattern?***From:*"steve" <nma124@hotmail.com>

**Re: how to find n in expression x^n using a pattern?***From:*Pratik Desai <pdesai1@umbc.edu>