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