python - 收集相同频率的正弦波
问题描述
我有许多正弦曲线的表达。有些频率是重复的,所以我想收集相同频率的系数。似乎 collect() 或 factor() 都应该如此,但它们仅适用于简单的表达式,并且在涉及许多变量时会失败。有没有更好的方法来收集条款?有没有办法帮助将 factor() 引导到 collect() 中要操作的变量?我正在尝试将方程式手动简化为特定形式,并且我认为 cse() 在返工方面走得太远了。以下示例:
w, x, y, z = symbols('w x y z')
factor(z*sin(2*pi*x)+y*sin(2*pi*x), deep=True)
(y + z)⋅sin(2⋅π⋅x) #WORKS
factor(z*sin(2*pi*x*w)+y*sin(2*pi*x*w), deep=True)
(y + z)⋅sin(2⋅π⋅w⋅x) #WORKS
factor(z*sin(2*pi*x)+y*sin(2*pi*x)+z*sin(w)+2*y*sin(w), deep=True)
2⋅y⋅sin(w) + y⋅sin(2⋅π⋅x) + z⋅sin(w) + z⋅sin(2⋅π⋅x) # FAILS – expected Expected (2y + z)*sin(w) + (y+z)⋅sin(2⋅π⋅x)
collect(z*sin(2*pi*x)+y*sin(2*pi*x), x)
y⋅sin(2⋅π⋅x) + z⋅sin(2⋅π⋅x) # FAILS expected (y+z)⋅sin(2⋅π⋅x)
collect(z*sin(2*pi*x)+y*sin(2*pi*x)+z*sin(w)+2*y*sin(w), x)
2⋅y⋅sin(w) + y⋅sin(2⋅π⋅x) + z⋅sin(w) + z⋅sin(2⋅π⋅x) #FAILS Expected (2y + z)*sin(w) + (y+z)⋅sin(2⋅π⋅x)
解决方案
这是:
>>> from sympy import *
>>> w, x, y, z = symbols('w x y z')
>>> ex= z*sin(2*pi*x)+y*sin(2*pi*x)+z*sin(w)+2*y*sin(w)
>>> ex
2*y*sin(w) + y*sin(2*pi*x) + z*sin(w) + z*sin(2*pi*x)
>>> collect(ex, [sin(w), sin(2*pi*x)])
(y + z)*sin(2*pi*x) + (2*y + z)*sin(w)
参考:https ://docs.sympy.org/latest/modules/simplify/simplify.html?highlight=collect
推荐阅读
- php - 即使在特定日期没有访问,如何编辑此查询以获得最近 7 天的访问?
- java - 将字节数组转换为带分隔符的十六进制字符串?删除字符串中显示的最后一个字符?
- c++ - ld:未找到架构 x86_64 qt 的符号
- gatsby - Gatsby 开发工作,但构建失败并出现 graphQL 警告
- scala - 在使用 Scala shapeless 的单例类型特性时,如何强制编译器使用窄/单例类型作为隐式参数?
- python - 如何修复基于 Chaco 的绘图应用程序中的奇怪崩溃。?
- python - 如何在 pptx 演示文稿中找到形状的第一行
- php - PHP 数组 foreach 项
- c - 是否可以使用 NASM 创建自定义中断处理程序?
- javascript - 是否可以在 jQuery.each() 中使用同步承诺睡眠?