多项式求解器¶
此模块提供了用于求解线性方程组的函数,这些函数在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。
参见
示例
>>> 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}