同情未知的任务

sympy unknown assignment

我正在尝试创建一个 python 程序来求解方程:

from sympy import symbols, Eq, solve

list1 = ['x', 'y']                 #<--- Letters of the user input
list1[0] = symbols(list1[0])       #<--- Assignment of the unknown x
list1[1] = symbols(list1[1])       #<--- Assignment of the unknown y
eq1 = Eq(x*2 - 5*x + 6 + y, 0)     #<--- Equation
res = solve(eq1, dict=True)        #<--- Solving
print(res)

我想为 'list1' 的第一个和第二个对象赋值,在本例中为 'x = symbols('x')' 和 'y = symbols ('y')'。所以我尝试用 list1[0] 替换 'x' ,用 list1[1] 替换 'y' 因为它可以是基于用户输入的任何字母。但是脚本在第六行仍然说 'x is not defined' 。那么,有没有办法给数组的一项赋值呢?

问题是您是在列表的上下文中创建符号。

当您执行等式时,Python 没有找到变量 'x' 或 'y',因为它们 exposed/visible 不在列表之外。

你可以试试:

eq1 = Eq(list1[0]*2 - 5*list1[0] + 6 + list1[1], 0)

得到结果,但它并不漂亮

或者以下应该有效:

x = Symbol('a')
y = Symbol('y')
eq1 = Eq(x*2 - 5*x + 6 + y, 0)

但是如果你真的想要在模块中公开符号,你可以这样做:

def symbol_references(in_list):
    for e in in_list:
       globals()[e] = Symbol(e)

symbol_references(['x', 'y'])
print(type(x))
print(type(y))

当您开始使用 SymPy 时,需要一段时间才能弄清楚 SymPy 对象和 Python 变量之间的区别。请记住,每个变量都是一个 Python 变量,分配给它的内容由您决定。

在第 6 行中,您要使用变量 xy。您可以查看前面几行,看看您从未定义过 x(它必须在 = 的 lhs 上)。这将纠正这种情况:

>>> x, y = map(Symbol, list1)

就字符串而言,list1 中的内容无关紧要。他们甚至可以是 ['a', 'b']。无论它们是什么,它们都将用于创建 SymPy 符号,并且它们将被分配给 Python 变量 xy。然后它们将出现在您正在求解的方程式的结果中:

>>> list1 = list('ab')
>>> x, y = map(Symbol, list1)
>>> solve(Eq(x*2 - 5*x + 6 + y, 0), dict=True)
[{a: b/3 + 2}]