同情未知的任务
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 行中,您要使用变量 x
和 y
。您可以查看前面几行,看看您从未定义过 x
(它必须在 =
的 lhs 上)。这将纠正这种情况:
>>> x, y = map(Symbol, list1)
就字符串而言,list1
中的内容无关紧要。他们甚至可以是 ['a', 'b']
。无论它们是什么,它们都将用于创建 SymPy 符号,并且它们将被分配给 Python 变量 x
和 y
。然后它们将出现在您正在求解的方程式的结果中:
>>> list1 = list('ab')
>>> x, y = map(Symbol, list1)
>>> solve(Eq(x*2 - 5*x + 6 + y, 0), dict=True)
[{a: b/3 + 2}]
我正在尝试创建一个 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 行中,您要使用变量 x
和 y
。您可以查看前面几行,看看您从未定义过 x
(它必须在 =
的 lhs 上)。这将纠正这种情况:
>>> x, y = map(Symbol, list1)
就字符串而言,list1
中的内容无关紧要。他们甚至可以是 ['a', 'b']
。无论它们是什么,它们都将用于创建 SymPy 符号,并且它们将被分配给 Python 变量 x
和 y
。然后它们将出现在您正在求解的方程式的结果中:
>>> list1 = list('ab')
>>> x, y = map(Symbol, list1)
>>> solve(Eq(x*2 - 5*x + 6 + y, 0), dict=True)
[{a: b/3 + 2}]