Python / Sympy:用不同的值求解方程

时间:2016-12-24 12:08:19

标签: python sympy

我正在尝试解决这三个方程:

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循环,但是有三个变量的可能组合太多,所以我放弃了。

1 个答案:

答案 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)是您用来确定要插入的数值的代理。