В общем, это невозможно: например, sqrt(x+y)
нельзя разделить на функцию от x от функции y. Но когда факторизация возможна, метод as_independent
может помочь найти ее:
expr = x**2*cos(x)*2/sin(y)/y
temp, with_x = expr.as_independent(x, as_Mul=True)
const, with_y = temp.as_independent(y, as_Mul=True)
print((with_x, with_y, const))
отпечатков (x**2*cos(x), 1/(y*sin(y)), 2)
С подсказкой as_Mul
метод пытается разделить выражение на фактор, который не зависит от заданной переменной, и остальное. Таким образом, первый шаг изолирует термин без x
(называемый temp), от которого второй шаг изолирует термин без y
(постоянный).
Такое можно сделать и для сумм, а не для продуктов, с подсказкой as_Add=True
.