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