【问题标题】:How to use solutions created by sympy's linear equation solver如何使用 sympy 的线性方程求解器创建的解决方案
【发布时间】:2018-12-30 17:54:07
【问题描述】:

我正在使用 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

【问题讨论】:

  • 请以文本形式发布代码。它可以帮助我们快速重现您的情况。

标签: python-3.x sympy


【解决方案1】:

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

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

[{m2: ...}]

因此,要访问第一个(并且仅在本例中)解决方案的 m2 的值,您可以使用

solution[0][m2]

一般来说,要遍历所有解决方案,您可以使用:

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

还要注意 dict 使用 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']

【讨论】:

  • 抱歉,我发布了更新的代码并运行了它。但是,即使“m2”应该在我的字典中,我也会遇到关键错误。
  • 啊,字典使用 SymPy 符号作为键。所以使用solution[0][m2] 而不是solution[0]['m2']
猜你喜欢
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 2017-05-29
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
相关资源
最近更新 更多