MathGroup Archive 2008

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

Search the Archive

Re: Pattern matching problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg88539] Re: [mg88516] Pattern matching problem
  • From: "W_Craig Carter" <ccarter at mit.edu>
  • Date: Thu, 8 May 2008 04:11:28 -0400 (EDT)
  • References: <200805071107.HAA15035@smc.vnet.net>

Hello Charlie,
I have an inelegant solution. I'll put it in steps so that you can see
what it is doing:

(*representative data*)
poly =1 + u[x] +
 Sum[Product[
   D[u[x], {x, RandomInteger[{1, 6}]}], {i, 1,
    RandomInteger[{1, 4}]}], {4}]

InputForm[poly]

(*Take each termp in poly and turn it into a list, @@@ applies list a
first level*)
temp = Flatten[Apply[List, Flatten[List @@@ poly]]]

(*Replace each derivative it its order, so that powers are counted*)
temp2 = temp /. Derivative[n_][u][x] :> n

(*take the product of all the integers*)
Times @@ Cases[temp2, _Integer]


You could put it all together and "make it look" more elegant and
(even) more unreadable...

Craig


On Wed, May 7, 2008 at 7:07 AM, Charlie Brummitt <cbrummitt at wisc.edu> wrote:
> Hi all,
>  Here is my problem: Given a polynomial in the variables u[x,t] and its
>  spatial derivatives (for example, the polynomial could be 1 + u +
>  u_xx*u_xxx^2), count the number of spatial derivatives with multiplicity.
>  That is, after writing the above polynomial as
>
>
>  1 + u + u_xx * u_xxx * u_xxx
>
>  the output should be 2 + 3 + 3 (basically, you count the number of x's).
>
>  I have tried implementing this using a pattern matching approach. Here is
>  what I tried:
>
>  f[equation_ ] :=  Sum[ k * j * Count[ equation , D[ u[x, t], {x, j} ] ^ k ,
>  {0, \infinity} ], {j, 1, 50}, {k, 1, 50}]
>
>  This fails to work on, for example, the input u_xx^2, because it outputs 6
>  when it should output 4. This is because the u_xx is counted (+2 to the
>  sum), and the u_xx^2 is counted (+4 to the sum). This is because the u_xx is
>  nested inside the Power[    , 2] in its representation in Mathematica and so
>  it gets counted too many times in my formula. I can't seem to figure out a
>  way to use the "provided that" operator /; to make this formula work.
>
>  I've also tried doing some replacement methods, but to no success.
>
>  Thanks for any help you may be able to provide.
>
>  -Charlie
>
>
>



-- 
W. Craig Carter


  • Prev by Date: Re: Trouble computing conjugates
  • Next by Date: Re: FindClusters & BarCharts
  • Previous by thread: Pattern matching problem
  • Next by thread: Re: Pattern matching problem