2016-12-24 67 views
1

我试图解决这三个方程:的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

我不是100%清楚你期望得到什么,什么你有试过吗?你想告诉sympy'a1','a3'和'c1'的值吗? – doctorlove

+1

如果我理解正确:马克,你想从六个变量中随机选取三个,只给出这三个数值,然后用sympy解决其余三个? –

+0

@DavidZ:是的,这就是我想要做的! –

回答

4

如果我正确地理解了你所问的内容,可以使用Sympy的linsolve函数首先象征性地求解方程,然后用数字替换。关键的一步是告诉linsolve你想要解决哪些变量。我建议使用set s将要解决的变量与要插入值的变量分开。你可以声明变量是这样的:

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)中是不管你做什么,以确定要在堵塞。该数值的代理

+0

嗨,我花了我很长一段时间才完成这项工作,但现在它工作。从随机选择的变量从包含所有变量的元组中移除的部分,我遇到了一些麻烦。出于某种原因,没有任何工作,所以最后,我把这两个集合放在一个列表中,并使用'del'去除这三个变量。非常感谢你的帮助。 –

+0

那么,这绝对不是做这件事的理想方式,但是无论对你而言,我想都是如此。真高兴你做到了。 –