多解算器#

本模块提供用于求解sympy内部使用的线性方程组的函数。

低阶线性系统解算器。

sympy.polys.solvers.solve_lin_sys(eqs, ring, _raw=True)[源代码]#

从多项式环求解线性方程组

参数:

[eqs: list[PolyElement]]

作为多项式环的元素来求解的线性方程组(假设等于零)。

环:多项式环

The polynomial ring from which eqs are drawn. The generators of this ring are the unknowns to be solved for and the domain of the ring is the domain of the coefficients of the system of equations.

_raw: bool

如果 _raw 如果为False,则返回字典中的键和值的类型将为Expr(并且字段的单位将从键中移除),否则将返回低级poly类型,例如PolyElement:PythonRational。

返回:

None 如果系统没有解决方案。

双关语 [符号,表达式] 如果_raw=False

双关语 [符号,域元素] 如果_raw=True。

解释

求解作为多项式环的多元实例给出的线性方程组。基本算法是利用DomainElement的实例实现的,它比 Expr 对于最常见的输入。

虽然这是一个公共功能,但主要用于内部使用,因此其接口不一定方便。建议用户使用 sympy.solvers.solveset.linsolve() 函数(内部使用此函数)。

实例

>>> from sympy import symbols
>>> from sympy.polys.solvers import solve_lin_sys, sympy_eqs_to_ring
>>> x, y = symbols('x, y')
>>> eqs = [x - y, x + y - 2]
>>> eqs_ring, ring = sympy_eqs_to_ring(eqs, [x, y])
>>> solve_lin_sys(eqs_ring, ring)
{y: 1, x: 1}

经过 _raw=False 除了键是 Expr 而不是低层次的多边形类型。

>>> solve_lin_sys(eqs_ring, ring, _raw=False)
{x: 1, y: 1}

参见

sympy_eqs_to_ring

准备输入到 solve_lin_sys .

linsolve

linsolve 使用 solve_lin_sys 内部的。

sympy.solvers.solvers.solve

solve 使用 solve_lin_sys 内部的。

sympy.polys.solvers.eqs_to_matrix(eqs_coeffs, eqs_rhs, gens, domain)[源代码]#

从dict格式的线性方程组中得到矩阵。

参数:

[eqs_coeffs: list[dict[Symbol, DomainElement]]]

等式的左边是从符号映射到系数的dicts,其中系数是DomainElement的实例。

[eqs_rhs: list[DomainElements]]

作为DomainElement实例的方程的右侧。

[gens: list[Symbol]]

方程组中的未知数。

域:域

lhs和rhs的系数域。

返回:

系统作为域矩阵的增广矩阵表示。

解释

得到一组线性方程组的矩阵表示,该方程组用低阶域元系数dicts表示。这是一个 内部的 由solve_lin_sys使用的函数。

实例

>>> from sympy import symbols, ZZ
>>> from sympy.polys.solvers import eqs_to_matrix
>>> x, y = symbols('x, y')
>>> eqs_coeff = [{x:ZZ(1), y:ZZ(1)}, {x:ZZ(1), y:ZZ(-1)}]
>>> eqs_rhs = [ZZ(0), ZZ(-1)]
>>> eqs_to_matrix(eqs_coeff, eqs_rhs, [x, y], ZZ)
DomainMatrix([[1, 1, 0], [1, -1, 1]], (2, 3), ZZ)

参见

solve_lin_sys

使用 eqs_to_matrix() 内部

sympy.polys.solvers.sympy_eqs_to_ring(eqs, symbols)[源代码]#

将方程组从表达式转换为多环

参数:

公式:表达式列表

表达式实例的表达式列表

符号:符号列表

方程组中未知符号的列表。

返回:

元组 [列表[多元元素] ,Ring]:作为多元元素实例的方程

以及每个方程在其中表示的多项式环。

解释

高级功能,如 solve 期望Expr作为输入,但可以使用 solve_lin_sys 内部。此函数用于从 Expr 对象使用的低级多边形类型 solve_lin_sys 功能。

实例

>>> from sympy import symbols
>>> from sympy.polys.solvers import sympy_eqs_to_ring
>>> a, x, y = symbols('a, x, y')
>>> eqs = [x-y, x+a*y]
>>> eqs_ring, ring = sympy_eqs_to_ring(eqs, [x, y])
>>> eqs_ring
[x - y, x + a*y]
>>> type(eqs_ring[0])
<class 'sympy.polys.rings.PolyElement'>
>>> ring
ZZ(a)[x,y]

用这种形式的方程,可以将它们传递给 solve_lin_sys

>>> from sympy.polys.solvers import solve_lin_sys
>>> solve_lin_sys(eqs_ring, ring)
{y: 0, x: 0}
sympy.polys.solvers._solve_lin_sys(eqs_coeffs, eqs_rhs, ring)[源代码]#

用多项式系数的dict解线性方程组

解释

这是一个 内部的 使用的函数 solve_lin_sys() 方程经过预处理后。此功能的作用是将系统拆分为连接的组件,并将这些组件传递给 _solve_lin_sys_component() .

实例

\(x-y=0\)\(x+y=2\)设置一个系统,然后求解:

>>> from sympy import symbols, sring
>>> from sympy.polys.solvers import _solve_lin_sys
>>> x, y = symbols('x, y')
>>> R, (xr, yr) = sring([x, y], [x, y])
>>> eqs = [{xr:R.one, yr:-R.one}, {xr:R.one, yr:R.one}]
>>> eqs_rhs = [R.zero, -2*R.one]
>>> _solve_lin_sys(eqs, eqs_rhs, R)
{y: 1, x: 1}

参见

solve_lin_sys

此函数由内部使用 solve_lin_sys() .

sympy.polys.solvers._solve_lin_sys_component(eqs_coeffs, eqs_rhs, ring)[源代码]#

用多项式系数的dict解线性方程组

解释

这是一个 内部的 使用的函数 solve_lin_sys() 方程经过预处理后。之后 _solve_lin_sys() 将系统拆分为多个连接的组件此函数为每个组件调用。方程组的求解采用高斯-乔丹消元法,除法后进行反代换。

实例

\(x-y=0\)\(x+y=2\)设置一个系统,然后求解:

>>> from sympy import symbols, sring
>>> from sympy.polys.solvers import _solve_lin_sys_component
>>> x, y = symbols('x, y')
>>> R, (xr, yr) = sring([x, y], [x, y])
>>> eqs = [{xr:R.one, yr:-R.one}, {xr:R.one, yr:R.one}]
>>> eqs_rhs = [R.zero, -2*R.one]
>>> _solve_lin_sys_component(eqs, eqs_rhs, R)
{y: 1, x: 1}

参见

solve_lin_sys

此函数由内部使用 solve_lin_sys() .