目次
| ≪ Sine-Gordon方程式 3 | ALL | ゴーオンジャーになる日々 ≫ |
シュレディンガー方程式の数値計算 その4
2007年9月13日の記事「シュレディンガー方程式の数値計算 その3」で考えた事を確認する時間が持てたのでその報告をしておこうと思う。 要点は二つ
(1)励起状態のエネルギーが精度良く求まらないのは波動関数を評価するxの値が小さすぎる事が原因であった。 前回のプログラムではx=3(プログラム中ではmpoint=3という箇所)で波動関数を求めてその振舞いからエネルギー固有値を決定していたが、今回はx=10で評価することにした。 その結果エネルギー固有値の誤差が小さくなった。
(2)原点で初期条件を与えてx>0での波動関数を求める際のNDSolveの精度に関して。
マスマティカのデェフォルトの設定ではあまり精度が良くないが、AccuracyGoalとPrecisionGoalをいじればこの問題は解決する。その際、エラーメッセージがでてWorkingPrecisionも同時に上げることを要求される場合もある。 ところがあまり精度を上げると、私の書いたschrodinger codeでは計算時間がかかり過ぎる。 ルンゲ・クッタによる波動関数の解法はエネルギー固有値を一定を刻み幅で変えながら何度も繰り返すために、一回のルンゲ・クッタに時間がかかりすぎると辛い。
結果的にルンゲ・クッタの精度は本質じゃなかったのでAccuracyGoal->10,PrecisionGoal->10で設定しておけば十分なようだ。
この2点を改善し、調和振動子の数値計算のやり直してみた。 出力が以下。
と入力すると、以下の出力が得られます。







出力を見てもらえば分かりますが、エネルギー固有値は0.1%以上の精度で求まっています。
また図の出力でx軸の範囲を広げておきました。 この図からもわかりますが、偶関数の第一励起状態であるn=2の波動関数はx=3(前回の波動関数評価点)ではまだxが十分大きいとは見なせず、これが前回のエネルギーの精度が悪かった原因です。 図からx=4ならば漸近点と見なせそうです(ちなみにプログラムではx=10での波動関数評価してエネルギー固有値を求めています)。
これでプログラムのバグは取れたと思うので、次はポテンシャルを変えて遊んでみたいと思っています。因みに波動関数を精度良く求めるnumerov法のプログラムの作りました。numerov法での誤差はデフォルトでxの刻みの6乗で、計算時間も短いようなのでそのうちschrodingerのcodeもnumerov法に変更したいと思います。
(1)励起状態のエネルギーが精度良く求まらないのは波動関数を評価するxの値が小さすぎる事が原因であった。 前回のプログラムではx=3(プログラム中ではmpoint=3という箇所)で波動関数を求めてその振舞いからエネルギー固有値を決定していたが、今回はx=10で評価することにした。 その結果エネルギー固有値の誤差が小さくなった。
(2)原点で初期条件を与えてx>0での波動関数を求める際のNDSolveの精度に関して。
マスマティカのデェフォルトの設定ではあまり精度が良くないが、AccuracyGoalとPrecisionGoalをいじればこの問題は解決する。その際、エラーメッセージがでてWorkingPrecisionも同時に上げることを要求される場合もある。 ところがあまり精度を上げると、私の書いたschrodinger codeでは計算時間がかかり過ぎる。 ルンゲ・クッタによる波動関数の解法はエネルギー固有値を一定を刻み幅で変えながら何度も繰り返すために、一回のルンゲ・クッタに時間がかかりすぎると辛い。
結果的にルンゲ・クッタの精度は本質じゃなかったのでAccuracyGoal->10,PrecisionGoal->10で設定しておけば十分なようだ。
この2点を改善し、調和振動子の数値計算のやり直してみた。 出力が以下。

と入力すると、以下の出力が得られます。







出力を見てもらえば分かりますが、エネルギー固有値は0.1%以上の精度で求まっています。
また図の出力でx軸の範囲を広げておきました。 この図からもわかりますが、偶関数の第一励起状態であるn=2の波動関数はx=3(前回の波動関数評価点)ではまだxが十分大きいとは見なせず、これが前回のエネルギーの精度が悪かった原因です。 図からx=4ならば漸近点と見なせそうです(ちなみにプログラムではx=10での波動関数評価してエネルギー固有値を求めています)。
これでプログラムのバグは取れたと思うので、次はポテンシャルを変えて遊んでみたいと思っています。因みに波動関数を精度良く求めるnumerov法のプログラムの作りました。numerov法での誤差はデフォルトでxの刻みの6乗で、計算時間も短いようなのでそのうちschrodingerのcodeもnumerov法に変更したいと思います。
コメント
コメントの投稿
トラックバック
http://letsphysics.blog17.fc2.com/tb.php/430-f3441ca6
