Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

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

Search the Archive

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



  • Prev by Date: Re: Re: how to find n in expression x^n using a pattern?
  • Next by Date: display of function
  • Previous by thread: Re: Re: how to find n in expression x^n using a pattern?
  • Next by thread: Re: Re: how to find n in expression x^n using a pattern?