首页 > 解决方案 > 三角表达式中的 Sympy Collect()

问题描述

我是 sympy 的新手,在三角函数中使用 collect() 时遇到问题。我没有使用 simple() 或 trigsimp() 因为我的实际表达式更复杂,而且它们过于简化了。我正在尝试将其逐步简化为特定形式。为什么不 collect(sin(x y+x z),x) 对 x 项进行分组?谢谢。

x, y, z = symbols('x y z')

print(collect(sin(2*x + 3*x),x))
sin(5*x)  #Works

print(collect(x*y + x*z, x))
x*(y + z)  #Works

print(collect(sin(x*y+x*z),x))
sin(x*y + x*z)  #Doesn’t work - Expected sin(x(y+z))

标签: pythonsympy

解决方案


如果您想将函数应用于表达式的参数并且该函数没有deep选项,您可以尝试创建一个 lambda,将函数应用于任意表达式并将其与bottom_up:

>>> from sympy.abc import *
>>> from sympy import *
>>> bottom_up(sin(x+x*y), lambda e: collect(e, x))
sin(x*(y + 1))

有针对性的替换也可以:

>>> sin(x+x*y).replace(lambda e: e.is_Add and e.has(x), lambda e: collect(e,x))
sin(x*(y + 1))

推荐阅读