schrodinger1d プログラム仕様
1次元シュレーディンガー方程式ソルバー
このスクリプトは、1次元の定常シュレーディンガー方程式を射撃法を用いて数値的に解きます。 原子単位系 (atomic units) を使用し、Verlet積分を用いて波動関数を計算します。 境界条件として「漸近条件 (asymptotic)」または「ゼロ条件 (zero)」を選択でき、 結果はExcelファイルに保存され、matplotlibで可視化されます。
- V(x)[ソース]
ポテンシャルエネルギーを計算します。
- 詳細説明:
現在の実装では、調和振動子ポテンシャル V(x) = 0.5 * x^2 (Ha) を使用しています。 他のポテンシャルを使用する場合は、この関数を変更してください。
- パラメータ:
x (float or numpy.ndarray) -- 位置 (原子単位)
- 戻り値:
ポテンシャルエネルギー V(x) (Ha)
- 戻り値の型:
float or numpy.ndarray
- initialize()[ソース]
コマンドライン引数を初期化し、パースします。
- 詳細説明:
argparse モジュールを使用して、エネルギーの推定値、計算領域、メッシュ点数、 波動関数の発散閾値、レポート間隔、出力ファイル名、境界条件、初期微分値といった パラメータを定義します。
- 戻り値:
parser (argparse.ArgumentParser): 引数パーサーオブジェクト
args (argparse.Namespace): パースされた引数の名前空間
- 戻り値の型:
tuple[argparse.ArgumentParser, argparse.Namespace]
- main()[ソース]
プログラムのメイン処理を実行します。
- 詳細説明:
コマンドライン引数をパースして初期設定を行います。
パースされた引数を使用して solve_schrodinger 関数を呼び出し、 1次元シュレーディンガー方程式を解きます。
計算結果のメッセージと終了点の波動関数値を出力します。
save_and_plot 関数を呼び出し、結果をExcelに保存し、グラフを表示します。
- 戻り値:
なし
- 戻り値の型:
None
- save_and_plot(x, psi, outfile, diverged=False, diverged_x=None)[ソース]
計算結果の波動関数データをExcelファイルに保存し、matplotlibでプロットします。
- 詳細説明:
波動関数 psi(x) と確率密度 |psi(x)|^2 をExcelファイル (outfile) に保存します。 matplotlibを用いて psi(x) と |psi(x)|^2 をグラフ表示します。 波動関数が発散した場合は、発散が始まったx座標に垂直な破線が追加され、y軸が対数スケールになります。
- パラメータ:
x (numpy.ndarray) -- x座標の配列
psi (numpy.ndarray) -- 計算された波動関数の配列
outfile (str) -- データ保存先のExcelファイル名
diverged (bool) -- 波動関数が計算中に発散したかどうかを示すフラグ。デフォルトはFalse。
diverged_x (float or None) -- 波動関数が発散し始めたx座標。diverged がTrueの場合にのみ使用されます。 デフォルトはNone。
- 戻り値:
なし
- 戻り値の型:
None
- solve_schrodinger(E, L, nx, psi_max, report_step, bc, eps)[ソース]
1次元シュレーディンガー方程式を射撃法で解きます。
- 詳細説明:
Verlet積分を用いて波動関数を数値的に伝播させます。 指定された境界条件 (bc) に基づいて初期条件を設定し、 計算中に波動関数が psi_max を超えた場合、発散と判断して計算を中断します。 計算の進行状況は report_step 間隔で出力されます。
- パラメータ:
E (float) -- エネルギー固有値の推定値 (Ha)
L (float) -- 計算領域の半分のサイズ。xは[-L, L]の範囲になります。
nx (int) -- メッシュ点の数
psi_max (float) -- 波動関数の発散を検出するための閾値
report_step (int) -- 計算の進行状況を報告するステップ間隔。0以下の場合は報告しません。
bc (str) -- 境界条件のタイプ ("asymptotic" または "zero")
eps (float) -- bc="zero" の場合に使用される、x=-Lにおける波動関数の初期微分値
- 戻り値:
x_full (numpy.ndarray): 計算領域のx座標の配列
psi_full (numpy.ndarray): 計算された波動関数の配列。発散した場合は、発散点までの配列。
info (dict): 計算結果に関する情報を含む辞書。 - "success" (bool): 積分が正常に完了したか。 - "diverged" (bool): 波動関数が発散したか。 - "diverged_x" (float or None): 波動関数が発散し始めたx座標。発散しなかった場合はNone。 - "message" (str): 計算結果に関する簡潔なメッセージ。
- 戻り値の型:
tuple[numpy.ndarray, numpy.ndarray, dict]