Re: Extracting terms from an equation
- To: mathgroup at smc.vnet.net
- Subject: [mg69770] Re: [mg69697] Extracting terms from an equation
- From: János <janos.lobb at yale.edu>
- Date: Fri, 22 Sep 2006 01:04:56 -0400 (EDT)
- References: <200609211129.HAA07668@smc.vnet.net>
On Sep 21, 2006, at 7:29 AM, Coleman, Mark wrote:
> Greetings,
>
> I'd like to find a general way to extract all of the terms from an
> equation that involve a given variable. For instance, consider the
> equation
>
> myEquation == Exp[a + b x^2 + c y^2 + d x y + e x^3]]
>
> I'd like to define a function such that
>
> myFunction[myEquation,x] returns the result {b x^2, d x y, e x^3}
>
> Thanks,
>
> -Mark
Here is a newbie diving approach. I am sure it can be somehow
functionalized, but not by me and not today:
In[1]:=
aa = myEq == Exp[a + b*x^2 +
c*y^2 + d*x*y + e*x^3];
First I find all the unique positions where x can be found in the
equation.
In[2]:=
mmbrs = Union[Flatten[
Table[Position[aa, x, i],
{i, 1, Depth[aa]}], 1]]
Out[2]=
{{2, 2, 4, 2}, {2, 2, 2, 2,
1}, {2, 2, 3, 2, 1}}
Then I dive deeper and deeper into every item where such position was
found and chop away any surrounding layer that is not a "sum of
parts". "Sum of part"s are those forms that have a Head of Plus.
When I find such "sum of parts" than I just reach a level deeper and
Sow your "pearl" right from there.
In[3]:=
Flatten[First[Last[
Reap[i = 1; While[
i <= Length[mmbrs],
cur = mmbrs[[i]];
j = 1; While[
j <= Length[cur],
If[Head[First[
Extract[aa, {Take[
cur, j]}]]] ==
Plus, Sow[Extract[
aa, {Take[cur,
j + 1]}]]; Break[
]]; j++; ];
i++; ]]]]]
Out[3]=
{d*x*y, b*x^2, e*x^3}
János
----------------------------------------------
Trying to argue with a politician is like lifting up the head of a
corpse.
(S. Lem: His Master Voice)
- References:
- Extracting terms from an equation
- From: "Coleman, Mark" <Mark.Coleman@LibertyMutual.com>
- Extracting terms from an equation