Sympy中cos()高次幂降阶转化的实现方法问询
更新于2023年8月20日
我偶然发现,通过“将余弦乘积展开为和式”的TR8函数,实际上能实现我想要开发的“复杂”表达式的类似功能:

因此TR8似乎能识别cos(x)**n的乘积形式,并将其展开为和/差角的余弦和。不过它单独使用时不会处理平方项,若先对中间结果执行expand再重新应用TR8,就能得到我想要的结果。
由于我的表达式较为复杂,我需要嵌套使用TR8(expand(表达式))直至得到目标结果,因此参考本问题的各类解答提示十分有价值。
我希望找到一种方法,将余弦函数和的幂次展开为多倍角和/差的余弦和。最简单的形式是从和的平方开始,得到二倍角余弦的和,再(通过另一简化步骤)将两个余弦的乘积展开为和角与差角的余弦和:

sympy提供了一组用于三角函数表达式化简/变换的函数,相关文档可参考SymPy官方资料。
其中TR7函数对我的需求很有意义,其描述为“降低余弦幂次(增大角度)”。
但该函数似乎仅对cos()**2有效:


……其他更高次幂的cos也是如此。
查看SymPy的fu.py源码后,原因一目了然:

因此上述参考文档中的描述存在一定误导性。
现在我的问题是:如何将cos(x)**(2*n)拆分为n个cos(x)**2项的乘积?
我已开始研究表达式树相关内容,考虑是否需要解析表达式并将其拆分为cos(x)**2原子,对每个原子单独应用TR7化简,再进行某种形式的展开,最后可能使用TR8完成cos(n*x)*cos(x)乘积的最后一步转换,或类似操作。
希望能得到关于如何解决该问题的建议。
内容的提问来源于stack exchange,提问作者Michele Ancis
相关产品推荐
相关产品推荐

