Re: remove higher orders terms from mathemtica's result
- To: mathgroup at smc.vnet.net
- Subject: [mg90932] Re: remove higher orders terms from mathemtica's result
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Wed, 30 Jul 2008 03:52:35 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g6mqap$nt8$1@smc.vnet.net>
kem wrote:
> Given this:
>
> K = (1+vy) (zx+wx) + vx (zy+wy);
> Expand[K^2]
>
> Is it possible to remove automatically the 3rd and 4th orders from the
> result of 'Expand[K^2]' ?
>
> By 3rd order I mean terms like: 2 wy zy vx^2 etc. (all terms with sum
> of the degrees of derivatives of u,v,w is = 3)
> By 4th order: wy^2 vx^2 etc. (sum of degrees of u,v,w = 4)
The following expression will do it:
Plus @@ Pick[List @@ expr,
Total@Exponent[#, Variables[expr]] & /@ List @@ expr, 0 | 1 | 2]
Here a step by step, visual, explanation of how it works:
In[1]:= K = (1 + vy) (zx + wx) + vx (zy + wy);
In[2]:= expr = Expand[K^2]
Out[2]= wx^2 + 2 vy wx^2 + vy^2 wx^2 + 2 vx wx wy + 2 vx vy wx wy +
vx^2 wy^2 + 2 wx zx + 4 vy wx zx + 2 vy^2 wx zx + 2 vx wy zx +
2 vx vy wy zx + zx^2 + 2 vy zx^2 + vy^2 zx^2 + 2 vx wx zy +
2 vx vy wx zy + 2 vx^2 wy zy + 2 vx zx zy + 2 vx vy zx zy + vx^2 zy^2
In[3]:= Variables[expr]
Out[3]= {wx, vy, vx, wy, zx, zy}
In[4]:= List @@ expr
Out[4]= {wx^2, 2 vy wx^2, vy^2 wx^2, 2 vx wx wy, 2 vx vy wx wy, vx^2
wy^2, 2 wx zx, 4 vy wx zx, 2 vy^2 wx zx, 2 vx wy zx, 2 vx vy wy zx,
zx^2, 2 vy zx^2, vy^2 zx^2, 2 vx wx zy, 2 vx vy wx zy, 2 vx^2 wy zy,
2 vx zx zy, 2 vx vy zx zy, vx^2 zy^2}
In[5]:= Exponent[#, Variables[expr]] & /@ List @@ expr
Out[5]=
{{2, 0, 0, 0, 0, 0}, {2, 1, 0, 0, 0, 0}, {2, 2, 0, 0, 0, 0},
{1, 0, 1, 1, 0, 0}, {1, 1, 1, 1, 0, 0}, {0, 0, 2, 2, 0, 0},
{1, 0, 0, 0, 1, 0}, {1, 1, 0, 0, 1, 0}, {1, 2, 0, 0, 1, 0},
{0, 0, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 2, 0},
{0, 1, 0, 0, 2, 0}, {0, 2, 0, 0, 2, 0}, {1, 0, 1, 0, 0, 1},
{1, 1, 1, 0, 0, 1}, {0, 0, 2, 1, 0, 1}, {0, 0, 1, 0, 1, 1},
{0, 1, 1, 0, 1, 1}, {0, 0, 2, 0, 0, 2}}
In[6]:= Total@Exponent[#, Variables[expr]] & /@ List @@ expr
Out[6]= {2, 3, 4, 3, 4, 4, 2, 3, 4, 3, 4, 2, 3, 4, 3, 4, 4, 3, 4, 4}
In[7]:= Pick[List @@ expr, Total@Exponent[#, Variables[expr]] & /@ List
@@ expr, 0 | 1 | 2]
Out[7]= {wx^2, 2 wx zx, zx^2}
In[8]:= Plus @@ Pick[List @@ expr,
Total@Exponent[#, Variables[expr]] & /@ List @@ expr, 0 | 1 | 2]
Out[8]= wx^2 + 2 wx zx + zx^2
Regards,
-- Jean-Marc