MATLABでODEを使用したステップサイズの選択


12

こんにちは、私の質問を見てくれてありがとう。これは、以前にphysics.stackexchange.comに投稿した私の質問の更新版です。

現在、2D励起子スピナーBose-Einstein Condensateを研究しており、このシステムの基底状態に興味があります。基底状態に到達する数学的方法は、虚数時間法と呼ばれます。

この方法は、量子力学の時間が虚数に置き換えられる非常に単純な この置換により、システム内の高エネルギー粒子が低エネルギー粒子よりも速く崩壊します。計算のすべてのステップで粒子の数を再正規化すると、最終的に最も低いエネルギーの粒子のシステム(別名)になります。基底状態。

t=iτ

問題の方程式は非線形であり、非線形シュレディンガー方程式と呼ばれ、時にはグロス-ピタエフスキー方程式とも呼ばれます。問題を解決するために、Matlabs ode45を使用しています。これは、システムを時間内に進化させ、最終的に基底状態に到達します。

  • 注意!非線形シュレディンガー方程式には、ラプラシアンおよびその他の空間の微分項が含まれます。これらはすべて高速フーリエ変換を使用して解決されます。最後に、時間ODEのみがあります。*

私の問題と質問:計算はからにます。ode45はforループに入れられるため、巨大なベクトルを同時に計算しません。最初のラウンドはode45(odefun、)で、次にからます。ここで、タイムステップは私の問題です。タイムステップの選択が異なると、基底状態のソリューションも異なります。どのタイムステップが「最も」正しい基底状態を与えるかを判断する方法がわかりません。t0tf[ T 0T 0 + Δ / 2 T 0 + Δ ] Y ... 、T 0 + Δ Δ[t0,,tf][t0,t0+Δ/2,t0+Δ],y,t0+ΔΔ

私の試み:このスキームでは、大きな時間ステップにより元の粒子に再正規化される前に多数の粒子が崩壊し、小さな時間ステップにより再正規化される前に少量の粒子が崩壊します。私の最初の考えは、小さな時間ステップがより正確な解決策を提供するはずであるが、それは反対のように思われるということです。

私は数値の専門家ではないので、ode45の選択は単純に任意でした。ode113でも同じことがわかります。:(

誰もこの問題について何か考えを持っていますか。追加の詳細が必要かどうかを教えてください。

ありがとうございました。

更新1: 仮想時間法とODEを研究しています。タイムステップが十分に小さくないと、全体が不安定になります。これは、私の非線形方程式が硬く、理解することから物事をはるかに難しくするのではないかと思うようになります。最新情報をお届けします。

更新2: 修正済み:問題は実際にODEの外部で正規化されていました。正規化がodefun内に保持される場合、ODEは、「外部」タイムステップの異なる選択に対して同じ結果を返します。同僚が古いコードを見せてくれたので、odefunに1行だけ追加しました。

function y_out = odefun(t,y_in,...variables...) 

    ...
    [ Nonlinear equations evaluated ]  
    ...


    y_out = y_out + 0.1*y_in*(N0-Ntemp) ;
end

最後の行は、現在の粒子数(Ntemp)とシステムが保持する粒子数(N0)の差を計算します。パーティクルの一部が出力に戻されるため、すべてのパーティクルが減衰するのではなく、システム内のパーティクル数が安定します。

また、問題の次元性と、ODEのタイムステップとしてピコ秒またはナノ秒を使用する際のいくつかの違いについて、新しい質問を投げかけます。

皆さん、ありがとうございました。:)


3
基本的な問題は、ode45()等間隔のステップを踏むような適応方法を強制的に使用していることです。なぜ、正確に、「巨大なベクトル」の生成を避けているのですか?等間隔の点がどうしても必要な場合はode45()、通常どおりに進めてから、補間を使用してください。
JM

