Python 几个波的sympy叠加

Python Sympy superposition of several waves

我们正在尝试通过 sympy 从 Mathematica 切换到 python。不幸的是,sympy 并没有那么强大。我们学生的一项任务是以

形式计算产生的振荡

来自给定的表格

我尝试了 sympy 中的几种常见简化工具,例如 simplify、trigsimp,但没有任何效果。 Sympy 只是简化了每个术语,例如

有谁知道如何使用 sympy 或其他 python 模块解决此任务?

所以我找不到使用 SymPy 自动执行此操作的方法。我什至尝试了 sympy.physics.optics.waves.TWave ,这似乎就是为了这件事。但经过长时间的尝试,我确信该代码中存在错误。该代码中的叠加甚至不是关联的。

所以我们自己解决。我们先把表达式写成a*sin(t) + b*cos(t)的形式。然后我们求解联立方程:a = A * cos(c)b = A * sin(c)。因为这可以预先计算,所以我们这样做。最终答案将是 A*cos(t-c).

这是执行此操作的代码:

from sympy import *

t = symbols('t', real=True)
expr = 2*sin(t+S(3)/10) + 5*cos(t + pi/4) + cos(t - S(31)/10)

d = collect(expr.expand(trig=True), [sin(t), cos(t)], evaluate=False)
a = d[sin(t)]
b = d[cos(t)]
cos_phase = atan(a/b)
amplitude = a / sin(cos_phase)
print(amplitude.evalf() * cos(t - cos_phase.evalf()))

给予

3.50537475229229*cos(t + 0.468638709416397)

绘制这两个图后,它们看起来是正确的。

请注意,上面的代码不适用于 t 的不同频率。