从表达式sympy中获取变量

时间:2019-02-12 00:49:04

标签: python sympy

我从文件中读取了几个表达式,它们都有一个共同的变量。我想遍历每个方程式,并根据其他变量和新常数编写此变量。例如,我的方程式如下:

 x1**(-1.0)*x2
 x1**(-1.0)*y1
 x1**(-1.0)*y2

我想这样做:

 x1 = x2/a1
 x1 = y1/a2
 x1 = y2/a3

我尝试执行此操作的方式(例如第一个)是这样的:

from sympy import *
from sympy.parsing.sympy_parser import parse_expr

eq1 = "x1**(-1.0)*x2" # I normally read this from a file
a1 = symbols('a1')
eq1 = parse_expr(eq1)
variable1 = list(eq1.free_symbols)[0]
print(variable1)
eq1 = solve(eq1-a1,variable1)
eq1 = eq1[0]
print(eq1)

这是我通过连续运行5次完全相同的代码得到的输出:

x1
x2/a1

x2
a1*x1

x2
a1*x1

x1
x2/a1

x2
a1*x1

所以问题是,当我尝试在表达式variable1 = list(eq1.free_symbols)[0]中选择第一个变量时,即使我使用的表达式,第一个变量也不总是相同的(有时是x1,有时是x2)。一直都是一样的。它似乎只是随机的,我真的希望不是。有人可以帮我弄清楚如何始终选择所需的变量。因此,对于我一开始编写的3表达式,我想在调用variable1 = list(eq1.free_symbols)[0](或等效函数)时始终选择x1。谢谢!

1 个答案:

答案 0 :(得分:0)

如果您的variable1始终为x1,则应该可以制作一个符号x1并使用它。

variable1 = sympy.symbol('x1') `