How to extract symbols from parsed LaTeX equation in Sympy?

Question:

I have parsed a LaTeX equation in Sympy, but now I need to extract the variables to symbols so that I can have Sympy solve/rearrange the equation for specific variables.

I know I can use equation.free_symbols to see the symbols contained in the equation, but how do I set those as symbols (automatically) so that I can specify them for the symbolic solution, i.e. solve(equation,C_L)?

from sympy.parsing.latex import parse_latex
from sympy import init_printing
from sympy.solvers import solve
from sympy import symbols

init_printing() 

equation = parse_latex(r"""
S_{TO} = frac{1}{frac{2g*rho}{2left( WoS right)}(mu C_{L}-C_{D_{0}}-KC_{L}^2)}ln(frac{(ToW)-mu + (frac{rho}{2(WoS)}(mu C_{L}-C_{D_{0}}-KC_{L}^2))V_{f}^{2}}{(ToW)-mu + (frac{rho}{2(WoS)}(mu C_{L}-C_{D_{0}}-KC_{L}^{2}))V_{i}^{2}} )
+ frac{V_{TR}^{2}}{0.2g}sin(sin^{-1}((ToW)-frac{1}{(LoD)}))
+ frac{h_{obstacle}-frac{V_{TR}^{2}}{0.2g}(1-cos(gamma_{climb}))}{tan(gamma_{climb})}            
            """)

test = (equation.free_symbols)
Asked By: Colton Campbell

||

Answers:

The var function will inject the symbols it creates from a string into the workspace. So, for example, you can do:

>>> from sympy import *
>>> syms = lambda eq: tuple(ordered(var(','.join(str(i) for i in eq.free_symbols))))
>>> eq = S('x_a + Cb_1')
>>> eq.has(x_a) # not yet defined
...
NameError: name 'x_a' is not defined
>>> syms(eq)  # now x_a and Cb_1 are defined
(Cb_1, x_a)
>>> eq.has(x_a)
True
>>> esyms = syms(equation)
>>> sol = solve(equation, C_L)
Answered By: smichr
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.