Is there a command that takes an equation as an input and creates an output with a list of terms in the original equation? Something like:
Input: Foo[ (1+a) x+ (2.5-b) y^2+ 3 c z^{1.3}]
Output: { (1+a) x , (2.5-b) y^2 , 3 c z^{1.3} }
Is there a command that takes an equation as an input and creates an output with a list of terms in the original equation? Something like:
Input: Foo[ (1+a) x+ (2.5-b) y^2+ 3 c z^{1.3}]
Output: { (1+a) x , (2.5-b) y^2 , 3 c z^{1.3} }
What you are asking to do, it seems, is to replace the Plus Head, with the List Head. The Apply function, shorthanded as @@, will do what you want:
Input: expr = Foo[a + b + c];
Now we can get just the a+b+c with First:
Input: expr2 = First@expr;
Check out FullForm to get rid of shorthanded notation:
Input: FullForm[expr2]
Output: Plus[a,b,c]
And finally, we can turn Plus into List with Apply:
Input: List@@expr2
Output: {a,b,c}
All in one line:
Input: List@@First[Foo[a+b+c]]
Foo was given as the example of the function itself, meaning that Foo[a + b + c] should directly evaluate to {a, b, c}. Nevertheless +1.
– Mr.Wizard
Oct 08 '14 at 16:11
Examining the structure of the expression with TreeForm
TreeForm@Foo[(1 + a) x + (2.5 - b) y^2 + 3 c z^{1.3}]
![TreeForm@Foo[(1 + a) x + (2.5 - b) y^2 + 3 c z^{1.3}]](../../images/4e8881c800f3dd9ef13d8001667e3d11.webp)
shows us another way:
Level[Foo[(1 + a) x + (2.5 - b) y^2 + 3 c z^{1.3}], {3}]
(* {(1 + a) x, (2.5 - b) y^2, 3 c z^1.3} *)
(Simply count the depth of the function arguments from the Head of the expression.)
List. – Spawn1701D May 16 '13 at 17:32Variables, e.g.Variables[x^3 + 6 x^2 y + 3 x y z + x z^2 + 1]yields{x, y, z}– Artes May 16 '13 at 17:32MonomialList[a x + b y^2 + 3 c z^{1.3}]yielding{{1. a x, 1. b y^2, 3. c z^(13/10)}}– Artes May 16 '13 at 17:38List @@ ((1 + a) x + (2.5 - b) y^2 + 3 c z^1.3)returning{(1 + a) x, (2.5 - b) y^2, 3 c z^1.3}– Artes May 16 '13 at 17:44==sign anywhere. Where's the "equation"? – J. M.'s missing motivation May 17 '13 at 07:35