MathGroup Archive 2001

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Finding variables in a very long expression

  • To: mathgroup at smc.vnet.net
  • Subject: [mg31391] Re: Finding variables in a very long expression
  • From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
  • Date: Wed, 31 Oct 2001 19:59:12 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Jose Flanigan wanted to know how to find all variables in an expression.
Consider expr below.

In[1]:=
   expr=Sqrt[x*y]+x*z+w Sqrt[x]z^(1/n)+Pi/3;
   w=v;

The simple line below almost works, but the list includes Pi which isn't a
variable.  The third argument of Cases here is a level specification.  You
can read about Cases and level specification at my web site (URL below).

In[3]:=
   Union[Cases[expr, _Symbol, {0, -1}]]

Out[3]=
   {n, Pi, v, x, y, z}


The next line eliminates symbols such as Pi.

In[4]:=
   Union[Cases[expr, _Symbol?( !NumericQ[#]& ), {0, -1} ]]

Out[4]=
   {n, v, x, y, z}


--- The Plot Thickens ---
At the 1999 Developer Conference Robby Villegas explained that this sort of
thing gets tricky when you are working with symbols that were previously
removed.  Consider the lines below where the symbol (v) is removed.  If I
had my way removing a symbol would make the kernel work as if the symbol
never had any values, but that's not the way it works.

In[5]:=
   Remove[v]

In[6]:=
   Union[Cases[expr, _Symbol?( !NumericQ[#]& ), {0, -1} ]]

Out[6]=
   {n, Removed[v], x, y, z}


If you want to make sure your list of variables is free of Removed Symbols
use the next line (based on Robby Villegas talk). 

In[7]:=
   Union[Cases[expr, _Symbol?( !NumericQ[#] && NameQ[ToString[#]]& ), {0,
-1} ]]

Out[7]=
   {b, x, y, z}


---
Regards,
   Ted Ersek
  Check Mathematica Tips, Tricks at
  http://www.verbeia.com/mathematica/tips/Tricks.html



  • Prev by Date: Re: select data in formatted datafiles
  • Next by Date: Re: Rijndael
  • Previous by thread: AW: graphics on the same line
  • Next by thread: how to be as efficient as Sort[list] when list is {{x1,y1},{x2,y2},...}