You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sympy中cos()高次幂降阶转化的实现方法问询

更新于2023年8月20日

我偶然发现,通过“将余弦乘积展开为和式”的TR8函数,实际上能实现我想要开发的“复杂”表达式的类似功能:

TR8函数展开效果

因此TR8似乎能识别cos(x)**n的乘积形式,并将其展开为和/差角的余弦和。不过它单独使用时不会处理平方项,若先对中间结果执行expand再重新应用TR8,就能得到我想要的结果。

由于我的表达式较为复杂,我需要嵌套使用TR8(expand(表达式))直至得到目标结果,因此参考本问题的各类解答提示十分有价值。


我希望找到一种方法,将余弦函数和的幂次展开为多倍角和/差的余弦和。最简单的形式是从和的平方开始,得到二倍角余弦的和,再(通过另一简化步骤)将两个余弦的乘积展开为和角与差角的余弦和:

余弦和平方展开示例

sympy提供了一组用于三角函数表达式化简/变换的函数,相关文档可参考SymPy官方资料。

其中TR7函数对我的需求很有意义,其描述为“降低余弦幂次(增大角度)”。

但该函数似乎仅对cos()**2有效:

TR7处理cos²的效果

TR7处理高次余弦幂无效

……其他更高次幂的cos也是如此。

查看SymPy的fu.py源码后,原因一目了然:

TR7源码片段

因此上述参考文档中的描述存在一定误导性。

现在我的问题是:如何将cos(x)**(2*n)拆分为n个cos(x)**2项的乘积?

我已开始研究表达式树相关内容,考虑是否需要解析表达式并将其拆分为cos(x)**2原子,对每个原子单独应用TR7化简,再进行某种形式的展开,最后可能使用TR8完成cos(n*x)*cos(x)乘积的最后一步转换,或类似操作。

希望能得到关于如何解决该问题的建议。

内容的提问来源于stack exchange,提问作者Michele Ancis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:16:02