首页 > 解决方案 > 收集相同频率的正弦波

问题描述

我有许多正弦曲线的表达。有些频率是重复的,所以我想收集相同频率的系数。似乎 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)

标签: pythonsympy

解决方案


这是:

>>> 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


推荐阅读