我有一个表达式:sin(x)+sin(y)
有一个著名的三角恒等式可以把它表示为sin和cos的乘积。
是否有一种方法让sympy应用这个恒等式?
simplify
和trigsimp
都无济于事。
我有一个表达式:sin(x)+sin(y)
有一个著名的三角恒等式可以把它表示为sin和cos的乘积。
是否有一种方法让sympy应用这个恒等式?
simplify
和trigsimp
都无济于事。
trigsimp
,顾名思义,简化三角函数表达式。正如Aristocrates所指出的那样,sin(x) + sin(y)
比2*sin((x + y)/2)*cos((x - y)/2)
更简单。
trigsimp
在内部使用了基于Fu等人的论文算法,对各种三角恒等式进行模式匹配。如果您查看源代码,所有恒等式都写在各自的函数中(函数的命名是按照Fu论文中的章节)。
浏览文件顶部的简化列表,你可能想要的是:
TR9 - contract sums of sin-cos to products
测试一下,看起来它可以工作
In [1]: from sympy.simplify.fu import TR9
In [2]: TR9(sin(x) + sin(y))
Out[2]:
⎛x y⎞ ⎛x y⎞
2⋅sin⎜─ + ─⎟⋅cos⎜─ - ─⎟
⎝2 2⎠ ⎝2 2⎠
我们最终希望将这些因素分解成更加用户友好的函数,但是目前为止,尽管所有的函数名称都不是特别容易记忆,fu.py
文件已经被很好地记录了。
fu
函数还有一个更高级别的接口。您可以提供一个“度量”函数,它允许您重新定义哪些表达式是“更简单”的。 - asmeurer似乎没有定义单个函数。您需要像@asmeurer所说的那样使用各个Fu函数。我可以提供的是一个指向官方文档的链接,其中解释了这一点:https://docs.sympy.org/dev/modules/simplify/fu.html
trigsimp
似乎可以在另一个方向上工作,也就是说,trigsimp(2*sin( (x + y)/2 ) * cos ( (x - y)/2 ))
可以得到sin(x) + sin(y)
。也许 sympy 将sin(x) + sin(y)
解释为“更简化”的形式。你知道在 sympy 中执行三角函数操作的其他方法吗? - Nick Meyerexpand_trig(sin(x) + sin(y))
似乎什么也没做。 - Nick Meyer