首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在用于符号计算的函数内部处理exec

在用于符号计算的函数内部处理exec
EN

Stack Overflow用户
提问于 2018-07-20 03:50:01
回答 0查看 118关注 0票数 0

我正在尝试在一个函数中包含一个exec,该函数创建一个变量,以便使用一个简单的符号来求解方程。但是,由于解决方案是在exec内部创建的,因此会创建错误:UnboundLocalError: local variable 'sol' referenced before assignment

代码语言:javascript
复制
import sympy as sym
import sympy.parsing.latex as sym_tex # requires sympy 1.2

def symbolic_solver(equation, unknown, some_symbol='x'):   
    expr = equation.replace(unknown, some_symbol)
    eqn = sym_tex.parse_latex(expr)

    exec('%s = sym.Symbol("%s")'%(some_symbol, some_symbol))

    try: # Sometimes Sympy throws a notimplemented error when it can not solve
        exec('sol = sym.solve(eqn, %s)'%(some_symbol))
    except NotImplementedError:
        print('SymPy could not solve the equation.')
        print('Set the solution manually.')
    return sol

equation = 'm\\cdot g\\cdot h_A + \\frac{1}{2}\\cdot m\\cdot {v_A}^2 = m\\cdot g\\cdot h_B + \\frac{1}{2}\\cdot m\\cdot {v_B}^2'
unknown = 'v_B'
sol = symbolic_solver(equation, unknown)

我必须替换方程中的未知变量的原因是因为SymPy求解器不能处理可能有下标的变量,例如v_B。在任何情况下,当我不使用函数时,只需将其作为脚本运行,它会产生以下解决方案:

代码语言:javascript
复制
Solution symbolic: [-sqrt(2*g*h_A - 2*g*h_B + v_A**2), sqrt(2*g*h_A - 2*g*h_B + v_A**2)]
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51430726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档