#python #math #sympy #polynomials
Вопрос:
from sympy import Symbol
x = Symbol('x')
equation = x**2 2**x - 2*x - 5**x 1
Здесь, в этом уравнении, например, полиномиальная часть есть x**2 - 2*x 1
, а неполиномиальная часть есть 2**x - 5**x
.
Учитывая уравнение, как извлечь полиномиальную и неполиномиальную его части?
Ответ №1:
Вы можете использовать этот as_poly
метод для поиска членов, которые являются полиномиальными в данном символе:
In [1]: from sympy import Symbol
...:
...: x = Symbol('x')
...: equation = x**2 2**x - 2*x - 5**x 1
In [2]: poly, nonpoly = [], []
In [3]: for term in Add.make_args(equation):
...: if term.as_poly(x) is not None:
...: poly.append(term)
...: else:
...: nonpoly.append(term)
...:
In [4]: poly
Out[4]:
⎡ 2 ⎤
⎣1, x , -2⋅x⎦
In [5]: nonpoly
Out[5]:
⎡ x x⎤
⎣2 , -5 ⎦
In [6]: Add(*poly)
Out[6]:
2
x - 2⋅x 1
In [7]: Add(*nonpoly)
Out[7]:
x x
2 - 5
https://docs.sympy.org/latest/modules/core.html#sympy.core.expr.Expr.as_poly
Ответ №2:
Сначала разделите все термины,
lst = equation.args
Используйте degree()
функцию в модуле sympy, чтобы найти степень каждого члена lst
. Это дает PolynomialError
, если член не является многочленом.
Ошибка может быть обработана с помощью try ... except
инструкций.