5

Pythonで解きたい二次微分方程式があります。問題は、変数の 1 つに初期条件0がなく、無限大の値しかないことです。どのパラメーターを指定する必要があるか教えてもらえますscipy.integrate.odeintか? 解決できますか?

式: ここに画像の説明を入力

Theta は、時間に関して見つける必要があります。その一次導関数は でゼロに等しくなりますt=0。theta は不明t=0ですが、十分に大きな時間でゼロになります。残りはすべてわかっています。近似I値をゼロに設定できるため、二次導関数を削除して問題を簡単にすることができます。

4

1 に答える 1

4

これは完全な答えにはほど遠いですが、OPのリクエストに応じてここに投稿されています。

コメントで説明した方法は、いわゆるシューティング法であり、境界値問題を初期値問題に変換できます。便宜上、関数の名前thetay. z1 = y方程式を数値的に解くには、まず、2 つの補助関数とを使用して、それを一次系に変換しz2 = y'ます。したがって、現在の方程式

I y'' + g y' + k y = f(y, t)

システムとして書き直されます

z1' = z2
z2' = f(z1, t) - g z2 - k z1

そしてあなたの境界条件は

z1(inf) = 0
z2(0) = 0

最初に、新しいベクトル関数の導関数を計算する関数を設定します。

def deriv(z, t) :
    return np.array([z[1],
                     f(z[0], t) - g * z[1] - k * z[0]])

条件があれば、 と の間でz1[0] = aこれを数値的に解くことができ、最後の時間のの値を次のように取得できます。t = 0t = 1000y

def y_at_inf(a) :
    return scipy.integrate.odeint(deriv, np.array([a, 0]),
                                  np.linspace(0, 1000, 10000))[0][-1, 0]

だから今、私たちが知る必要があるのは、私たちのかわいそうな人の無限大であるの値aが、y = 0t = 1000

a = scipy.optimize.root(y_at_inf, [1])
于 2013-01-22T05:39:01.160 に答える