这些天我正在尝试使用 Sympy 重做单自由度系统的冲击谱。问题可以归约以找到函数的最大值。以下是我不知道该怎么做的两种情况。
第一个是
tau,t,t_r,omega,p0=symbols('tau,t,t_r,omega,p0',positive=True)
h=expand(sin(omega*(t-tau)))
f=simplify(integrate(p0*tau/t_r*h,(tau,0,t_r))+integrate(p0*h,(tau,t_r,t)))
f
最终目标是获得(变量为t
)的最大绝对值。直接的方法是
df=diff(f,t)
sln=solve(simplify(df),t)
simplify(f.subs(t,sln[1]))
这是结果,我尝试了很多方法,但我无法进一步简化。
因此,我尝试了另一种方法。因为我需要最大绝对值和最大的位置abs(f)
发生在平方的同一位置f
,所以我们可以先计算平方f
。
df=expand_trig(diff(expand(f)**2,t))
sln=solve(df,t)
simplify(f.subs(t,sln[2]))
似乎答案几乎相同,只是形式不同。
预期的答案是一个sinc
函数加上一个常量,如下所示:
因此,问题是如何获得最终呈现。
第二个可能有点难。问题可以归结为找到 的最大值f=sin(pi*t/t_r)-T/2/t_r*sin(2*pi/T*t)
,其中t_r
和T
是两个参数。t_r
当和的比值发生变化时,最大值位于不同的峰值T
。而且我找不到在 Sympy 中解决它的方法。有什么建议吗?答案可以用下图表示。