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