求解 Python 中 X 的值

Solve value for X in Python

我想从用户那里获取一个方程式并将其传递到我的数据中以获得值。我试图使用 eval 并使用逻辑来查找 exp、log 并将其替换为数学函数。但是,eval 不支持大括号或方括号。

我的方程只有一个自变量(即 y = f(x))。我目前的做法如下:

import math
x = 5
eqn = '(x**2)+(x*2)+exp(5)+exp(2)+log(2)'

if 'exp' in eqn:
    eqn = eqn.replace('exp' , 'math.exp')

if 'log' in eqn:
    eqn = eqn.replace('log' , 'math.log')


print(eval(eqn))

如何支持其他支架?还有比这更好的方法吗?谢谢

Python 保留 [] 和 {} 大括号用于其他用途,而不仅仅是操作顺序。您可以只使用嵌套括号来达到相同的效果。

更传统的数学符号会这样写嵌套括号:[(2+2)*4]**2

在python中,你可以只写((2+2)*4)**2

您可以像处理其他方程式元素一样转换它们:

eqn = eqn.replace('[', '(')
eqn = eqn.replace('{', '(')
eqn = eqn.replace(']', ')')
eqn = eqn.replace('}', ')')

SymPy 的 solve() 函数可用于求解包含符号数学变量的方程式和表达式。

具有一种解的方程: 当用符号数学变量定义方程时,下面的代码部分演示了 SymPy 的 solve() 函数。

 from sympy import symbols, Eq, solve

y = symbols('y')
eq1 = Eq(y + 3 + 8)


    sol = solve(eq1)
    sol

输出:

[-11]

有两个解的方程:

如果您为 SymPy 的 solve() 函数指定关键字参数 dict=True,输出仍然是一个列表,但列表内部是一个字典,显示为哪个变量求解。

from sympy import symbols, Eq, solve

y = symbols('x')
eq1 = Eq(x*2 -5x + 6)


sol = solve(eq1, dict=True)
sol

输出:

[{x: 2}, {x: 3}]