如何使用由sympy线性方程求解器创建的解

时间:2018-12-30 17:54:07

标签: python-3.x sympy

我正在使用sympy求解线性方程组,并且我想在进一步计算中使用其中一种解决方案。首先,我想从生成的字典中为我的线性方程组系统提取特定的解决方案。我尝试了 dict ['key'] ,因为我相信您会正常使用,但确实可以。下面是我尝试运行的代码。

from sympy import symbols, solve

m2,x2a,x2b,x2c,m3,m4,m5,x5a,x5b,x5c = 
symbols('m2,x2a,x2b,x2c,m3,m4,m5,x5a,x5b,x5c')
solution = solve((100-m2-m3,
              .980*m3-.96*(.450*100),
              100*.300-m2*x2a,
              1-x2a-x2b-x2c,
              x2c*m2-.04*(.450*100),
              m2-m4-m5,
              m2*x2b-m4*.06-m5*x5b,
              .940*m4-.97*(x2a*m2),
              m5*x5a-.03*(x2a*m2),
              1-x5a-x5b-x5c),
            [m2,x2a,x2b,x2c,m3,m4,m5,x5a,x5b,x5c], dict=True)
print(solution[0]['m2'])

enter image description here

1 个答案:

答案 0 :(得分:2)

有时候,一个方程或方程组可能有多个解决方案。 这就是为什么sym.solve返回一则字典列表,而不仅仅是一个字典的原因。

请注意,print(solution)以方括号(表示列表)开头:

[{m2: ...}]

因此,要访问第一个(仅在这种情况下)解决方案的m2的值,您将使用

solution[0][m2]

通常,要遍历所有解决方案,可以使用:

for s in solution:
    print(s[m2])

还请注意,该字典使用SymPy符号作为键,而不是字符串。

如果再次遇到类似问题,则可以通过检查.keys属性来调查问题:

In [190]: list(solution[0].keys())
Out[190]: [m2, x2a, x2b, x2c, m3, m4, m5, x5a, x5b, x5c]

如果键是字符串,您会看到['m2', 'x2a', 'x2b', 'x2c', 'm3', 'm4', 'm5', 'x5a', 'x5b', 'x5c']

相关问题