Фильтруйте условия тригонометрического выражения SymPy, сохраняя те с данным коэффициентом - PullRequest
0 голосов
/ 04 сентября 2018

Предположим, у нас есть выражение:

x*sin(y) + y*cos(x) + x*cos(z)

Из приведенного выше выражения я хочу получить новый многочлен, имеющий только члены с коэффициентом x, а именно:

     x*sin(y) + x*cos(z)

или

  x*(sin(y) + cos(z))

Очевидно, что установка y = 0 не является решением, так как x * sin (y) станет 0. Как отфильтровать члены многочлена в SymPy, чтобы выбрать только те члены, у которых есть некоторый коэффициент?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Я думаю, что вы ищете collect.

collect(x*sin(y) + x*cos(z) + y*cos(x), x, evaluate=False)

вернется

{x: sin(y) + cos(z), 1: y*cos(x)}
0 голосов
/ 04 сентября 2018

Начнем с того, что это не тригонометрический полином. Тригонометрические полиномы имеют постоянные коэффициенты перед косинусами и синусами.

С помощью 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 и является непостоянным полиномом. (Предполагая, что вы не хотите включать константы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...