首页 > 解决方案 > 如何使用 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'])

在此处输入图像描述

标签: python-3.xsympy

解决方案


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

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

[{m2: ...}]

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

solution[0][m2]

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

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

还要注意 dict 使用 SymPy Symbols 作为键,而不是字符串。

如果您再次遇到类似的问题,您可以通过检查.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'].


推荐阅读