SciPy odeint / ODEPACKによる非線形特異ODEの解法


8

私が解決したいレーン・エムデン等温式[PDF、EQを。15.2.9]

d2ψdξ2+2ξdψdξ=eψ

初期状態で

ψ(ξ=0)=0dψdξ|ξ=0=0

SciPyodeint()を使用していますが、ご覧のように、方程式は原点で特異です。ドキュメントには、ODEPACKを使用することが記載されています。

私はすでにの近傍における溶液の級数知っξ=0REFを):

ψ(ξ)ξ26ξ4120+ξ61890

に設定しようとしtcritましたnp.array([0.0])が、機能しませんでした。無効な値に関する警告が表示され、私の解決策はすべてNaNです。たぶん0.01から統合するべきでしょうか?または他の解決策はありますか?


t0>0

1
ξt

ξ

回答:


7

わかりました、この答えは暗闇の中でのショットですが、ここに行きます。

最初に、2次のODEを2つのODEのシステムに変換します。しましょう

φ1=ψ,φ2=ψ˙,

ξ

次に、2次の陰的ODE

ψ¨(ξ)+2ξ1ψ˙(ξ)=eψ(ξ)ψ(0)=0ψ˙(0)=0

1次の明示的なODEとして表すことができます

φ˙1(ξ)=φ2(ξ)φ˙2(ξ)=2ξ1φ2(ξ)+eφ1(ξ)φ1(0)=0φ2(0)=0.

ξ=0ξ0

まず、私たちはそれを知っています

limξ0φ2(ξ)=0,

解が存在すると想定しているため、は微分可能です。つまり、連続である必要があります。ある点での連続関数の限界はその点での値であり、初期条件なので値がわかります。φ2φ2(0)

また、

limξ0eφ1(ξ)=1

同様の理由で; は微分可能であり、連続であり、は初期条件であるため、これを前提としています。φ1φ1(0)=0

最終的に、

limξ02φ2(ξ)ξ=limξ02φ˙2(ξ),

不ロピタルの法則を使用する。0/0

さらに先に進むには、別の仮定を行う必要があります。はで連続です。次にそれに従いますφ˙2ξ=0

limξ02φ˙2(ξ)=2φ2˙(0).

1次ODEに戻り、で右側を評価すると、次のことがわかります。ξ=0

φ˙1(0)=0φ˙2(0)=2φ˙2(0)+1,

そこから、その次の。φ˙2(0)=1/3

この分析を使用してif、で右側の関数のこれらの値を返すステートメントをプラグインすることができます。これにより、特異点を乗り越えることができます。とは言っても、この分析では、連続性に関するいくつかの仮定が必要になる場合と保持されない場合があるため、結果として得られるソリューションを1粒の塩で考えます。ξ=0


ジェフ、多分あなたはとを意味したのですか?私は解答の起点でのべき級数を既に知っていると私は答えに加えました(多分私は以前にそれをしていたはずです)。とにかく、であることが。文言をやってみます。φ1=ψφ2=ψ˙ψ¨(0)=1/3if
astrojuanlu

@ Juanlu001:よかった。間違いを直した。
Geoff Oxberry

あなたは正しかった!それは単純なif節のように単純でした。ありがとうございました!
astrojuanlu 2012年

3

ODEソルバーにより多くのオプションが必要な場合は、CVODEパッケージへのバインディングを実装するAssimuloパッケージ(およびRADAUといくつかの単純なインテグレーター)をご覧ください。


とても貴重なパッケージ、知らなかった!どうもありがとうございました。
astrojuanlu

@GertVdE:これらのインテグレータのいずれかが、ifステートメントを使用してとして右側の適切な制限を埋めることに頼らずに特異点を処理できますか?ξ0
Geoff Oxberry

1
@GeoffOxberry:Sundialsスイート(PythonではAssimuloがラップ)のIDAソルバーを使用すると、ユーザーの推測から始まる一貫した初期値を検索できます。これにより、Juanlu001は最初の推測としてシリーズ拡張から開始し、IDAが正しい(数値的には)IVを解決できるようになります。
GertVdE 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.