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} }
Mathematica Stack Exchange is a question and answer site for users of Wolfram Mathematica. It only takes a minute to sign up.
Sign up to join this communityWhat 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.
$\endgroup$
Oct 8, 2014 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}]
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
. $\endgroup$Variables
, e.g.Variables[x^3 + 6 x^2 y + 3 x y z + x z^2 + 1]
yields{x, y, z}
$\endgroup$MonomialList[a x + b y^2 + 3 c z^{1.3}]
yielding{{1. a x, 1. b y^2, 3. c z^(13/10)}}
$\endgroup$List @@ ((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}
$\endgroup$