MATLABでODEを使用したステップサイズの選択
こんにちは、私の質問を見てくれてありがとう。これは、以前にphysics.stackexchange.comに投稿した私の質問の更新版です。 現在、2D励起子スピナーBose-Einstein Condensateを研究しており、このシステムの基底状態に興味があります。基底状態に到達する数学的方法は、虚数時間法と呼ばれます。 この方法は、量子力学の時間が虚数に置き換えられる非常に単純な この置換により、システム内の高エネルギー粒子が低エネルギー粒子よりも速く崩壊します。計算のすべてのステップで粒子の数を再正規化すると、最終的に最も低いエネルギーの粒子のシステム(別名)になります。基底状態。t=−iτt=−iτ t = -i \tau 問題の方程式は非線形であり、非線形シュレディンガー方程式と呼ばれ、時にはグロス-ピタエフスキー方程式とも呼ばれます。問題を解決するために、Matlabs ode45を使用しています。これは、システムを時間内に進化させ、最終的に基底状態に到達します。 注意!非線形シュレディンガー方程式には、ラプラシアンおよびその他の空間の微分項が含まれます。これらはすべて高速フーリエ変換を使用して解決されます。最後に、時間ODEのみがあります。* 私の問題と質問:計算はからにます。ode45はforループに入れられるため、巨大なベクトルを同時に計算しません。最初のラウンドはode45(odefun、)で、次にからます。ここで、タイムステップは私の問題です。タイムステップの選択が異なると、基底状態のソリューションも異なります。どのタイムステップが「最も」正しい基底状態を与えるかを判断する方法がわかりません。t0t0t_0tftft_f[ T 0、T 0 + Δ / 2 、T 0 + Δ ] 、Y 、... 、T 0 + Δ Δ[t0,…,tf][t0,…,tf][t_0,\dots,t_f][t0,t0+Δ/2,t0+Δ],y,…[t0,t0+Δ/2,t0+Δ],y,…[t_0, t_0+\Delta/2, t_0 + \Delta],y,\dotst0+Δt0+Δt_0 + \DeltaΔΔ\Delta 私の試み:このスキームでは、大きな時間ステップにより元の粒子に再正規化される前に多数の粒子が崩壊し、小さな時間ステップにより再正規化される前に少量の粒子が崩壊します。私の最初の考えは、小さな時間ステップがより正確な解決策を提供するはずであるが、それは反対のように思われるということです。 私は数値の専門家ではないので、ode45の選択は単純に任意でした。ode113でも同じことがわかります。:( 誰もこの問題について何か考えを持っていますか。追加の詳細が必要かどうかを教えてください。 ありがとうございました。 更新1: 仮想時間法とODEを研究しています。タイムステップが十分に小さくないと、全体が不安定になります。これは、私の非線形方程式が硬く、理解することから物事をはるかに難しくするのではないかと思うようになります。最新情報をお届けします。 更新2: 修正済み:問題は実際にODEの外部で正規化されていました。正規化がodefun内に保持される場合、ODEは、「外部」タイムステップの異なる選択に対して同じ結果を返します。同僚が古いコードを見せてくれたので、odefunに1行だけ追加しました。 function y_out = odefun(t,y_in,...variables...) …