最近は、Sympy を使って 1 自由度系のショックスペクトルをやり直そうとしています。この問題は、関数の最大値を見つけるために縮小できます。以下は、どうすればよいか分からない2つのケースです。
最初のものは
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
次のような関数と定数です。
したがって、問題は最終プレゼンテーションをどのように取得するかです。
2つ目は少し難しいかもしれません。この問題は、 の最大値を見つけるように縮小できます。f=sin(pi*t/t_r)-T/2/t_r*sin(2*pi/T*t)
ここでt_r
、 とT
は 2 つのパラメーターです。t_r
との比率がT
変化するとき、異なるピークに位置する最大値。そして、Sympy でそれを解決する方法が見つかりません。なにか提案を?答えは次の図で表すことができます。