うーん...これは問題かもしれない。これらの固定ステップの起源は、どこかで粒子がすべて減衰する前に粒子の数を再正規化する必要があったことです。しかし、odefunに正規化を入れて「巨大な時間ベクトル」を使用することでこれを行うことができます。また、ode45への入力は4 * 129 * 129の数値です。タイムステップを使用しないと、メモリが足りないのではないかと心配しました。y

メモリが機能ode45()する場合、特定のしきい値よりも大きいステップを保持できるオプションが必要です。あなたはそれを調べたいかもしれません。
JM

1
答えは、ローカルエラーの推定値を使用することです。ODE45には1つが組み込まれているため、それを使用するのが最も簡単ですが、代わりに独自のコードを作成することもできます。
デビッドケッチャソン

1
0.11/時間αtNtN0t

回答:


4

MATLABコードを投稿しなかったため、どのようにode45を呼び出しているのかわかりません。ode45を呼び出すたびにtspanベクトル(2番目の引数)を変更していると思います。最初に理解することは、tspanベクトルがode45で使用されるタイムステップに(ほとんど)影響を与えないことです。tspanベクトルを使用すると、積分の時間範囲と出力が必要な時間をode45に渡すことができます。ode45のRunga-Kuttaアルゴリズムで使用されるタイムステップは、所定の精度を達成するために内部的に調整されます。この精度を制御する2つのパラメーターは、ode45に渡されるオプション構造体のRelTolとAbsTolです。それらには合理的なデフォルトがあり、あなたはこれらについて言及しなかったので、私はあなたがそれらを変更しなかったと仮定しています。

通常のode45タイムステップには「ほとんど」影響がないと述べました。ode45がとる時間ステップに比べて非常に短い時間間隔で出力を要求している場合、出力要求を満たすために時間ステップを減らす必要があります。これがJMが進行中であると想定していることだと思います。なぜ非常に多くの出力時​​間でソリューションが必要なのですか?通常、滑らかなプロットを生成するのに十分な時間で出力を要求するだけで十分です。

表示されているソリューションの変更に関しては、RelTolとAbsTolのデフォルト値は問題に適切でない可能性があります。ode45のループを1回の呼び出しで置き換え、ある程度の妥当な回数で出力を要求し、収束したソリューションが得られるまでRelTolとAbsTolの小さい値で実験することをお勧めします。


答えてくれてありがとう。私が非常に多くの出力時​​間でソリューションを必要とした理由は、波動関数が定期的に正規化されていない場合、すべてが減衰し、システムが空になるためです。そのため、各tspanベクトルの後に再正規化できるように、ode45を小さなtspanベクトルを持つループに入れました。

2

非線形シュレディンガー方程式は、よく非線形であるため、多数の定常状態を持つことができ、その一部は安定している可能性があります。物理的な現実では、1つの特定の状態から始まり、システムは確定的に1つの最終状態に進化します。数値スキームが異なる離散化(タイムステップ)に対して異なる結果を与える場合、これは離散化の基本的な欠陥です。コードを確認してください。

ψ0

dψdt=Fψ
Fψ0=0。
Gψ=ΩEψ
EFψ=0EψEψ=|ψ|4

はい。出力ソリューションの密度プロファイルをプロットします。長時間変化しない場合、基本的に進化が止まり、定常状態に達したと仮定します。しかし、波動関数は(+ 2、+ 1、-1、-2)スピン成分を持つスピナーであるため、エネルギー密度を調べることが役立つかどうかはわかりません。各成分を統合しても凝縮水のエネルギーが分かるとは思いませんが、基底状態になったとき、エネルギー密度は定常であり、したがって時間は一定でなければなりません。これは正しい解の手がかりです。

1

問題が解決しました:

正規化は、ODEで評価される関数の一部である必要があります。多くのステップでODEを分割し、それらを正規化すると、一見数値的に不安定になり、ODEが分割される時間間隔に応じて異なる結果が生成されます。(詳細については、問題の編集2を参照してください。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.