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: [mg58508] Re: [mg58487] Re: [mg58426] how to find n in expression x^n using a pattern?
  • From: Pratik Desai <pdesai1 at umbc.edu>
  • Date: Tue, 5 Jul 2005 01:57:47 -0400 (EDT)
  • References: <200507020806.EAA01589@smc.vnet.net> <200507040624.CAA05758@smc.vnet.net> <26A87A3E-2A81-483F-B880-FD4E30020592@gmail.com>
  • Sender: owner-wri-mathgroup at wolfram.com

Andrzej Kozlowski wrote:

>
> 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
>
>
Hi Andrzej

 I have had occasion to use patterns before and by far I have found it 
the most difficult feature of mathematica  to work with and the help on 
it  leaves a lot to be desired. I agree the poster seems to be trying to 
learn patterns, I was just trying to point out, as you have on your 
earlier reply,  that there are easier ways to do the same job (i.e 
finding the highest common exponent in x). Again not to put a finer 
point on it, it seems to me that the use of patterning as you have shown 
seems only to work when the expression is in its factored form (which I 
admit was the posters original query)  whereas using Solve and count 
works irrespective of the form of the expression. Or am I wrong?

p[x_] = x^5*(x^32 + 2x^21 + 3x^17 - 13x^5);
Timing[Cases[p[x], x^(n_.) -> n, {1}]]
 >>{0. Second, {5}}

Timing[Count[x /. Solve[p[x] == 0, x], 0]]
 >>{0.01 Second, 10}

Now if you use simplify
p[x_] = x^5*(x^32 + 2x^21 + 3x^17 - 13x^5) // Simplify;
Timing[Cases[p[x], x^(n_.) -> n, {1}]]
{0. Second, {10}}

Best regards
Pratik

-- 
Pratik Desai
Graduate Student
UMBC
Department of Mechanical Engineering
Phone: 410 455 8134



  • Prev by Date: Re: Can't assign value to symbols
  • Next by Date: Re: Re: Re: Can't assign value to symbols
  • 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?