在 sympy 中将触发运算作为 measure() 函数计算到 fu()

Counting trig ops as measure() function to fu() in sympy

如何计算表达式中的三角运算次数?

我有一个 a*sin(x)+b*cos(x) 形式的表达式,我希望 sympy 将其转换为 c*sin(x+phi)

@asmeurer 在 an earlier question about simplifying trig expressions 中发表评论,建议可以调整 fu() 算法以最小化任意度量。

我怀疑如果我将度量设置为表达式中触发操作的数量,我可以减少我的表达式。

下面是获取set函数的方法:

>>> from sympy.functions.elementary.trigonometric import TrigonometricFunction
>>> eq=a*sin(x)+b*cos(x)
>>> len(eq.atoms(TrigonometricFunction))
2

如果您想要此类函数发生的实际次数(多次计算同一函数),您可以尝试自定义函数,例如 sympy.core.exprtools 中的 preorder_traversal,每次注册一个 TrigonometricFunction遇到了