Как извлечь полиномиальную и неполиномиальную части из уравнения симпатии?

#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 инструкций.