Sympy 用辛方法求解线性方程组

Sympy 用辛方法求解线性方程组,sympy,Sympy,我正在学习使用sympy.solvers.solveset.linsolve来解线性方程组。我可以很好地解决这个系统,但是我很难得到分配给变量的结果。它似乎不像我预期的那样自动赋值,而是返回一个包含值元组的单元素集,我必须通过一些愚蠢的扭曲才能得到赋值。这是我的密码: from sympy import symbols, ones from sympy.solvers.solveset import linsolve A= ones(6) A[0,0]=7 for k in range(1,6)

我正在学习使用
sympy.solvers.solveset.linsolve来解线性方程组。我可以很好地解决这个系统,但是我很难得到分配给变量的结果。它似乎不像我预期的那样自动赋值,而是返回一个包含值元组的单元素集,我必须通过一些愚蠢的扭曲才能得到赋值。这是我的密码:

from sympy import symbols, ones
from sympy.solvers.solveset import linsolve
A= ones(6)
A[0,0]=7
for k in range(1,6):
    A[k,k]=6
b=6*ones(6,1)
p1,p2,p3,p4,p5,p6 = symbols('p1 p2 p3 p4 p5 p6')
system = (A,b)
p=linsolve(system,p1,p2,p3,p4,p5,p6)
p1,p2,p3,p4,p5,p6=tuple(p)[0]

当然有一种更具python风格的方法来实现这一点,不是吗?

返回集合是
solveset
模块(linsolve属于该模块)的核心思想。请参阅其中的“为什么不使用dicts作为输出?”。是的,处理起来很尴尬:公开的问题之一是

我通常将
next(iter(…)
应用于solveset及其类似物的输出

您的代码可以通过不单独列出p1、…p6来简化,将其保留为符号元组

syms = symbols('p1:7')
system = (A, b)
p = linsolve(system, syms)
p = next(iter(p))
现在p是元组
(6/13,36/65,36/65,36/65,36/65,36/65,36/65,36/65)


旧的
solve
方法可以直接返回dict,但我不建议使用它来处理线性方程组。此外,Symphy的开发计划是向
solveset
过渡,将
solve
留在后面。

我非常喜欢符号上的提示。看起来这可能正在修复过程中。不幸的是,公共关系已经闲置了一年多,有点混乱。我甚至没有注意到它已经有一年了!我还以为是几天前呢。啊,嗯。