我正在尝试解决这三个方程:
a1 + a2 = b1
a2 + a3 = b2
b1 + b2 = c1
我生成随机选择的三个变量的值(不允许组合b1,b2和c1),所以我可能有a1 = 5,a3 = 10,c1 = 100,所以我可以用sympy解决这个等式
我的问题是我似乎无法将随机输入传输到代码的sympy部分并循环遍历它。
a1, a2, a3, b1, b2, c1 = symbols('a1 a2 a3 b1 b2 c1')
solve([a1.subs(a1, 5) + a2 - b1, a2 + a3.subs (a3, 10) - b2, b1 + b2 - c1.subs (c1, 100)], (a1, a2, a3, b1, b2, c1))
当我假设我的例子中提到的a1,a3和c1时,这是有效的,但我事先随机选择了这些变量。我试图根据选择的变量创建for循环,但是有三个变量的可能组合太多,所以我放弃了。
答案 0 :(得分:4)
如果我已经正确理解了您的要求,您可以使用Sympy的linsolve
函数首先象征性地求解方程,然后用数字替换。关键步骤是告诉linsolve
您要解决哪些变量。我建议使用set
来将您要解决的变量与要为其插入值的变量分开。您可以声明您的变量:
all_vars = symbols('a1 a2 a3 b1 b2 c1')
# randomly choose which variables will have values
plug_in_for_vars = ...
solve_for_vars = tuple(set(all_vars) - set(plug_in_for_vars))
然后你可以定义你的方程式
equations = [a1 + a2 - b1, a2 + a3 - b2, b1 + b2 - c1]
并将它们和所选变量传递给linsolve
solution = linsolve(equations, solve_for_vars)
然后您可以插入所选的值。
solution.subs({variable: value(variable) for variable in plug_in_for_vars})
当然value(variable)
是您用来确定要插入的数值的代理。