Re: [Q] Approximating polynomials w/several variables
- To: mathgroup at smc.vnet.net
- Subject: [mg7418] Re: [Q] Approximating polynomials w/several variables
- From: Daniel Lichtblau <danl>
- Date: Sat, 31 May 1997 15:07:29 -0400 (EDT)
- Organization: Wolfram Research, Inc.
- Sender: owner-wri-mathgroup at wolfram.com
Jack Boyce wrote: > > Hello, > > I have a very large polynomial in Mathematica that has several "small" > variables (each substantially less than unity), and I would like to expand > it to lowest order in those small variables. As an illustration, take the > following example: > > P[x,y,z] = x^3*y*z + x*y^2*z + x*y^3*z + x^3*y*z^2 > > The lowest-order expansion keeps only the first two terms: > > x^3*y*z + x*y^2*z > > since the third term is dominated by the second (when y is small) and the > fourth term is dominated by the first (when z is small). Note that altough > the first term is of total order 5, compared with order 4 of the second > term, it is not known to be smaller than the second term because we don't > know if x,y,z are small or large relative to each other. > > My question is: can Mathematica do this useful operation with some existing > function or add-on, or should I just write this myself? The closest thing > I've seen is the power-series expansion function, which can be applied to > each variable in turn but doesn't give the result I need. > > Any help/advice is greatly appreciated! > > Jack Boyce > jboyce at physics.berkeley.edu Here is a way to do this. You want to keep only thos terms whose power-products are not divisible by those of other terms. These can by found by getting a Groebner basis of the set of monomials. Then we need to do a bit of work to recover the coefficients (not necessary in your example, though, since they are all one there). I show all the intermediate steps in the example below, just so you see exactly what is happening. In[27]:= ee = 40*x^3*y*z + 11*x*y^2*z - 18*x*y^3*z + 28*x^3*y*z^2; In[28]:= InputForm[ff = GroebnerBasis[Apply[List, ee]]] Out[28]//InputForm= {x*y^2*z, x^3*y*z} In[29]:= InputForm[gg = Coefficient[ee, ff]] Out[29]//InputForm= {11, 40} In[30]:= gg . ff // InputForm Out[30]//InputForm= 40*x^3*y*z + 11*x*y^2*z Daniel Lichtblau Wolfram Research danl at wolfram.com