Начнем с того, что это не тригонометрический полином. Тригонометрические полиномы имеют постоянные коэффициенты перед косинусами и синусами.
С помощью expr.coeff(x)
вы можете получить условия, которые имеют x
в качестве фактора: это sin(y) + cos(z)
.
Но если выражение было x**3*sin(y) + y*cos(x) + x*cos(z)
, тогда будет возвращено только cos(z)
. Может быть, это то, что вы хотите. Но если желаемый результат для этого примера x**3*sin(y) + x*cos(z)
, тогда используйте
Add(*[v for v in expr.args if v.is_polynomial(x) and v.has(x)])
Логика состоит в том, чтобы фильтровать кортеж слагаемых expr.args
по условиям, что термин является полиномом в x
и является непостоянным полиномом. (Предполагая, что вы не хотите включать константы).