多项式求解器

此模块提供了用于求解线性方程组的函数,这些函数在sympy内部使用。

低级线性系统求解器。

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

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

参数:
eqs: list[PolyElement]

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

环: 多项式环

从中提取方程的多项式环。这个环的生成元是待求解的未知数,而环的域是方程系统系数所在的域。

_raw: bool

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

返回:
None 如果系统没有解。
dict[Symbol, Expr] 如果 _raw=False
dict[Symbol, DomainElement] 如果 _raw=True。

参见

sympy_eqs_to_ring

准备 solve_lin_sys 的输入。

linsolve

linsolve 在内部使用 solve_lin_sys

sympy.solvers.solvers.solve

solve 在内部使用 solve_lin_sys

示例

>>> 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.polys.solvers.eqs_to_matrix(eqs_coeffs, eqs_rhs, gens, domain)[源代码][源代码]

从字典格式的线性方程中获取矩阵。

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

方程的左侧是符号到系数的映射字典,其中系数是 DomainElement 的实例。

eqs_rhs: list[DomainElements]

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

gens: list[Symbol]

方程组中的未知数。

域: 域

lhs 和 rhs 系数的域。

返回:
系统的增广矩阵表示为 DomainMatrix。

参见

solve_lin_sys

内部使用 eqs_to_matrix()

示例

>>> 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)
sympy.polys.solvers.sympy_eqs_to_ring(eqs, symbols)[源代码][源代码]

将方程组从 Expr 转换为 PolyRing

参数:
eqs: Expr 列表

一系列作为 Expr 实例的方程

符号: 符号列表

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

返回:
Tuple[List[PolyElement], Ring]: 作为 PolyElement 实例的方程
以及表示每个方程的多项式环。

示例

>>> 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)[源代码][源代码]

从 PolynomialRing 系数字典中求解线性系统

参见

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
>>> 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}
sympy.polys.solvers._solve_lin_sys_component(
eqs_coeffs,
eqs_rhs,
ring,
)[源代码][源代码]

从 PolynomialRing 系数字典中求解线性系统

参见

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}